Jsp基本內容
1.Jsp簡介
JSP(Java Server Pages)是JavaWeb伺服器端的動態資源,它與html頁面的作用是相同的,顯示資料和獲取資料。
jsp: 作為請求發起頁面,例如顯示錶單、超連結。
: 作為請求結束頁面,例如顯示資料。
Servlet: 作為請求中處理資料的環節。
jsp的組成 :jsp = html + java指令碼 + jsp標籤(指令)
jsp中可直接使用的物件一共有9個,被稱之為9大內建物件
3種java指令碼:
<%…%>:寫java程式碼片段,(類似方法)
<%=…%>:用於輸出,用於輸出一條表示式(或變數)的結果。
<%!…%>:宣告,用來建立類的成員變數和成員方法(類似與類)
<!-- --> Html 註釋客戶端可見
<%-- --%> Jsp 註釋客戶端不可見
// java 單行註釋
/* */ java 多行註釋
jsp註釋:<%– … –%>
當伺服器把jsp編譯成java檔案時已經忽略了註釋部分!
jsp原理
jsp其實是一種特殊的Servlet
- 當jsp頁面第一次被訪問時,伺服器會把jsp編譯成java檔案
- 然後再把java編譯成.class
- 然後建立該類物件
- 最後呼叫它的service()方法
- 第二次請求同一jsp時,直接呼叫service()方法。
2.九大內建物件
在jsp中無需宣告即可直接使用的9個物件
out(JspWriter):等同與response.getWriter(),用來向客戶端傳送文字資料;
config(ServletConfig):對應“真身”中的ServletConfig;
page(當前JSP的真身型別):當前JSP頁面的“this”,即當前物件,引用為Object型別;
pageContext(PageContext):頁面上下文物件,它是最後一個沒講的域物件;
exception(Throwable):只有在錯誤頁面中可以使用這個物件;
request(HttpServletRequest):即HttpServletRequest類的物件;
response(HttpServletResponse):即HttpServletResponse類的物件;
application(ServletContext):即ServletContext類的物件;
session(HttpSession):即HttpSession類的物件,不是每個JSP頁面中都可以使用,如果在某個JSP頁面中設定<%@page session=”false”%>,說明這個頁面不能使用session。
pageContext(一個頂9個!)
3.jsp四大作用域
Servlet中有三大域,而JSP中有四大域!
Page 範圍:只在一個頁面中儲存資料; javax.servlet.jsp.PageContext(抽象類)
Request 範圍:只在一個請求中儲存資料; javax.servlet.http.HttpServletRequest(介面)
Session 範圍:在一次會話範圍中儲存資料,僅供單個使用者使用;javax.servlet.http.HttpSession(介面)
Application 範圍:在整個伺服器上儲存資料,所有使用者共享;javax.servlet.ServletContext(介面)
application.jsp(伺服器上的所有使用者共享資料)
<%//設定兩個application頁面的資料key value
//在整個伺服器上儲存資料,供所有使用者使用
application.setAttribute("name", "request王小波");
application.setAttribute("age",35);
%>
<h1>application設定完畢</h1>
<%
//取值
String name= (String)application.getAttribute("name");
int age=(Integer)application.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年齡:<%=age%></font>
session:整個會話(一個會話中只有一個使用者)
<%//設定兩個session頁面的資料key value
//在一次會話範圍內儲存資料,僅供單個使用者使用(只能用一個瀏覽器開啟,其他瀏覽器不可以)
session.setAttribute("name", "request王小波");
session.setAttribute("age",35);
%>
<h1>session設定完畢</h1>
<%
//取值
String name= (String)session.getAttribute("name");
int age=(Integer)session.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年齡:<%=age%></font>
request:一個請求鏈! requestScope.jsp這個檔案直接跳轉到requestTarget.jsp,不顯示requestScope.jsp這個頁面!!
<%//設定兩個request頁面的資料key value
// 只在一個請求內儲存資料
request.setAttribute("name", "request王小波");
request.setAttribute("age",35);
%>
<h1>測試這個頁面會顯示嗎?</h1>
<jsp:forward page="requestTarget.jsp"/>
<%
//取值
String name= (String)request.getAttribute("name");
int age=(Integer)request.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年齡:<%=age%></font>
pageContext:一個jsp頁面!這個域是在當前jsp頁面和當前jsp頁面中使用的標籤之間共享資料! (只看到這裡)
<%//設定兩個page頁面的資料key value
pageContext.setAttribute("name", "page王小波");
pageContext.setAttribute("age",35);
%>
<%
//取值
String name= (String)pageContext.getAttribute("name");
int age=(Integer)pageContext.getAttribute("age");
%>
<font>姓名:<%=name %></font>
<font>年齡:<%=age%></font>
JSP動作標籤
動作標籤是由tomcat(伺服器)來解釋執行!而html標籤由瀏覽器來執行!
1.jsp包含指令 <jsp:include>
<%@ include file=”要包含的檔案”%> 靜態包含先包含,後編譯處理;
<jsp:include page=”要包含的檔案”> 動態包含先編譯處理,後包含;
以後開發用動態包含;
2.<jsp:forward>
例如:<jsp:forward page="xxx"/>,用來轉發到指定頁面
例如在a.jsp中存在如下內容:<jsp:fowrad page="b.jsp"/>
a.jsp中的內容不會顯示在瀏覽器上,而只是顯示b.jsp的內容。而且在<jsp:forwad>標籤下面的內容不會被執行。
3.<jsp:param> ,該標籤是和的子標籤,用來向其他頁面傳遞引數。