學習JSP(一週總結)
九大內建物件(servelt建立好的)
1.1 Request 請求物件 作用域 Request
表示為一個客戶端到服務端的請求,包含客戶端提交到服務端的資料等資訊
1.2 response 響應物件 作用域 Page
服務端可以通過該物件向客戶端進行響應(資料輸出,頁面跳轉)
1.3 session 會話物件 作用域 Session
客戶端與服務端的一次會話,預設有效時間保持30分鐘,伺服器客戶端之間可以通過該物件進行資料共享
1.4 application 應用程式物件 作用域 Application
表示位servlet上下文物件(servletContext,應用的執行環境),只要伺服器不停止,會一直存在,所有客戶端之間都能共享該物件
1.5 page 頁面物件 作用域 Page
表示當前的jsp物件(servlet),實際為this
1.6 pageContext 頁面上下文物件 作用域 Page
能夠在當前的
1.7 out 輸出物件 作用域 Page
基於response獲取的輸出流物件,可以使用該物件向客戶端輸出資料(html程式碼)
1.8 config 配置物件 作用域 Page
表示應用程式的配置物件
1.9 exception 例外物件 作用域 page
是Throwable的例項,表示頁面中的錯誤與異常
請求轉發與重定向
1.10重定向(客戶端發起第二次請求,位址列改變,session可以或得到資料)
response.sendRedirect(“main.jsp”);
重定向:由客戶端發起第二次請求,所以重定向又稱之為客戶端跳轉,在客戶端位址列上顯示的為最後一次請求的資源,
重定向無法將儲存在請求範圍內的資料傳遞到下一個頁面中
1.11請求轉發
request.getRequestDispatcher(“main.jsp”).forward(request,response);
請求轉發:由伺服器發起第二次請求,所以請求轉發又稱之為服務端跳轉,在客戶端位址列顯示的為第一次請求的資源,
請求轉發可以將請求向下繼續傳遞,只要保持是一個request物件,始終能夠獲取到request中的資料
四大作用域
從小到大
page範圍:<%=pageContext.getAttribute("pageMsg")%><br>
request範圍的結果:<%=request.getAttribute("msg")%><br>
session範圍的結果:<%=session.getAttribute("sessionMsg")%><br>
application範圍的結果:<%=application.getAttribute("appMsg")%><br>
2017/8/19
四種會話跟蹤技術
1.12URL地址重寫
<a href=”main.jsp?data=來自第一個頁面的資料”></a>
取出:
<%
request.getParameter("data");
%>
1.13隱藏域傳值(form提交方式)(可以動態寫資料)
1.13.1 post用於大量資料時,此時取出資料必須設定編碼格式,否則為亂碼:
資料:<%
request.setCharacterEncoding("utf-8");
out.println(request.getParameter("data"));
%>
用form傳資料
<form action=”main.jsp” method=”get”>// method=”post”
<inputtype=”hidden” name=”data” value=”通過隱藏域傳遞的資料”>
<button>提交</button>
</form>
get:
post:
1.14session儲存(生命週期30min or 會話結束(瀏覽器關閉))
session建立於服務端和客戶端之間
<%
session.setAttribute("msg", "session中的資料");
%>
//同一個瀏覽器session共享 sessionId值不變不同瀏覽器session不同
1.15cookie儲存(由服務端響應回來,儲存在本地,js能處理)
1.15.1 不能允許出現中文以及一些特殊符號(設定編碼,解碼)
1.15.2 不設定有效期(預設與session一致,關閉瀏覽器則失效)
1.15.3 取cookie時是取出cookie陣列
<!-- cookie儲存 -->
<%
//cookie中不允許出現中文,以及一些特殊符號,;#..
//建立cookies
Cookie c = new Cookie("name","softeem");
Cookie c2 = new Cookie("msg",URLEncoder.encode("中文資料","utf-8"));
//c.setMaxAge(60);//設定cookie有效期,單位為秒,預設與session有效期保持一致
//將cookit物件通過response(響應物件)響應到客戶端儲存
response.addCookie(c);
response.addCookie(c2);
%>
取出cookie中的資料:
<%
Cookie[] cs = request.getCookies();
if(cs != null){
for(Cookie c:cs){
Stringname = c.getName();
Stringvalue = URLDecoder.decode(c.getValue(),"utf-8");
out.println(name+":"+value);
}
}
%>
cookie登出使用者
1.16登出的實現
不刪除使用者,將賬號密碼設定為“” 空,將生命週期設為0
1.17密碼修改後會死迴圈(login.jsp<->doLogin.jsp)
當doLogin.jsp判斷賬號密碼錯誤時跳到doClear去
JSP三大指令(<%@ 指令%>)
1.18Page(jsp頁面的設定通常使用page指令)
1.18.1 Language=”java”設定頁面的指令碼語言
1.18.2 contentType=”text/html”響應資料的型別,charset=”UTF-8”(編碼格式)
1.18.3 pageEncoding=”UTF-8”頁面的編碼模式,jsp頁面
1.18.4 import=”java.utl.*”導包
1.18.5 ErrorPage 指定處理異常與錯誤的頁面
1.18.6 isErrorPage=”true” <%=exception.getMessage()%> 標記當前頁面是否為異常與錯誤處理的頁面
1.18.7 isELlgnored 是否不解析EL表示式
1.19Include(靜態包含)
1.20taglib(標記庫)
靜態include動態include
1.21靜態包含:把其他頁面到當前頁面中同時解析,只生成一個java檔案(一起解析,可以去掉重複的標籤)
<%@include file = “被包含的頁面”>
兩個子頁面,java程式碼中如果定義了相同的變數會報錯,因為是靜態載入在一起解析
避免方法,在<%@! int a = 10%>全域性變數
1.22動態包含:把其他被包含的頁面分別解析,各自生成java檔案,然後動態的匯入到主頁面中(單獨解析,不可以去掉)
<jsp:include page=”被包含的頁面”>
七大動作
1.23跳轉(request.setAttribute(“data”,”aaa”))
<jsp:forward page="tag2.jsp">
<jsp:paramvalue="hello" name="data"/>
</jsp:forward>
等同於:
<jsp:forward page="tag2.jsp?data=hello">
Tag2.jsp:
<%=request.getParameter("data") %>
1.24 獲得屬性
<jsp:getProperty property=""name=""/>
1.25包含
<jsp:include page=""></jsp:include>
1.26引數
<jsp:param value=""name=""/>
1.27外掛
<jsp:plugin code=""codebase=""type="bean"></jsp:plugin>
1.28設定屬性
<jsp:setProperty property="name" name="user"value="softeem"/>
1.29建立物件
<jsp:useBean id="user" class="com.softeem.dto.User"scope="session"></jsp:useBean>
express language(el)表示式語言
${表示式}
1.30重定向:
test.jsp
pageContext.setAttribute(“msg”,” page中的資料……”);
request.setAttribute(“msg”,”request中的資料……”);
session.setAttribute(“msg”,” session中的資料……”);
application.setAttribute(“msg”,”request中的資料……”);
request.getRequestDispatcher(“elResult.jsp”).forward(request,response);
<body>
elResult.jsp
${msg} ---- request中的資料…… (預設取最小的)
${pageScope.msg} ---- null (當前頁面)
${requestScope.msg}
${sessionScope.msg}
${applicationScope.msg}
</body>
1.31算數運算
${1+1}-----2
1.32EL表示式不解析
1.32.1 單條表示式不解析
\${1+1}-----${1+1}
1.32.2 該頁面內所有表示式不解析
<%@isEllgnored=”true”%>
1.33檢視官方EL表示式文件
步驟:1.Startup.bat啟動伺服器
2.127.0.0.1:8080
3. Manage APP
4.登入 admin admin
5. examples
6. JSP Examples
7.
1.34物件操作
test.jsp
1.34.1 宣告物件
id就是這個物件名
<jsp:useBeanid=”myUser” class=”com.softeem.dto.User” scope=”page”></jsp:useBean>
1.34.2 初始化物件
name就是上面的物件 property是屬性
<jsp:setProperty property=”id” value=”1” name=”myUser”/>
<jsp:setProperty property=”name” value=”softeem” name=”myUser”/>
<jsp:setProperty property=”pass” value=”admin” name=”myUser”/>
1.34.3 訪問物件
<jsp:getProperty property=”name” name=”myUser”/>-----softeem
${myUser.name}---------------------softeem
${myUser.name eq ‘softeem’}----------true
1.34.4 物件導航(另一物件為該物件的屬性)
先初始化另一Group類物件
<jsp:setProperty property=”group” value=”${另一物件名}” name=”myUser”/>
訪問:${myUser.group.gname}
1.35
JSP標準標籤庫
1.36使用過程
1.36.1 匯入jstl支援包(jar包)
<!-- 匯入JSTL標記庫 -->
<%@ taglib prefix="c"uri="http://java.sun.com/jstl/core" %>
1.36.2 在需要使用jstl標記庫的頁面中匯入標記
例1:
<c:forEach begin=“1” end=”10” var="i">
${i} //從1遍歷到10 i是別名
</c:forEach>
例2:
<%
String[] s = {"java","c++","php"};
session.setAttribute("langs", s);
%>
<c:forEach items="${langs}" var="i">
${i}
</c:forEach>
實際例子在07.avi內(分頁,list集合)
1.37常用JSTL標籤
C 核心(core) 常用
Fmt 格式化標籤(日期,數字格式化)
X xml標籤
Sql 訪問資料庫
Fn 全域性函式