JSP 學習筆記
1,JSP九大內置對象
請求對象 request
輸出對象 out
響應對象 response
應用程序對象 application
會話對象 session
頁面上下文對象 pageContext
頁面對象 page
配置對象 config
異常對象 exception
2,request對象
String getParameter(String name) 根據表單組件名稱獲取提交數據
String[] getParameterValues(String name) 獲取表單組件對應多個值時的請求數據 -->需非空驗證
void setCharacterEncoding(String charset) 指定每個請求的編碼
RequestDispatcher getRequestDispatcher(String path) 返回一個RequestDispatcher對象,該對象的forward( )方法用於轉發請求
request 方法轉發:
request.getRequestDispatcher("userCreate.jsp").forward(request, response);
3,response對象
方法: setAttribute(String name, Object o);
Object getAttribute(String name); ---> if (userName != null || !userName.equals(""))
註意:getAttribute()方法如果沒有對應的參數名,會返回null值,所以要先做非空判斷,不然會出現空指針異常
並且返回的是 Object 類型,所以要做數據類型轉換
response 重定向
response.sendRedirect("userCreate.jsp");
4,轉發和重定向的區別
轉發
? RequestDispatcher對象
? forward()方法
1、request.getRequestDispatcher("url").forward(request, response)
2、<jsp:forward page=“url" />
? 重定向
? 將用戶請求重新定位到一個新的URL
response.sendRedirect("url")
*1):重定向的執行過程:Web服務器向瀏覽器發送一個http響應->瀏覽器接收此響應後再發送一個新的http請求到服務器
->服務器根據此請求尋找資源並發送給瀏覽器.它可以重定向到任意URL,不能共享request範圍內的數據
2):重定向是在客戶端發揮作用,通過請求新的地址實現頁面跳轉
3):重定向是通過瀏覽器重新請求地址,在地址欄中可以顯示轉向後的地址
*4):轉發過程:Web服務器調用內部的方法在容器內部完成請求處理和轉發動作->將目標資源發送給瀏覽器,它只能在同一個Web應用中使用,可以共享request範圍內的數據
5):轉發是在服務器端發揮作用,通過forward()方法將提交信息在多個頁面間進行傳遞
6):轉發是在服務器內部控制權的轉移,客戶端瀏覽器的地址欄不會顯示出轉向後的地址
5,session對象
方法:
setAttribute(String key, Object o);
getAttribute(String key); ==>進行非空驗證 if (userName != null || !userName.equals(""))
getId();
Invalidate(); 設置session對象失效
setMaxInactioveInterval(int interval)
removeAttribute(String key)
移除session:
1):程序主動清除:
session.invalidate();
session.removeAttribute("userName");
2):服務器主動清除:
session.setMaxInactioveInterval(int interval); 以秒為單位
配置Tomcat web.xml文件
<session-config><session-timeout>10</session-timeout></session-config>
-->以分鐘為單位
6,cookie對象
1)創建cookie
Cookie cookie = new Cookie("user", URLEncoder.encode(userName, "UTF-8"));
2)寫入cookie
response.addCookie(cookie);
3)讀取cookie (response接收頁面)
Cookie[] cookies = request.getCookies();
String user = "";
if( cookies != null ){
for (int i=0; i<cookies.length; i++){
if ("user".equals(cookies[i].getName())){
user = URLDecoder.decode(cookies[i].getValue(), "UTF-8");
}
}
}
===>建議先對數組進行判斷 if( cookies != null )
<[email protected]
<[email protected] import="java.net.URLDecoder"%>
常用方法:
setValue(String value);
getName();
getValue();
getMaxAge();
setMaxAge(int expiry); 設置cookie有效期,以秒為單位
7,cookie 與 session 比較
1):session是在服務器端保存用戶信息,cookie是在客戶端保存用戶信息
2):session中保存的是對象,cookie保存的是字符串
3):session對象隨會話結束而失效,cookie可以長期保存在客戶端
4):cookie通常用於保存不重要的用戶信息,重要的信息使用session保存
8,application 對象
方法:
setAttribute(String key, Object o);
getAttribute(String key)
get
例:統計網站的訪問人數
request.setCharacterEncoding("UTF-8");
Integer hitcount = (Integer)application.getAttribute("hitcount ");
if (hitcount ==null || hitcount ==0){
application.setAttribute("hitcount ", new Integer(1));
} else {
application.setAttribute("hitcount ", count.intValue()+1);
}
out.print("頁面被訪問了"hitcount .intValue()+"次"+"<br/>");
或:
if( hitsCount ==null || hitsCount == 0 ){
hitsCount = 1;
}else{
hitsCount += 1;
}
application.setAttribute("hitCounter", hitsCount);
--->最後統一設置
補充:
復位計數器
使用以上方法,在 web 服務器重啟後,計數器會被復位為 0,即前面保留的數據都會消失,你可以使用以下幾種方式解決該問題:
在數據庫中定義一個用於統計網頁訪問量的數據表 count,字段為 hitcount , hitcount 默認值為0,將統計數據寫入到數據表中。
在每次訪問時我們讀取表中 hitcount 字段。
每次訪問時讓 hitcount 自增 1。
在頁面上顯示新的 hitcount 值作為頁面的訪問量。
如果你需要統計每個頁面的訪問量,你可以使用以上邏輯將代碼添加到所有頁面上。
9,對象作用域比較
page: 只在當前頁面有效,一旦離開當前頁面,則在該範圍內創建的對象將無法訪問
request 在同一個請求範圍內,可以訪問該範圍的內創建的對象,一旦請求失效,則創建的對象也隨之失效
session 在會話沒有失效或者銷毀前,都可以訪問該範圍內的對象
application 在整個Web應用服務沒有停止前,都可以從application中進行數據的存放
10,頁面自動刷新
使用response對象的setIntHeader()方法
public void setIntHeader(String header, int headerValue) -->這個方法通知瀏覽器在給定的時間後刷新,時間以秒為單位。
// 設置每隔5秒刷新一次
response.setIntHeader("Refresh", 5);
例:
// 獲取當前時間
Calendar calendar = new GregorianCalendar();
String am_pm;
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
if(calendar.get(Calendar.AM_PM) == 0){
am_pm = "AM";
}else{
am_pm = "PM";
}
String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
out.println("當前時間為: " + CT + "\n");
11,傳遞 Checkbox 數據到JSP程序
request.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
String[] paramNames = request.getParameterValues("web"); --> web 是 Checkbox 的 name 屬性值
if (paramNames != null){
for (String para:paramNames){
out.println(para);
}
}
重定向 放入session傳遞
String[] info = request.getParameterValues("info"); --> info 是 Checkbox 的 name 屬性值
List<String> list = new ArrayList<String>();
if (info != null){ ------>註意一定要進行非空驗證
for (String str:info){
list.add(str);
}
}
session.setAttribute("list", list);
-->循環讀取
<c:forEach var="str" items="${list}" varStatus="status">
<b>${str}</b>
</c:forEach>
-->強化
<c:forEach var="str" items="${list}" varStatus="status">
${str}
<c:set var="end" scope="session" value="${list.get(list.size()-1)}"/> --->設置最後一個元素 ,註意最後一個索引是 list.size()-1
<c:if test="${!end.equals(str)}">,</c:if> ---->如果不是最後一個元素,則加上 ‘,‘
</c:forEach>
JavaBean與其它Java類相比而言獨一無二的特征:
提供一個默認的無參構造函數。
需要被序列化並且實現了Serializable接口。
可能有一系列可讀寫屬性。
可能有一系列的"getter"或"setter"方法。
---->設置跳轉到指定頁面
<%
String urlPath = (String)request.getAttribute("url");
response.setHeader("Refresh", "3,url="+urlPath); %>
12,JSP動作指令
1):Include指令
JSP可以通過include指令來包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是該JSP文件的一部分,會被同時編譯執行。
<%@ include file="文件相對 url 地址" %>
註意:在JSP文件被轉換成Servlet的時候引入文件
2):Page指令
Page指令為容器提供當前頁面的使用說明。一個JSP頁面可以包含多個page指令。
<%@ page attribute="value" %>
例:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
3):Taglib指令
<%@ taglib uri="uri" prefix="prefixOfTag" %>
例: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
13,JSP動作元素
1):<jsp:include>
<jsp:include page="相對 URL 地址" flush="true" />
flush 布爾屬性,定義在包含資源前是否刷新緩存區。
-->include指令,它是在JSP文件被轉換成Servlet的時候引入文件
jsp:include動作不同,插入文件的時間是在頁面被請求的時候。
2):<jsp:useBean> --><jsp:useBean id="name" class="package.class" />
<jsp:setProperty> -->
<jsp:getProperty> -->
例:
<jsp:useBean id="user" class="com.entity.User" scope="request" /> ==>id為對象名, class為類完全路徑, scope為作用域
<jsp:setProperty property="userId" name="user" value="1"/> ==>property為屬性名, name為對象名, value為對象的屬性值
<jsp:setProperty property="userName" name="user" value="張三"/>
<jsp:getProperty property="userId" name="user"/><br/> //1
<jsp:getProperty property="userName" name="user"/> //張三
3):<jsp:forward> 動作元素
jsp:forward動作把請求轉到另外的頁面 轉發
<jsp:forward page="相對 URL 地址" />
-->page屬性包含的是一個相對URL。page的值既可以直接給出,也可以在請求的時候動態計算,可以是一個JSP頁面或者一個 Java Servlet.
4):<jsp:plugin>動作元素
5):<jsp:element> 、 <jsp:attribute>、 <jsp:body>動作元素
6):<jsp:text>動作元素
<jsp:text>模板數據</jsp:text>
例:
<jsp:text> <jsp:forward page="date.jsp" /></jsp:text>
顯示:<jsp:forward page="date.jsp" />
註: JSP 頁面 大於小於是 > <
===>
getParameter() 返回String類型
getAttribute() 返回Object類型
JSP 學習筆記