Java EE学习之(七)JSP的九个内置对象(二)

pageContext (javax.servlet.jsp.PageContext的实例)

该对象代表JSP页面的上下文,使用该对象可以访问页面中的共享数据。使用pageContext可以访问page、request、session、application范围的变量。pageContext时PageContext类的实例,它提供了两个方法访问四个范围的变量

  1. getAttribute(java.lang.String name);
  2.  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来判断此用户是否是一个新用户。



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值