JSP

1.爲什麼使用JSP

JSP是簡Servlet編寫的一種技術,它將Java代碼和HTML語句混合在同一文件中編寫。只對頁面中要動態產生的內容採用Java編寫,而對靜態固定不變的內容採用HTML編寫。

2.JSP的helloword

1)新建JSP文件,在<body>節點中<% %>內編寫Java代碼即可。

2)在JSP頁面中編寫的Java代碼需要嵌套在<%和%>中,嵌套在<%和%>之間的Java代碼被稱之爲腳本片段(Scriptlets),沒有嵌套在<%和%>之間的內容被稱之爲JSP的模版元素

3)JSP文件就像普通的HTML文件一樣,它們可以放置在WEB應用程序中的除了WEB-INF及其子目錄外的其他任何目錄中,JSP頁面的訪問路徑與普通HTML頁面的訪問路徑形式也完全一樣。

4)在JSP頁面中也可以使用一種稱之爲JSP表達式的元素,只需將要輸出的變量或表達式直接封裝在<%= 和 %>之中,就可以向客戶端輸出這個變量或表達式的運算結果。在JSP表達式中嵌套的變量或表達式後面不能有分號。 

5)JSP本質上就是Servlet。每個JSP 頁面在第一次被訪問時,JSP引擎將它翻譯成一個Servlet源程序,接着再把這個Servlet源程序編譯成Servlet的class類文件,然後再由WEB容器(Servlet引擎)像調用普通Servlet程序一樣的方式來裝載和解釋執行這個由JSP頁面翻譯成的Servlet程序。

3.JSP頁面的隱含變量

public void _jspService(HttpServletRequest request,
			HttpServletResponse response)
		throws java.io.IOException, ServletException
{
	JspFactory _jspxFactory = null;
	PageContext pageContext = null;
	HttpSession session = null;
	ServletContext application = null;
	ServletConfig config = null;
	JspWriter out = null;
	Object page = this;
	...
	...
	//使用<% %>編寫代碼在此位置,可以用到request,response,pageContext,session,
	//application,config,out,page八個隱含對象(實際上,還可以使用exception對象)
	
}
1)request:HttpServletRequest對象

2)response:HttpServletResponse對象(在JSP頁面中幾乎不會調用response的任何方法)

3)pageContext:頁面的上下文,是PageContext的一個對象,可以從該對象中獲取其他的八個隱含對象,亦可以從中獲取到當前頁面的其他信息(學習自定義標籤時使用它)

4)session:代表瀏覽器和服務器的一次會話,是HttpSession的一個對象(後面詳細學習)

5)application:代表當前WEB應用,是ServletContext的一個對象,

6)config:是當前JSP對應的Servlet的ServletConfig對象(開發時,幾乎不使用)

7)out:JspWriter對象,調用out.println()可以直接把字符串打印到瀏覽器上。換行:out.println("<br>")

8)page:指向當前JSP對應Servlet對象的引用,但爲Object類型,只能調用Object類方法(幾乎不使用)

9)exception:在聲明瞭page指令的isErroPage=true時纔可使用

pageContext  request  session  application(屬性域返回從小到大)

4.和屬性相關的方法

1)方法:

Object  getAttribute(String name):獲取指定的屬性

Enumeration  getAttributeNames():獲取所有屬性的名稱

setAttribute(String name,Object o):設置指定的屬性

removeAttribute(String name):移除指定的屬性

2)相關對象:

pageContext  request  session  application都有上述方法。

pageContext:僅限於當前JSP頁面

request:僅限於同一個請求

session:一次會話(瀏覽器從打開到關閉,此期間會話不失效)

application:當前WEB應用,全局的作用範圍

5.請求重定向與轉發

1)區別


2)具體實現方法

(1)請求轉發:

request.getRequestDispatcher("/finalPage.jsp").forward(request, response);
(2)請求重定向

response.sendRedirect("finalPage.jsp");

6.JSP指令(page  include  taglib)

1)page:page指令最好是放在整個JSP頁面的起始位置。 

import:導入類包

session=[true|false] : 當前JSP頁面是否允許使用session

errorPage="relative_url" :如果WEB應用出現錯誤,將轉到該屬性指定的頁面

isErrorPage="true | false" :頁面是否可以使用exception對象

contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ]:當前頁面的響應編碼類型

pageEncoding="characterSet | ISO-8859-1" :當前頁面的編碼類型

isELIgnored="true | false" :當前頁面是否可以使用EL表達式,通常爲true

2)inclue:include指令用於通知JSP引擎在翻譯當前JSP頁面時將其他文件中的內容合併進當前JSP頁面轉換成的Servlet源文件中,這種在源文件級別進行引入的方式稱之爲靜態引入,當前JSP頁面與靜態引入的頁面緊密結合爲一個Servlet

(1)<%@ include file="relativeURL"%>

(2)file屬性的設置值必須使用相對路徑,如果以“/”開頭,表示相對於當前WEB應用程序的根目錄(注意不是站點根目錄),否則,表示相對於當前文件。

7.JSP標籤

1)<jsp:inclue>:用於把另外一個資源的輸出內容插入進當前JSP頁面的輸出內容之中,這種在JSP頁面執行時的引入方式稱之爲動態引入。

(1)<jsp:include page="relativeURL | <%=expression%>" flush="true|false" />

(2)page屬性用於指定被引入資源的相對路徑,它也可以通過執行一個表達式來獲得。

(3)flush屬性指定在插入其他資源的輸出內容時,是否先將當前JSP頁面的已輸出的內容刷新到客戶端。

2)<jsp:forward>:用於把請求轉發給另外一個資源

(1)<jsp:forward page="relativeURL | <%=expression%>" /> :page屬性用於指定請求轉發到的資源的相對路徑,它也可以通過執行一個表達式來獲得

(2)RequestDispatcher.forward方法、PageContext.forward方法、<jsp:forward>標籤的區別:調用RequestDispatcher.forward方法的JSP腳本代碼的前後不能有JSP模版內容。調用PageContext.forward方法的JSP腳本代碼的後面不能有JSP模版內容。<Jsp:forward>標籤的前後都能有JSP模版內容。

3)<jsp:param>:

(1)<jsp:include page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
</jsp:include>

(2)標籤的name屬性用於指定參數名,value屬性用於指定參數值

8.中文亂碼

1)在JSP頁面上輸入中文,請求頁面後不出現亂碼,保證contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%,charset和pageEncoding編碼一致,且都支持中文,通常建議取值爲UTF-8。還需要保證瀏覽器的顯示的字符編碼支持也和請求編碼相一致。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章