JSP 簡單入門

JSP 頁面是Web 程序的展示部分,既包括html代碼,也可以運行後臺代碼,還有一些自己特定的處理方式。本質上也是一個Servlet。

1. 隱式對象

Servlet 容器會傳遞一些對象給Servlet,在jsp中可以通過隱式對象來訪問Servlet 容器傳遞的幾個對象,隱式對象如下:

  • request:HttpServletRequest
  • response:HttpServletResponse
  • out:JspWriter
  • session:HttpSession
  • application:ServletContext
  • config:ServletConfig
  • pageContext:PageContext
  • page:HttpJspPage
  • exception:Throwable

如從HttpServletRequest 中獲取username 的參數,

<%
	 String userName=request.getParameter("userName") 
%>

2. 指令

指令是JSP語法元素的第一種類型,它們指示JSP轉換器如何翻譯JSP頁面爲Servlet,JSP2.2定義了多個指令,但目前用的比較多的是page和include指令。

  • page:<%@ page … %>,一般用來導入包,<%@ page import=“java.util.Date”%>;
  • include: <%@ include…%>,可以將其他文件內容包含到當前頁面中,<%@include file=“main1.jspf”%>。

3. 腳本元素

一個腳本程序是一個java代碼塊,以<% 開始,以%>結束。

3.1 表達式

每個表達式都會被JSP容器執行,並使用隱式對象out的打印方法輸出結果,表達式以<%= 開始,以%>結束。

3.2 聲明

可以聲明能在JSP頁面中使用的變量和方法,聲明以<%! 開始,以%> 結束。

4. 動作

動作是第三種類型的語法元素,他們被轉換成java代碼來執行操作,如訪問一個java 對象或者調用方法,有JSP 容器支持的標註動作,也可以創建自定義標籤來執行某些操作,

<jsp:useBean id="today" class="java.util.Date" />
<%=today%>

創建Date的對象today,並打印出來。另外還有setProperty (給一個對象設置屬性,並且可以指定屬性的範圍,在5.1中: jsp的4個作用域 pageScope、requestScope、sessionScope、applicationScope)和 getProperty(獲取一個對象的屬性)。

5. 表達式語音

JSP 2.0 最重要的特性之一就是表達式語言,以 開 始 , 以 結 束 , 結 構 爲 { 開始,以 } 結束,結構爲 {expression},EL 表達式可以返回任意類型的值,如果返回的值是一個帶對象的屬性,可以使用[] 或者 . 來訪問屬性。對於request域的屬性訪問,可以是顯式的也可以是隱式的,如${requestScope.employee.name} 或者 ${employee.name}都可以

5.1 EL 隱式對象

JSP 有自己的隱式對象,但是在免腳本(腳本表達式<%%>)的JSP頁面中不能訪問這些隱式對象。EL 允許通過它自己的隱式對象來訪問所有的對象。

對象 描述
pageContext 當前JSP的PageContext,可以訪問JSP 的隱式對象
initParam 包含所有環境的初始化參數,並用參數名作爲key的map
param 這是一個包含所有請求參數,並用參數名作爲key的map,每個key值就是指定名稱的第一個參數值,如果兩個參數名同名,只有第一個能夠用param來獲取值,要想獲取所有同名參數的值,就得用params代替
paramValues 這是一個包含所有請求參數,並用參數名作爲key的map,每個key值就是一個字符串數組,其中包含了指定參數名稱的所有參數值,就算該參數只有一個值,他也仍然會返回一個帶有一個元素的數組
header 這是一個包含請求標題並用標題名作爲key的map,每個key值就是指定標題名稱的第一個標題,如果同名的標題不止一個,只返回第一個值,要想獲取多個值的標題,使用 headerValues 對象代替
headerValues 類似header,每個key值就是一個字符串數組,包含了指定參數名稱的所有值
cookie 包含了當前請求對象中所有cookie對象的map,cookie 名稱就是key名稱,並且每個key都映射到一個cookie對象
applicationScope ServletContext對象中所有屬性的map,是程序全局變量,對每個用戶每個頁面都有效。存放在ServletContext對象中。它的存活時間是最長的,如果不進行手工刪除,它們就一直可以使用,application裏的變量一直在累加,除非你重啓tomcat,否則它會一直變大。
sessionScope HttpSession對象中所有屬性的map,是用戶全局變量,在整個會話期間都有效。只要頁面不關閉就一直有效(或者直到用戶一直未活動導致會話過期,默認session過期時間爲30分鐘,或調用HttpSession的invalidate()方法),session的變量一直在累加,開始還看不出區別,只要關閉瀏覽器,再次重啓瀏覽器訪問這頁,session裏的變量就重新計算了。
requestScope 當前HttpServletRequest對象中所有屬性的map,指在一次請求的全過程中有效,即從http請求到服務器處理結束,返回響應的整個過程,存放在HttpServletRequest對象中。在這個過程中可以使用forward方式跳轉多個jsp。在這些頁面裏你都可以使用這個變量。request裏的變量可以跨越forward前後的兩頁。但是隻要刷新頁面,它們就重新計算了
pageScope 包含了全頁面範圍內的所有屬性,是一個map,屬性名稱就是map的key,當前頁面有效。在一個jsp頁面裏有效。page裏的變量沒法從index.jsp傳遞到test.jsp。只要頁面跳轉了,它們就不見了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章