JSP内置对象--session对象

session对象是javax.servlet.http.HttpSession接口的实例,但是不像HttpServletRequest或HttpServletResponse一样,有父接口,他没有父接口。

HttpSession接口的主要方法:

1. java.lang.String getId():取得session ID

2. long getCreationTime():取得session的创建时间

3. long getLastAccessedTime():取得session的最后一次操作时间

4. boolean isNew():判断是否新的session(新用户)

5. void invalidate():让session失效

6. java.util.Enumeration<java.lang.String> getAttributeNames():得到全部属性的名称

在整个session中, 最重要的部分 就是属性的操作,可是对于属性的操作除了之前的setAttribute(), getAttribute(),removeAttribute()以外,有个getValue(),putValue()都是deprecated。不建议使用,过时的。

  • session ID

对于每个用户来说,都表示一个不同的session,服务器就是靠session id来区分每个用户的,每个通过浏览器连接到服务器上的用户都会服务器自动分配一个唯一的session id。

例子:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
    String id = session.getId() ;
%>
<h3>SESSION ID:<%=id%></h3>
<h3>SESSION ID长度:<%=id.length()%></h3>
</body>
</html>

每个连接到服务器上的session id是不同的,通过浏览器区分。

但是需要注意,对于id的操作不是成对的。因为正常都是先有set方法再有get方法。

可以发现,之前的cookie自动设置的那个cookie就是每个用户的session id,如果关闭服务器,session id会重新分配。

原本的session id不保留,服务器关闭后,session id就没了。如果现在用户要求即使关闭服务器,也要保留session

id的话,需要用到序列化的机制。

所谓的对象序列化,指的是一个对象通过二进制保存或者进行传输,而且对象所在的类必须实现java.io.Serializable接口,对于session本身也需要完成这种序列化的操作,但是不是手工完成的,是需要自动配置完成,在tomcat\conf\server.xml里:

<Context path="/wly" docBase="D:\Workspace"  reloadable="true">

</Context>

中间加入以下内容后,服务器即便关闭,session id会保存,而且会保留在d:\temp里一个序列化文件:

<Manager className="org.apache.catalina.session.PersistentManager">
debug=0 saveOnRestart="true"
maxActiveSession="-1" minIdleSwap="-1"
maxIdleSwap="-1" maxIdleBackup="-1"
<Store
className="org.apache.catalina.session.FileStore"
directory="d:\temp"/>
</Manager>
  • 登录及注销

login.jsp:

自提交考虑空的问题;

<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<form action="login.jsp" method="post">
    用户名:<input type="text" name="uname"><br>
    密&nbsp;&nbsp;码:<input type="password" name="upass"><br>
    <input type="submit" value="登陆">
    <input type="reset" value="重置">
</form>
<%    // 直接通过一个固定的用户名和密码
    String name = request.getParameter("uname") ;
    String password = request.getParameter("upass") ;
    if(!(name==null || "".equals(name) || password==null || "".equals(password))){
        if("lixinghua".equals(name) && "mldn".equals(password)){
            // 如果登陆成功,则设置session属性范围。
            session.setAttribute("userid",name) ;
            response.setHeader("refresh","2;URL=welcome.jsp") ;
%>
            <h3>用户登陆成功,两秒后跳转到欢迎页!</h3>
            <h3>如果没有跳转,请按<a href="welcome.jsp">这里</a>!</h3>
<%
        } else {
%>
            <h3>错误的用户名或密码!</h3>
<%
        }
    }
%>
</body>
</html>

welcome.jsp:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%    // 如果已经设置过了session属性,则肯定不为空
    if(session.getAttribute("userid")!=null){
%>
        <h3>欢迎<%=session.getAttribute("userid")%>光临本系统,<a href="logout.jsp">注销</a></h3>
<%
    } else {    // 没有session,则应该给出提示,先去登陆
%>
        <h3>请先进行系统的<a href="login.jsp">登陆</a>!</h3>
<%
    }
%>
</body>
</html>

logout.jsp:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
    response.setHeader("refresh","2;URL=login.jsp") ;
    session.invalidate() ;    // 注销,表示当前的session失效
%>
<h3>您已成功退出本系统,两秒后跳转回首页!</h3>
<h3>如果没有跳转,请按<a href="login.jsp">这里</a>!</h3>
</body>
</html>

以上做法是属于session使用最多的一种登录验证的操作,除此之外还有4种技术

1. 通过session保存的方法

2. 通过cookie

3. 通过表单的隐藏域完成

4. 通过地址重写

以后本书的struts讲解这块,很多时候都通过地址重写的方式进行。

  • 判断新用户

在session对象中可以用isNew()方法来判断一个用户是否是第一次访问页面

<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
    if(session.isNew()){
%>
        <h3>欢迎新用户光临!</h3>
<%
    } else {
%>
        <h3>您已经是老用户了!</h3>
<%
    }
%>
</body>
</html>

运行时,因为服务器已经设定cookie了,重新打开一个浏览器,才是新用户。

  • 取得用户操作时间

要想取得一个session的具体操作时间,可以通过计算来获得。

getLastAccessedTime()-getCreationTime()

<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
    long start = session.getCreationTime() ;
    long end = session.getLastAccessedTime() ;
    long time = (end - start) / 1000 ;
%>
<h3>您已经停留了<%=time%>秒!</h3>
</body>
</html>

session的登录和注销最重要:setAttribute() , getAttribute(),invalidate();

每一个session id就表示一个用户。

时间: 2024-08-05 04:06:11

JSP内置对象--session对象的相关文章

JSP内置对象—session

什么是session? session对象是用来在每一个用户之间分别保存每一个用户信息的对象,以便跟踪用户的操作状态.session的信息保存在服务器端,session的id保存在客户端的cookie中. 例如我们乘坐火车就可以看做是一个session.当我们乘坐火车的时候,我们需要持有一张车票.车票就相当于是一个cookie.而车票上的座位号就相当于是sessionId.当我们需要访问列车的时候,检票员会事先检查我们是否持有cookie,如果有就根据cookie里的内容(sessionId)

jsp内置对象之-session对象

session对象 session对象是一个JSP内置对象. session对象在第一个JSP页面被装载时自动创建,完成回话期管理. session生命周期从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束被称为一个会话. 当一个客户访问一个服务器时,可能在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要session对象. session对象时HttpSession类的实例. session的工作原理如下: 客户首次访问服务器的一个页面时,服务器

JSP内置对象之------response、session、application

1. 重定向和转发 response.sendRedirect("地址"); a. 页面地址显示最终页面 b. 不可向后传递参数 c. 跳到外部站点 request.getRequestDispatcher("地址").forward(request, response); a. 页面地址显示请求页面 b. 可以向后传递参数 c. 不可以跳到外部站点 通俗的来说两者的区别就是: 重定向:发出两次请求,不能够共享前一次请求中封装的参数信息 转发:   发一次请求 2.

Jsp 内置对象

JSP内置对象是 Web 容器创建的一组对象 JSP内置对象的名称是 JSP 的保留字 JSP内置对象是可以直接在 JSP 页面使用的对象,无需使用 “new” 获取实例 -request 对象:用于处理客户端请求,主要方法如下: String getParameter(String name) 根据页面表单组件名称获取页面提交数据 String[ ] getParameterValues(String name) 获取一个页面表单组件对应多个值时的用户的请求数据 void setCharact

jsp 内置对象(五)

1.Request对象 该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以 获取用户提交的信息. 当Request对象获取客户提交的汉字字符时,会出现乱码问题,必须进行特殊处理.首先,将获取的 字符串用ISO-8859-1进行编码,并将编码存发岛一个字节数组中,然后再将这个数组转化为字符串对象 即可.如下: String textContent=request.getParameter("boy") byte b[]=textContent.get

JSP内置对象详解

jsp中内置对象:request.response.session.applecation.out.pagecontesx.config.page.exception.cookie 1.request:是javax.servlet.httpservletRequest类型的对象,该对象是用户客户端的请求信息,主要用户接受客户端通过http协议传送到服务器的数据! (包括头部信息.系统信息.请求方式以及请求信息参数),jsp内置对象Web容器所创建的一组对象! 生命周期:jsp发出请求一个requ

jsp内置对象和el表达式

九个内置对象 *out jsp的输出流,用来向客户端响应 *page 当前jsp页面, 它的引用数据类型是Object,即真身中有如下代码 Object page=this; *config 它对应真身中的ServletConfig对象 *pageContext 一个顶九个,这个重要 *request HttpServletRequest *response HttpServletResponse *exception Throwable *session HttpSession *applic

JSP内置对象——九大内置对象简介与四种作用域范围以及Web程序的请求和响应模式

最近在学习JSP相关基础知识,我们都知道JSP当中存在一组不使用new关键字就可以在脚本和表达式中使用的对象,在Web开发中经常使用.为了能更好的理解这些对象,在此对JSP内置对象作一些归纳. 目录: JSP内置对象——九大内置对象简介与四种作用域范围以及Web程序的请求和响应模式 JSP内置对象——out(待更新) JSP内置对象——request/response(待更新) JSP内置对象——session(待更新) JSP内置对象——application(待更新) JSP内置对象——其他

JavaWeb之 JSP:内置对象,EL表达式,JSP标签基础

JSP的内置对象 什么是JSP的内置对象呢? 在JSP页面进行编程的时候,如果我们要使用一些对象,如:HttpSession,ServletConfig,ServletContext这些对象,如果每次都要先创建这些对象,然后再去使用它们,这样就显得十分繁琐了,为了方便使用者,Sun公司在开发JSP的时候,把一些对象设置为内置对象,开发者在JSP页面编程的时候不必声明这些对象就能直接使用,这就是JSP的内置对象. 那么JSP对象有哪些呢? JSP内置对象          对应的类型   备注 R

Jsp内置对象的简单说明

声明 实习森的理解层次,希望有错大家一起纠正 本文主要信息来自网友共享的一个JSPAPI,不是特别全,只是对jsp内置对象进行了简单的介绍,这里我总结了一下 正文 Jsp主要内置了9个对象,分别为:Application.Exception.Out.PageContext.Page.Request.Response.Session以及Config,详细如下: Application对象 基础介绍: Application对象实现了不同用户之间的数据共享,声明周期最长了,服务器启动的时候,Appl