JSP規範、Servlet關係、基礎
部落格目錄
1、什麼是JSP
2、JSP與Servlet的關係
3、JSP規範
4、JSP註釋、程式碼塊、宣告語句塊、表示式塊
5、JSP基礎總結
一、什麼是JSP
- JSP全稱:Java Server Pages
- JSP是在傳統靜態網頁HTML中插入Java程式碼片段和JSP標籤的一直檔案,字尾為.jsp
- 因為Java是跨平臺的,所以JSP也是跨平臺
二、JSP與Servlet的關係
JSP檔案的本質是Servlet,只不過JSP與Servlet不同的是,JSP是專門用於進行資料展示的Servlet,其有特殊的寫法。而普通的Servlet是用於完成業務邏輯處理的。由於Servlet是執行在單例多執行緒環境下的,所以JSP同樣也是執行在單例多執行緒環境下
三、JSP規範
將JSP頁面翻譯為Servlet的過程,是由Tomcat完成的。在Tomcat內建了一個JSP翻譯引擎,當第一次訪問該JSP頁面時,翻譯引擎會將JSP頁面翻譯為Servlet,例如JSP頁面中的HTML,CSS,JavaScript,及普通文字均被翻譯到out.write中(例如下圖就是JSP編譯後的Servlet),Tomcat中的JSP翻譯引擎,就遵循了這個JSP規範
如何找到JSP編譯成Java後的檔案
在Tomcat目錄下
work>Catalina>localhost>專案名稱>org>apache>jsp>.java檔案
四、JSP註釋、程式碼塊、宣告語句塊、表示式塊
1、JSP註釋<%– –%>
- 翻譯引擎會將HTML註釋翻譯到Service方法中的out.write()中,而JSP註釋會被忽略成一個\t
- 在客戶瀏覽器檢視原始碼時,HTML註釋是可以檢視到的,但JSP註釋是無法檢視的,所以如果是很重要的註釋可以寫成JSP註釋
圖1是JSP註釋和HTML註釋的區別
圖2是HTML註釋被翻譯到了Service方法中,而JSP註釋被忽略成一個\t
圖1
圖2
2、JSP程式碼塊<% %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- JSP程式碼塊 -->
<%
String name="linjie";
%>
<%
System.out.println(name);
System.out.println("這是Java程式碼塊");
%>
</body>
</html>
- 可以寫在任意位置
- 每個<% %>都是聯絡的,因為都翻譯到一個Service中
- <% %>中宣告變數不能加許可權訪問控制符,因為<% %>會被翻譯到Service方法中,而方法中的變數不能用許可權訪問控制符
- <% %>中不能定義方法,因為被翻譯到Service方法中又有方法,在Java中不允許方法的巢狀
- <% %>中不能定義靜態語句塊:static{},方法中不能有靜態程式碼塊,靜態程式碼塊應該在類中
3、JSP宣告語句塊<%! %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--JSP宣告語句塊 -->
<%!
public void show()
{
System.out.println("Java宣告語句塊");
}
%>
<%
show();
%>
</body>
</html>
- JSP宣告語句塊被翻譯的位置改變了:翻譯到了類中,成為了成員變數、成員方法,可以修改(但會造成執行緒安全問題,因為Servlet是單例多執行緒的,如果有可修改的成員變數,則會引起執行緒安全問題,所以一般Servlet不加成員變數)
4、JSP表示式塊<%= %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String name="linjie";
%>
<!-- JSP表示式塊 -->
<%=name %>
</body>
</html>
- 會在瀏覽器顯示name的值
- 被翻譯到Service中out.print(name);
五、總結
1、JSP程式碼塊
- <% %>
- 不能寫方法、訪問控制符、靜態語句塊
- 翻譯到Service方法中
2、JSP宣告語句塊
- <%! %>
- 能寫方法、訪問控制符、靜態語句塊
- 翻譯到類中
- 但由於Servlet是單例多執行緒,其中如果加了可修改成員變數會引起執行緒安全問題
3、JSP表示式塊
- <%= %>
- 沒有分號
- <%=name %>:即在瀏覽器中顯示name的值
- 被翻譯到Service方法中:out.print(name);
相關文章
- Servlet和JSP規範及版本對應關係ServletJS
- javaweb關於jsp、servlet基礎筆記JavaWebJSServlet筆記
- JSP/Servlet基礎語法JSServlet
- Java之JSP和Servlet基礎知識。JavaJSServlet
- 從規範看ECMAScript(一):規範基礎
- JAVA基礎:JSP與Servlet的區別(轉)JavaJSServlet
- 《css基礎補充--規範》CSS
- Python基礎 - 命名規範Python
- 會計基礎工作規範
- 【iOS 搭建基礎框架】編碼規範 (命名規範篇)iOS框架
- 網易郵箱前端Javascript編碼規範:基礎規範前端JavaScript
- Servlet基礎Servlet
- WebWork 2.2 Filter,Url Rewrite,Servlet規範WebFilterServlet
- 【Java基礎】ServletJavaServlet
- Python基礎:編碼規範(4)Python
- Servlet3.1規範之Web應用ServletWeb
- Servlet 3.1 規範預覽版釋出Servlet
- 設計模式-UML關係基礎設計模式
- Servlet超基礎PrintWriter ??Servlet
- JSP基礎JS
- 03 AMD規範的基礎使用詳解
- 前端基礎(四):前端國際規範收集前端
- jsp servlet javabeanJSServletJavaBean
- JSP與ServletJSServlet
- jsp、servlet關於中文問題再談JSServlet
- 大資料基礎(一)——關係+文章大資料
- jsp基礎-初識jspJS
- PSR-1 Basic Coding Standard 基礎編碼規範 - PHP標準規範PHP
- 【JS基礎】一文看懂前端模組化規範JS前端
- [譯]前端基礎知識儲備——Promise/A+規範前端Promise
- 零基礎快速入門:java的命名規範Java
- Servlet基礎知識點整理Servlet
- Servlet基礎教程之呼叫流程Servlet
- JSP基礎知識JS
- jsp+servlet 練習JSServlet
- EJB/JSP/Servlet Sequence GeneratorJSServlet
- 【iOS 搭建基礎框架】編碼規範 (程式碼格式篇)iOS框架
- Servlet.service() for Servlet jsp threw exception javax.servlet.ServletException:File "/pageFooServletJSExceptionJava