JSP+EL表示式學習
阿新 • • 發佈:2019-01-01
jsp是可以在傳統 HTML頁面插入java程式碼
1.JSP原理
(1)當用戶訪問一個JSP頁面時,回想一個Servlet容器(Tomcat)發出請求;
(2)如果是第一次請求頁面,或頁面有所改動,則servlet容器首先要把JSP頁面(假設為test.jsp)轉化為Servlet程式碼(test.java),再將其轉化為(test.class檔案);因為這個過程(編譯)會耗費一定時間,所以第一次訪問或jsp檔案有改動時,訪問時間有些長;
(3)JSP容器負責呼叫從JSP轉換來的servlet,這些servlet負責提供服務相應使用者請求(比如客戶端傳送表單,要求servlet:formprocessor.java來處理,則容器會建立一個執行緒,呼叫formprocessor.java來處理該請求);如果使用者有多個請求,則容器會建立多個執行緒處理多個請求;
(4)容器執行位元組碼檔案(包括呼叫的servlet:formprocessor.java位元組嗎),並將其結果返回到客戶端;(返回的最終方式是有servlet輸出html格式的檔案流)
2.JSP組成
(1)靜態部分:標準的HTML標籤、靜態的頁面內容,這些內容與靜態HTML頁面相同.
(2)動態部分:Java程式控制的內容,這些內容由Java程式來動態生成。
二、JSP的基本語法
1.JSP指令碼表示式:
語法<%=表示式%>
例如:<%=new Date().toLocaleString()%>
作用:在網頁上輸出資料
2.JSP指令碼片段:
語法<% 程式碼1;程式碼2 ....%>
對應Servlet 出現在JspServlet()中
作用:在JSP中輸出java程式碼
3.JSP宣告
作用:定義一些類成員(變數 )
語法 <%! 定義的變數 、方法 %>
4、JSP註釋
語法<%--內容--%>
與html註釋不同他不會把註釋的內容翻譯到Servlet中
三、JSP的指令
指令是為了致使伺服器如何處理JSP頁面的內容
1.指令
page taglib include
語法<%@指令名稱 指令屬性="值" ....%>
2.指令作用
1.page指令 定義JSP頁面的屬性
屬性 import:匯入JSP頁面中java指令碼
import:匯入JSP頁面中java指令碼需要用到的類或包。
<%@page import=”java.util.Date,java.util.UUID”%>
或者
<%@page import=”java.util.Date”%>
<%@page import=”java.util.UUID”%>
注意:伺服器會自動匯入
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
session:指示是否產生HttpSession物件。預設值是true。
buffer:JSP中的HTML的輸出都是用的JspWriter的字元輸出流。該屬性指定輸出流的快取大小。預設8Kb
errorPage:指定當JSP出現異常時轉向(請求轉發)的頁面地址。該地址如果以”/”開頭,“/”代表著當前應用;如果不是以”/”開頭,表示的是相對路徑。
另外一種方式:配置全域性錯誤提示頁面。
修改web.xml
isErrorPage:指示是否產生exception內建物件。預設值是false
contentType:和響應訊息頭Content-Type作用一樣。HttpServletResponse.setContentType(); text/html;charset=UTF-8
pageEncoding:指示伺服器在翻譯JSP時採用的編碼
特點:還有contentType的作用
isELIgnored:是否忽略EL表示式。預設是false(不忽略)
2.taglib指令:
作用:引入外部的標籤庫(JSTL)
屬性:
uri:外部標籤的名稱空間
prefix:字首
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
3.include指令:
作用:包含。靜態包含
屬性:
file:被包含的頁面的地址。”/”表示當前應用。不以”/”開頭,表示相對路徑
四、JSP的動作元素
動作元素就是JSP內建標籤
jsp:include:實現動態包含
page:指定被包含的目標資源的URL地址。如果以”/”,代表著當前應用。否則表示的是相對路徑
jsp:forward:實現請求轉發
page:指定轉發的目標資源的URL地址。如果以”/”,代表著當前應用。否則表示的是相對路徑
jsp:param:包含或轉發時傳遞請求引數
五、JSP的九大隱式物件
1.JSP對應Servlet的service的區域性變數
2.JSP的就九大隱式物件
(1) HttpSession類的session物件 如果Page指令的session屬性是false就沒有這個物件
作用:主要用於來分別儲存每個使用者資訊,與請求關聯的會話;
會話狀態維持是Web應用開發者必須面對的問題。
(2) HttpServletRequest類的request物件
作用:代表請求物件,主要用於接受客戶端通過HTTP協議連線傳輸到伺服器端的資料。
(3) HttpServletResponse類的respone物件
作用:代表響應物件,主要用於向客戶端傳送資料
(4) JspWriter類的out物件
作用:主要用於向客戶端輸出資料;
Out的基類是JspWriter
(5) ServletContex類的application物件
作用:主要用於儲存使用者資訊,程式碼片段的執行環境;
它是一個共享的內建物件,即一個容器中的多個使用者共享一個application物件,故其儲存的資訊被所有使用者所共享.
(6) PageContext類的pageContext物件
作用:管理網頁屬性,為JSP頁面包裝頁面的上下文,管理對屬於JSP中特殊可見部分中已命名物件的訪問,它的建立和初始化都是由容器來完成的。
(7) ServletConfig類的config物件
作用:程式碼片段配置物件,表示Servlet的配置。
(8) Object類的page(相當於this)物件
作用:處理JSP網頁,是Object類的一個例項,指的是JSP實現類的例項,即它也是JSP本身,只有在JSP頁面範圍之內才是合法的。
(9)Exception 如果page指令的isErrorpage屬性是false就沒有這物件
作用:處理JSP檔案執行時發生的錯誤和異常
3.pageContext隱式物件作用
是一個頁面範圍的域物件,能操作其他三個域物件的資料(ServletRequest ServletSession ServletContext)
方法
void setAttribute(String key,Object value)
void removeAttribute(String key)
Object getAttribute(String key)
pageContext頁面域(作用域)範圍。pageContext.setAttribute("p", "ppp");//只能本頁中能取出來
void setAttribute(String key,Object value,int scope)
void removeAttribute(String key,int scope)
Object getAttribute(String key,int scope)
int Scope:是一個常量
PageContext.PAGE_SCOPE表示頁面範圍
PageContext.REQUEST_SCOPE表示請求範圍
PageContext.SESSION_SCOPE表示回話範圍
PageContext.APPLICATION SCOPE表示應用範圍
注意:
<%
pageContext.setAttribute(“g”,”gg”,PageContext.APPLICATION_SCOPE);
//application.setAttribute(“g”,”gg”); 功能和上面一樣
%>
Object findAttribute(String key):依次從頁面、請求、會話、應用範圍查詢指定名稱的資料。找到為止。
PageContext可以獲取其他八個JSP隱式物件
ServletRequest request = pageContext.getRequest()
提供了包含和轉發的簡單方式
pageContext.forward("/demo.jsp");
pageContext.include("/demo.jsp");
六:四大域物件
PageContext:存放的資料只能在當頁中取出
ServletRequest:存放的資料在一次會話請求中取出
ServletSession:存放的資料只能在一次回話中取出
ServletContext:存放的資料在當前應用中取出
七:EL表示式
1.EL主要作用:向介面輸出資料 替換JSP中的表示式<%= %>
基本語法形式
${11}
和<%=11%>效果一樣
要先把資料存放到四大域 然後再獲取
El表示式能從四大域物件中獲取資料
1.獲取資料