1. 程式人生 > >JSP 學習筆記

JSP 學習筆記

ava hits bsp tchar list 常對象 讀寫 jstl 存在

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]

/* */ import="java.net.URLEncoder"%>
<[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> &lt;jsp:forward page="date.jsp" /&gt;</jsp:text>
顯示:<jsp:forward page="date.jsp" />
註: JSP 頁面 大於小於是 &gt; &lt;

===>
getParameter() 返回String類型
getAttribute() 返回Object類型

JSP 學習筆記