pageContext (javax.servlet.jsp.PageContext的实例)
该对象代表JSP页面的上下文,使用该对象可以访问页面中的共享数据。使用pageContext可以访问page、request、session、application范围的变量。pageContext时PageContext类的实例,它提供了两个方法访问四个范围的变量
- getAttribute(java.lang.String name);
- getAttribute(java.lang.String name, int scope)
- PageContext.PAGE_SCOPE:对应page范围--->1
- PageContext.REQUEST_SCOPE:对应request范围--->2
- PageContext.SESSION_SCOPE:对应session范围--->3
- PageContext.APPLICATION_SCOPE:对应application范围--->4
与之相对应的也有两个对应的setAttribute()方法。
<body>
<%
pageContext.setAttribute("page", "page's");
pageContext.setAttribute("request1", "page's",pageContext.REQUEST_SCOPE);
request.setAttribute("request", "request's");
out.println(pageContext.getAttributesScope("page"));
out.println(pageContext.getAttributesScope("request1"));
out.println(pageContext.getAttributesScope("request"));
%>
</body>
结果是:1 2 2
除了可以获取4个范围的变量的值以外还可以获取其他的内置对象:
- ServletRequest getRequest();获取request对象
- ServletResponse getResponse();获取response对象
- ServletConfig getServletConfig();获取config对象
- ServletContext getServletContext();获取application对象
- HttpSession getSession();获取session对象
一旦在JSP、Servlet中获取的了pageContext对象,就可以通过上面的方法获得其他的内置对象。
<%
pageContext.getRequest();
pageContext.getResponse();
pageContext.getServletConfig();
pageContext.getServletContext();
pageContext.getSession();
%>
session(javax.servlet.http.httpSession的实例)
session对象是一个非常常用的对象,这个对象代表一次会话。一次会话的含义是从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开为止。通常一个没有任何操作session的生命周期是30分(可在Tomcat下web.xml中修改)。
-<session-config><session-timeout>30</session-timeout> </session-config>
session通常用于跟踪用户的会话信息,如判断用户是否登录、注销等信息。每个session对象都表示不同的访问用户,因为它是javax.servlet.http.httpSession的接口的实例化对象,所以session只能应用在HTTP协议中。HttpSession接口的常用方法有:
1. public String getId();取得Session Id
2. public long getCreatTime();取得session的创建时间
3. public longgetLastAccessedTime();取得session的最后一次操作的时间
4. public Boolean isNew();判断是否是一个新的session
5. public void invalidate();让session失效
6. public EnumerationgetAttributeNames();获得全部属性名称
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
out.println("ID"+session.getId());
out.println("IDLength"+session.getId().length());
out.println("CreateTime"+session.getCreationTime());
session.setAttribute("new param", "param value");
out.println(session.getAttribute("new param"));
out.println("是否是新用户"+session.isNew());
out.println("最后一次操作时间"+session.getLastAccessedTime());
session.invalidate();
%>
</body>
</html>
当你把SessionId的长度输出来的时候你会发现它的长度是32,而Cookie的JESSIONID的长度也是32。两者之所以长度相等是因为两者是一样的,因为Session使用了Cookie的机制,即在客户端的Cookie中保存着每一个Session ID,这样用户每次发出请求时都会将此Session Id发送到服务器端,这样服务器端才能依靠此Session ID区分每一个不同的客户端。
Session的isNew()方法也是通过Cookie的方式进行判断的,在request取得全部的Cookie时是不会出现JESSIONID的,而第二次却会出现这个系统内建的JESSIONID,这是由于此Cookie是在第一次访问时由服务器设置给客户端的,所以服务器可以依靠是否存在JESSIONID来判断此用户是否是一个新用户。