一、四種屬性范圍
在JSP中提供了四種屬性保存范圍
page:在一個頁面內保存屬性,跳轉之后無效
request:在一次服務請求范圍內,服務器跳轉后依然有效
session:-在一次會話范圍內,無論何種跳轉都可以使用,但是新開瀏覽器無法使用
application:在整個服務器上保存,所有用戶都可以使用
名稱 |
作用域 |
application |
在所有應用程序中有效 |
session |
在當前會話中有效 |
request |
在當前請求中有效 |
page |
在當前頁面有效 |
置統一的請求編碼:request.setCharacterEncoding("GBK");
- 請求方式:<%=request.getMethod()%><br>
- 請求的資源:<%=request.getRequestURI()%><br>
- 請求用的協議:<%=request.getProtocol()%><br>
- 請求的文件名:<%=request.getServletPath()%><br>
- 請求的服務器的IP:<%=request.getServerName()%><br>
- 請求服務器的端口:<%=request.getServerPort()%><br>
- 客戶端IP地址:<%=request.getRemoteAddr()%><br>
- 客戶端主機名:<%=request.getRemoteHost()%><br>
1 四種屬性范圍: 2 page(pageContext):只在一個頁面中保存屬性。 跳轉之后無效。 3 request:只在一次請求中有效,服務器跳轉之后有效。 客戶端跳無效 4 session:再一次會話中有效。服務器跳轉、客戶端跳轉都有效。 網頁關閉重新打開無效 5 application:在整個服務器上保存,所有用戶都可使用。 重啟服務器后無效 6 注意:如果設置過多的application屬性范圍會影響服務器性能 7 8 page(pageContext)對象: 9 pageContext.PAGE_SCOPE 10 pageContext.REQUEST_SCOPE 11 pageContext.SESSION_SCOPE 12 pageContext.APPLICATION_SCOPE 13 pageContext.setAttribute("name", "liuyang", pageContext.APPLICATION_SCOPE); 14 15 request對象: 16 通過地址重寫的方式進行傳值: 17 要訪問的網頁地址?參數1=值1&參數2=值2&... 18 Request常用的方法: 19 1.01 getParameter(String strTextName) 獲取表單提交的信息。 20 String strName=request.getParameter("name"); 21 1.02 getProtocol() 獲取客戶使用的協議。 22 String strProtocol=request.getProtocol(); 23 1.03 getServletPath() 獲取客戶提交信息的頁面。 24 String strServlet=request.getServletPath(); 25 1.04 getMethod() 獲取客戶提交信息的方式,get|post。 26 String strMethod = request.getMethod(); 27 1.05 getHeade() 獲取HTTP頭文件中的accept、accept-encoding和Host的值。 28 String strHeader = request.getHeader("accept"); 29 1.06 getRermoteAddr() 獲取客戶的IP地址。 30 String strIP = request.getRemoteAddr(); 31 1.07 getRemoteHost() 獲取客戶機的名稱。 32 String clientName = request.getRemoteHost(); 33 1.08 getServerName() 獲取服務器名稱。 34 String serverName = request.getServerName(); 35 1.09 getServerPort() 獲取服務器的端口號。 36 int serverPort = request.getServerPort(); 37 1.10 getParameterNames() 獲取客戶端提交的所有參數的名字。 38 Enumeration enum = request.getParameterNames(); 39 while(enum.hasMoreElements()){ 40 String s=(String)enum.nextElement(); 41 out.println(s); 42 } 43 1.11 getParameterValues()獲取客戶端提交的所有參數的名字對應的值。 44 String[] inst = request.getParameterValues(paramName); 45 for(String ss:inst){ 46 System.out.println(ss); 47 } 48 49 response對象: 50 設置頭信息setHeader(): 51 response.setHeader("refresh","5; url=hello.jsp"); 5秒后自動跳轉(jsp) 52 <meta http-equiv="refresh" content="5;url=hello.jsp" > 5秒后自動跳轉(html) 53 <jsp:forward/> 與 sendRedirect 區別: 54 <jsp:forward page="hello.jsp"></jsp:forward> 執行到該語句立即跳轉,后面的語句不執行 55 response.sendRedirect("hello.jsp"); 重定向。 執行完此頁面再進行跳轉 56 cookie: 設置在客戶端,安全性比較低 57 一個客戶端上最多只能保存300個cookie。 58 addCookie(); 59 setHeader("Set-Cookie","名字=值");
response.setHeader("refresh","1"); //每隔1秒刷新一次
response.addCookie();
Cookie [] c = request.getCookies();
60 session對象:每一個session代表了一個用戶。 61 獲取session ID: 62 String id = session.getId();
String id = session.getId(); 獲取session ID Manager 可以將session保存在本地上
long start = session.getCreationTime(); //創建此會話的時間
long end = session.getLastAccessedTime();//客戶端上一次發送與此會話關聯的請求的時間,最后一次操作此會話時間
1.page屬性范圍:
1.設置page無跳轉 屬性范圍,在當前jsp頁面有效
1 <%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> 2 <%@ page import="java.util.*" %> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <title>page屬性范圍</title> 7 </head> 8 <body> 9 <% 10 //設置page 屬性范圍,在當前jsp頁面有效 11 pageContext.setAttribute("name", "liuyang"); 12 pageContext.setAttribute("age", "23"); 13 pageContext.setAttribute("birthday", new Date()); 14 %> 15 <% 16 String name=(String)pageContext.getAttribute("name"); 17 int age=Integer.parseInt((String)pageContext.getAttribute("age")); 18 Date birthday = (Date)pageContext.getAttribute("birthday"); 19 %> 20 <h1>姓名:<%=name %></h1> 21 <h1>年齡:<%=age %></h1> 22 <h1>生日:<%=birthday %></h1> 23 </body> 24 </html>
2.設置page 屬性范圍-服務器跳轉,服務器跳轉后無效
// page02.jsp
1 <%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> 2 <%@ page import="java.util.*" %> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <title>page屬性范圍-服務器跳轉</title> 7 </head> 8 <body> 9 <% 10 //設置page(pageContext) 屬性范圍,在當前jsp頁面有效,只在一個頁面中保存屬性。 跳轉之后無效。 11 pageContext.setAttribute("name", "liuyang"); 12 pageContext.setAttribute("birthday", new Date()); 13 %> 14 <jsp:forward page="page_03.jsp"></jsp:forward> 15 </body> 16 </html>
//page03.jsp
1 <%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> 2 <%@ page import="java.util.*" %> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <title>page屬性范圍-服務器跳轉</title> 7 </head> 8 <body> 9 <% 10 String name=(String)pageContext.getAttribute("name"); 11 Date birthday = (Date)pageContext.getAttribute("birthday"); 12 %> 13 <h1>姓名:<%=name %></h1> 14 <h1>生日:<%=birthday %></h1> 15 </body> 16 </html>
3.設置page 屬性范圍-客戶端跳轉,客戶端跳轉后無效
1 <%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> 2 <%@ page import="java.util.*" %> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <title>page屬性范圍-客戶端跳轉</title> 7 </head> 8 <body> 9 <% 10 //設置page(pageContext) 屬性范圍,在當前jsp頁面有效,只在一個頁面中保存屬性。 跳轉之后無效。 11 pageContext.setAttribute("name", "liuyang"); 12 pageContext.setAttribute("birthday", new Date()); 13 %> 14 <a href="page_03.jsp">跳轉</a> 15 16 </body> 17 </html>
1 <%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> 2 <%@ page import="java.util.*" %> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <title>page屬性范圍-客戶端跳轉</title> 7 </head> 8 <body> 9 <% 10 String name=(String)pageContext.getAttribute("name"); 11 Date birthday = (Date)pageContext.getAttribute("birthday"); 12 %> 13 <h1>姓名:<%=name %></h1> 14 <h1>生日:<%=birthday %></h1> 15 </body> 16 </html>
2.request屬性范圍:
1.設置request 屬性范圍 - 服務器跳轉,服務器跳轉后有效, 客戶端跳轉后無效
1 <%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> 2 <%@ page import="java.util.*" %> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <title>request屬性范圍—服務器跳轉</title> 7 </head> 8 <body> 9 <% 10 //request:只在一次請求中有效,服務器跳轉之后有效。 11 request.setAttribute("name", "liuyang"); 12 request.setAttribute("birthday", new Date()); 13 %> 14 <jsp:forward page="request_02.jsp"></jsp:forward> 15 16 </body> 17 </html>
1 <%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> 2 <%@ page import="java.util.*" %> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <title>request屬性范圍—服務器跳轉</title> 7 </head> 8 <body> 9 <% 10 //request:只在一次請求中有效,服務器跳轉之后有效。 客戶端跳轉后無效 11 String name=(String)request.getAttribute("name"); 12 Date birthday = (Date)request.getAttribute("birthday"); 13 %> 14 <h1>姓名:<%=name %></h1> 15 <h1>生日:<%=birthday %></h1> 16 </body> 17 </html>
2.設置request 屬性范圍 客戶端跳轉,客戶端跳轉后無效
1 <%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> 2 <%@ page import="java.util.*" %> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <title>request屬性范圍—客戶端跳轉</title> 7 </head> 8 <body> 9 <% 10 //request:只在一次請求中有效,服務器跳轉之后有效。 客戶端跳無效 11 request.setAttribute("name", "liuyang"); 12 request.setAttribute("birthday", new Date()); 13 %> 14 <a href="request_02.jsp">跳轉</a> 15 </body> 16 </html>
1 <%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> 2 <%@ page import="java.util.*" %> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <title>request屬性范圍—客戶端跳轉</title> 7 </head> 8 <body> 9 <% 10 //request:只在一次請求中有效,服務器跳轉之后有效。 客戶端跳轉后無效 11 String name=(String)request.getAttribute("name"); 12 Date birthday = (Date)request.getAttribute("birthday"); 13 %> 14 <h1>姓名:<%=name %></h1> 15 <h1>生日:<%=birthday %></h1> 16 </body> 17 </html>
3.session屬性范圍:
1.session:服務器跳轉。 再一次會話中有效。服務器跳轉、客戶端跳轉都有效。 瀏覽器關閉重新打開無效
1 <%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> 2 <%@ page import="java.util.*" %> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <title>session 服務器跳轉</title> 7 </head> 8 <body> 9 <% 10 //session:再一次會話中有效。服務器跳轉、客戶端跳轉都有效。 網頁關閉重新打開無效 11 session.setAttribute("name", "liuyang"); 12 session.setAttribute("birthday", new Date()); 13 %> 14 <jsp:forward page="session_02.jsp"></jsp:forward> 15 </body> 16 </html>
1 <%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> 2 <%@ page import="java.util.*" %> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <title>session 服務器跳轉</title> 7 </head> 8 <body> 9 <% 10 //session:再一次會話中有效。服務器跳轉、客戶端跳轉都有效。 網頁關閉重新打開無效 11 String name=(String)session.getAttribute("name"); 12 Date birthday = (Date)session.getAttribute("birthday"); 13 %> 14 <h1>姓名:<%=name %></h1> 15 <h1>生日:<%=birthday %></h1> 16 </body> 17 </html>
2.session 客戶端跳轉
1 <%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> 2 <%@ page import="java.util.*" %> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <title>session 客戶端跳轉</title> 7 </head> 8 <body> 9 <% 10 //session:再一次會話中有效。服務器跳轉、客戶端跳轉都有效。 網頁關閉重新打開無效 11 session.setAttribute("name", "liuyang"); 12 session.setAttribute("birthday", new Date()); 13 %> 14 <a href="session_02.jsp">跳轉</a> 15 </body> 16 </html>
1 <%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> 2 <%@ page import="java.util.*" %> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <title>session 客戶端跳轉</title> 7 </head> 8 <body> 9 <% 10 //session:再一次會話中有效。服務器跳轉、客戶端跳轉都有效。 網頁關閉重新打開無效 11 String name=(String)session.getAttribute("name"); 12 Date birthday = (Date)session.getAttribute("birthday"); 13 %> 14 <h1>姓名:<%=name %></h1> 15 <h1>生日:<%=birthday %></h1> 16 </body> 17 </html>
3.關閉瀏覽器重新打開進入session_02.jsp無效
4.application屬性范圍:
1.application:服務器跳轉 在整個服務器上保存,所有用戶都可使用。 重啟服務器后無效
1 <%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> 2 <%@ page import="java.util.*" %> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <title>application 服務器跳轉</title> 7 </head> 8 <body> 9 <% 10 //application:在整個服務器上保存,所有用戶都可使用。 重啟服務器后無效 11 //application.setAttribute("name", "liuyang"); 12 pageContext.setAttribute("name", "liuyang", pageContext.APPLICATION_SCOPE); 13 application.setAttribute("birthday", new Date()); 14 %> 15 <jsp:forward page="application_02.jsp"></jsp:forward> 16 </body> 17 </html>
1 <%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> 2 <%@ page import="java.util.*" %> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <title>application 服務器跳轉</title> 7 </head> 8 <body> 9 10 <% 11 //application:在整個服務器上保存,所有用戶都可使用。 重啟服務器后無效 12 String name=(String)application.getAttribute("name"); 13 Date birthday = (Date)application.getAttribute("birthday"); 14 %> 15 <h1>姓名:<%=name %></h1> 16 <h1>生日:<%=birthday %></h1> 17 </body> 18 </html>
2.application:客戶端跳轉 在整個服務器上保存,所有用戶都可使用。 重啟服務器后無效
1 <%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> 2 <%@ page import="java.util.*" %> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <title>application 客戶端跳轉</title> 7 </head> 8 <body> 9 <% 10 //application:在整個服務器上保存,所有用戶都可使用。 重啟服務器后無效 11 //application.setAttribute("name", "liuyang"); 12 pageContext.setAttribute("name", "liuyang", pageContext.APPLICATION_SCOPE); 13 application.setAttribute("birthday", new Date()); 14 %> 15 <a href="application_02.jsp">跳轉</a> 16 </body> 17 </html>
1 <%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> 2 <%@ page import="java.util.*" %> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <title>application 客戶端跳轉</title> 7 </head> 8 <body> 9 10 <% 11 //application:在整個服務器上保存,所有用戶都可使用。 重啟服務器后無效 12 String name=(String)application.getAttribute("name"); 13 Date birthday = (Date)application.getAttribute("birthday"); 14 %> 15 <h1>姓名:<%=name %></h1> 16 <h1>生日:<%=birthday %></h1> 17 </body> 18 </html>
3.application:關閉瀏覽器重新進入application_02.jsp 在整個服務器上保存,所有用戶都可使用。 重啟服務器后無效
4.application:重啟服務器后 重新進入application_02.jsp 在整個服務器上保存,所有用戶都可使用。 重啟服務器后無效

四種屬性范圍:page(pageContext):只在一個頁面中保存屬性。 跳轉之后無效。
request:只在一次請求中有效,服務器跳轉之后有效。 客戶端跳無效
session:再一次會話中有效。服務器跳轉、客戶端跳轉都有效。網頁關閉重新打開無效
application:在整個服務器上保存,所有用戶都可使用。重啟服務器后無效
注意:如果設置過多的application屬性范圍會影響服務器性能
page(pageContext): 對象
pageContext.REQUEST_SCOPE
pageContext.SESSION_SCOPE
pageContext.APPLICATION_SCOPE
pageContext.setAttribute("name", "liuyang", pageContext.APPLICATION_SCOPE);
request對象:
通過地址重寫的方式進行傳值:要訪問的網頁地址?參數1=值1&參數2=值2&...
Request常用的方法:
1.01 getParameter(String strTextName) 獲取表單提交的信息。
String strName=request.getParameter("name");
1.02 getProtocol() 獲取客戶使用的協議。
String strProtocol=request.getProtocol()
;1.03 getServletPath() 獲取客戶提交信息的頁面。
String strServlet=request.getServletPath();
1.04 getMethod() 獲取客戶提交信息的方式,get|post。
String strMethod = request.getMethod();
1.05 getHeade() 獲取HTTP頭文件中的accept、accept-encoding和Host的值。
String strHeader = request.getHeader("accept");
1.06 getRermoteAddr() 獲取客戶的IP地址。
String strIP = request.getRemoteAddr();1.07 getRemoteHost() 獲取客戶機的名稱。
String clientName = request.getRemoteHost();1.08 getServerName() 獲取服務器名稱。
String serverName = request.getServerName();1.09 getServerPort() 獲取服務器的端口號。
int serverPort = request.getServerPort();1.10 getParameterNames() 獲取客戶端提交的所有參數的名字。
Enumeration enum = request.getParameterNames();
while(enum.hasMoreElements()){
String s=(String)enum.nextElement();
out.println(s); }
1.11 getParameterValues()獲取客戶端提交的所有參數的名字對應的值。
String[] inst = request.getParameterValues(paramName);
for(String ss:inst){
System.out.println(ss);
}
response對象:
設置頭信息setHeader():
response.setHeader("refresh","5; url=hello.jsp");5秒后自動跳轉(jsp)
<meta http-equiv="refresh" content="5;url=hello.jsp" > 5秒后自動跳轉(html)
<jsp:forward/> 與 sendRedirect 區別:
<jsp:forward page="hello.jsp"></jsp:forward> 執行到該語句立即跳轉,后面的語句不執行
response.sendRedirect("hello.jsp");重定向。 執行完此頁面再進行跳轉
cookie: 設置在客戶端,安全性比較低一個客戶端上最多只能保存300個cookie。
addCookie();
setHeader("Set-Cookie","名字=值");
session對象:每一個session代表了一個用戶。
獲取session ID:String id = session.getId();