JavaWeb JSP内置对象之session对象

article/2025/9/29 11:10:41

4、session对象

在WEB应用中,当一个客户首次访问服务器上的某个jsp页面时,jsp引擎(比如TOMCAT)将为这个客户创建一个session对象,当客户关闭浏览器离开之后,session对象被注销。
设置session的目的是为了服务器端识别客户。由于http协议是无连接的。客户浏览器与服务器建立连接,发出请求,得到响应。一旦发送响应,Web服务器就会忘记你是谁。下一次你再做请求的时候,Web服务器不会认识你。换句话说,它们不记得你曾经做过请求,也不记得它们曾经给你发出过响应,什么都不记得了。有时这样做没什么,但有些时候可能需要跨多个请求保留与客户的会话状态。比如在网上购物这样的应用中,当客户在选完商品后,进入结算页面后,服务器端需要知道这个客户的购物车中有哪些商品。在网站计数器应用中,服务器端同样需要知道是一个新客户访问网站,还是老客户在进行刷新操作,以正确统计访问量。上述的这些需求,都需要通过session实现。

4.1 session的常用方法

session对象常用方法如下表所示。

方法名称说明
setAttribute(String attName,Object value)设定指定名字属性值,并把它存储在session对象中。
getAttribute(String attName)获取指定名字属性值,若属性不存在,返回null。
Enumeration getAttributeNames()返回session对象中存储的每一个属性对象,结果是枚举类对象。
removeAttribute(String attName)删除指定属性。
setMaxInactiveInterval(int interval)设置session有效时间,单位秒。
getMaxInactiveInterval( )获取session对象生存时间,单位秒。
invalidate()销毁session,并释放所有与之相关联的对象。要牢记会话与用户相关联,而不是单个Servlet或Jsp页面。
getId()返回当前session的ID。
isNew()判断当前用户是否为新用户,可以判断用户是否刷新了当前页面。如果用户还没有用这个会话ID做过响应,isNew()就返回true。

实例代码:

通过一个页面输入姓名,跳转另一个页面选择购买,跳转另一个页面进行结算
登录页面:

<%@ page pageEncoding="UTF-8"%>
<HTML>
<BODY>欢迎访问,请输入你的姓名<FORM><INPUT type="text" name="name"><INPUT type="submit" name="submit" value="提交"></FORM><%String name = request.getParameter("name");if (name == null) {name = "";} else {byte b[] = name.getBytes("ISO-8859-1");name = new String(b);session.setAttribute("customerName", name);out.print(name);}%><%if (name.length() > 0) {%><A HREF="book.jsp"> 欢迎去选择书籍!</A><%}%><FONT>
</BODY>
</HTML>

选择书籍页面:

<%@ page pageEncoding="UTF-8"%>
<HTML>
<BODY><A HREF="third_example4.jsp"> 修改姓名!</A><p>请选择您要购买的书:<FORM><input type="checkbox" name="item" value="Java">Java<input type="checkbox" name="item" value="JSP">JSP<input type="checkbox" name="item" value="c">c<p><input type="submit" name="submit" 	 value="提交"></FORM><%String book[] = request.getParameterValues("item");if (book != null) {for (int k = 0; k < book.length; k++) {session.setAttribute(book[k], book[k]);out.print(book[k]);}}%><A HREF="count.jsp">去结帐!</A>
</BODY>
</HTML>

结算页面:

<%@ page import="java.util.*" pageEncoding="GB2312" %>
<HTML>
<BODY>这里是结帐处:
<%String personName=(String)session.getAttribute("customerName");out.print("<br>您的姓名:"+personName);Enumeration enumGoods=session.getAttributeNames();out.print("<br>购物车中的商品:<br>");while(enumGoods.hasMoreElements()){String key = (String) enumGoods.nextElement();String goods = (String) session.getAttribute(key);if (!(goods.equals(personName)))out.print(personName + "|" + goods + "<br>");}
%><p><A HREF="book.jsp">请继续购买书籍!</A><BR><A HREF="third_example4.jsp">修改姓名!</A>
</BODY>
</HTML>

程序说明:

session.setAttribute(“customerName”,name);
设定指定名字"customerName"属性值为“张三”,并把它存储在session对象中。
session.getAttribute(“customerName”);
获取指定名字为"customerName"属性值“张三”。
Enumeration enumGoods=session.getAttributeNames();
返回session对象中存储的每一个属性对象,结果是枚举类对象。

运行结果:

输入姓名,点击提交按钮。
在这里插入图片描述

点击欢迎去选择书籍链接跳转在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2 session跟踪

因为http协议是无连接的,浏览器访问网页的过程是:建立连接,发出请求,得到响应,然后关闭连接。就是说,连接只针对一个请求/响应过程。由于http连接不会持久保留,所以容器就识别不出发出第二个请求的客户与前一个请求的客户是不是同一个客户。比如在网上购物这样的应用中,当客户在选完商品后,进入结算页面后,服务器端需要知道这个客户的购物车中有哪些商品。JSP解决这类问题方法就是session跟踪,通过session跟踪来辨认客户端,一般session跟踪有以下几种方法:
 使用Cookie
 URL重写
 使用隐藏表单域

4.2.1、Cookie

Cookie是Web服务器发送至客户端浏览器的小段文本信息,在以后访问该服务器时浏览器会不做任何修改的向服务器返回这些信息,可见Cookie目的是为了方便用户以及向服务器端传送相关信息。
当一个用户首次访问服务器上的一个Jsp页面时,Jsp引擎产生一个session 对象,同时分配一个String类型的ID号(session ID),Jsp引擎同时将这个ID号发送到用户端,存放在Cookie中,这样session对象和用户之间就建立了一一对应的关系。当用户再访问连接该服务器的其它页面时,不再分配给用户新的session对象,直到关闭浏览器或该session达到最大生存时间后,服务器端该用户的session对象才取消,并且和用户对应关系消失。当重新打开浏览器再连接到该服务器时,服务器为该用户创建一个新的session对象。
cookie的发送
1)创建Cookie对象

Cookie cookie=new Cookie(“name”,”value”);

2)设置最大时效

cookie.setMaxAge(60);

3)将Cookie放入到HTTP响应报头.

response.addCookie(cookie);
如果你创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie,存储在浏览器的内存中,用户退出浏览器之后被删除。如果你希望浏览器将该cookie存储在磁盘上,则需要使用setMaxAge(),并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。
发送cookie需要使用HttpServletResponse的addCookie方法,将cookie插入到一个Set-Cookie HTTP请求报头中。同样要记住响应报头必须在任何文档内容发送到客户端之前设置。

cookie的读取
1)调用getCookies()方法
要获取有浏览器发送来的cookie,需要调用HttpServletRequest的getCookies()方法,这个调用返回Cookie对象的数组,对应由HTTP请求中Cookie报头输入的值。
2)对数组进行循环,调用每个cookie的getName()方法获得cookie名字,直到找到感兴趣的cookie为止,调用getValue()方法得到cookie的值。
 例如:

  String cookieName = “userID”;Cookie cookies[] = request.getCookies();if (cookies!=null){for(int i=0;i<cookies.length;i++){Cookie cookie = cookies[i];if (cookieName.equals(cookie.getName())){doSomethingWith(cookie.getValue());}}}

4.2.2、URL重写

如果客户端不支持Cookie,那么客户在不同网页之间的session对象可能是互不相同的,因为服务器无法将ID存放到客户端,就不能建立session对象和客户的一一对应关系。可以通过URL重写来实现session对象的唯一性。
所谓URL重写,就是当客户从一个页面连接到同一WEB服务目录一个页面时,通过向这个新的URL添加参数,把session对象的ID传带过去,这样就可以保证客户在该网站各个页面中的session对象是完全相同的。以http://host/path/file.html/;jsessionid=a1234为例,jsessionid=a1234作为会话标示符附加在URL尾部。就是URL+; jsessionid=a1234。
根本不能对静态页面完成URL重写!使用URL重写只有一种可能,就是作为会话一部分的所有页面都是动态生成的!不能硬编码会话ID,因为ID在运行之前并不存在。所以依赖于会话,就要把URL重写作为一条后路,另外,因为需要URL重写,就必须在响应HTML中动态生成URL!这意味着必须在运行时处理HTML。
如果客户不接受cookie,URL重写是自动的,但只有当你对URL完成了编码时它才奏效。必须通过response对象调用encodeURL()或encodeRedirectURL()方法来运行所有URL,其他的所有事情都由容器来做。
实现URL重写。比如从a.jsp页面重定向到b.jsp页面,但还想使用一个会话,就要首先在程序片中实现URL重写:

String str=response.encodeRedirectURL(/b.jsp”)

然后将连接目标写成<%=str%>即可。
注意:URL重写有什么缺点
对所有的URL使用URL重写,包括超链接,form的action,和重定向的URL。每个引用你的站点的URL,以及那些返回给用户的URL(即使通过间接手段,比如服务器重定向中的Location字段)都要添加额外的信息。
  这意味着在你的站点上不能有任何静态的HTML页面(至少静态页面中不能有任何链接到站点动态页面的链接)。因此,每个页面都必须使用servlet或JSP动态生成。即使所有的页面都动态生成,如果用户离开了会话并通过书签或链接再次回来,会话的信息都会丢失,因为存储下来的链接含有错误的标识信息,该URL后面的SESSION ID已经过期了。

4.2.3、使用隐藏表单域

HTML表单可以含有如下条目:

<input type=”hidden” name=”session” value=”a1234”>

这个条目含义:在提交表单时,要将指定的名称和值自动包括在GET和POST数据中。这个隐藏域可以用来存储有关会话信息,但它主要缺点是:仅当每个页面都是有表单提交而动态生成时,才能使用这种方法。单击常规的


http://chatgpt.dhexx.cn/article/NoDrjOku.shtml

相关文章

jsp内置对象之session对象

在WEB应用中&#xff0c;当一个客户首次访问服务器上的某个jsp页面时&#xff0c;jsp引擎&#xff08;比如TOMCAT&#xff09;将为这个客户创建一个session对象&#xff0c;当客户关闭浏览器离开之后&#xff0c;session对象被注销。 设置session的目的是为了服务器端识别客户。…

JAVA Web入门之JSP内置对象的解析及使用(超详细必看)

创作不易 觉得有帮助请点赞关注收藏~~ 概述&#xff1a;由于JSP使用java作为脚本语言 所以JSP具有强大的对象处理能力 并且可以动态创建web页面内容 但java语言在使用一个对象前 需要先实例化这个对象 为了简化开发 JSP提供了一些内置对象 用来实现JSP应用 在使用JSP内置对象…

JSP内置对象和四大作用域

一、JSP九大内置对象 名称 类型 含义 获取方式 request HttpSevletRequest 封装所有请求信息 方法参数 response HttpServletResponse 封装所有响应信息 方法参数 session HttpSession 封装所有会话信息 req.getSession() application ServletContext 所有信…

jsp内置对象的作用范围

内置对象的作用范围是指每个内置对象的某个实例在多长时间和多大的范围中有效&#xff0c;即在什么样的范围内可以有效地访问同一个对象实例。 在javax.servlet.jsp.PageContext的类中定义了4个常量来指定内置对象的作用范围&#xff1a;APPLICATION_SCOPE、SESSION_SCOPE、PAG…

JSP内置对象——application对象

在介绍appl ication 对象之前&#xff0c;先简单介绍一些Web 服务器的实现原理。 对于大部分浏览器而言&#xff0c;它通常负责完成三件事情&#xff1a; &#xff08;1&#xff09;向远程服务器发送请求。 &#xff08;2&#xff09;读取远程服务器返回的字符串数据。 &#x…

JSP入门之JSP内置对象

系列文章目录 目录 前言 一、request对象 1.获取用户提交的信息 2.JSP页面文件的编码方式 3.常用方法举例 4.处理HTML标记 5.处理超链接 二、response对象 1.动态响应contentType属性 2.response对象的HTTP文件头 3.response对象的重定向 三、session对象 1.se…

JSP内置对象request

1.request对象 request对象是最常用的JSP内置对象之一,其中包含了有关浏览器请求的信息 可以在JSP页面中通过调用request对象的方法来获取请求中的相关数据以及浏览器的有关信息。 request对象用于处理请求的方法有很多 request的getPaeameter&#xff08;&#xff09;方法是…

【Jsp】第七课 Jsp内置对象的学习和使用

概念 什么是JSP内置对象&#xff1f; } JSP 内置对象是 Web 容器创建的一组对象 } JSP 内置对象是可以直接在 JSP 页面使用的对象 &#xff0c;无需使用“ new” 获取实例 } JSP 内置对象的名称是 JSP 的保留字 } 内置对象说白了就是别人创建好了的对象&#xff0c;我们…

JSP内置对象详解 常用方法

目录 out request response session application exception page config pageContext JSP内置对象的作用域 JSP内置对象是在JSP运行环境中已定义好的对象&#xff0c;可在JSP页面的脚本部分直接使用。 out对象 out 为输出流对象&#xff0c;主要用于向客户端输出流…

JSP内置对象

JSP内置对象的分类内置对象属性保存范围JSP内置对象的常用方法&#xff08;只列了一些&#xff09;小例子 一&#xff1a;JSP内置对象的分类 这些对象不用经过显示声明直接引用&#xff0c;也不用代码创建其实例&#xff0c;可在程序中直接使用&#xff0c;由Web Container为对…

jsp内置对象之request

一、内置对象概述 有些对象不用声明即可在jsp页面的java程序片和表达式中使用&#xff0c;这就是jsp 的内置对象。Jsp的常用的内置对象有request&#xff0c;response&#xff0c;session&#xff0c;aplication和out。Response和request对象是jsp内置对象中比较重要的两个&am…

JSP的内置对象详解

JSP内置对象 文章目录 JSP内置对象前言一、out对象1.原理2. 向客户端输出数据 二、page对象1.范围 三、pageContext 对象1.获取内置对象2.存储数据 四、request对象1.创建及获取请求2.范围 五、response 对象1.重定向网页2.处理HTTP文件头 六、session对象1.创建及获取客户的会…

JSP常用内置对象概述

1、概述 JSP提供了9个预设的对象&#xff0c;我们将其称为内置对象。这些对象内置在JSP网页环境之下&#xff0c;因此用户不需要引用这些对象所属的包&#xff0c;便可以直接在JSP网页中使用这些对象。 如图&#xff1a; (1 ) request与response对象。JSP网页能够具备与用户…

JSP的九种内置对象

JSP有九个内置对象&#xff08;又叫隐含对象&#xff09;&#xff0c;不需要预先声明就可以在脚本代码和表达式中随意使用&#xff0c;即不需要实例化&#xff0c;直接使用其方法即可。 pageppagecontentoutconfigexceptionrequestreponsesessionapplication 作用域&#xff…

JSP九大内置对象

JSP提供了由容器实现和管理的内置对象&#xff0c;也可以称之为隐含对象&#xff0c;由于JSP使用Java作为脚本语言&#xff0c;所以JSP将具有强大的对象处理能力&#xff0c;并且可以动态创建Web页面内容。但Java语法在使用一个对象前&#xff0c;需要先实例化这个对象&#xf…

【JSP内置对象】之9大内置对象(JavaWeb必背必掌握)

JSP内置对象 理解9大内置对象分类1.request&#xff08;请求对象&#xff09;2.response(响应对象)3.session(会话对象)4.application(应用程序对象)5.page(页面对象)6.pageContext(页面上下文对象)7.out(输出对象)8.config(配置对象)9.exception(异常对象) 理解 1.JavaEE规范…

SQL INSERT 语句

INSERT 语句是向表中添加新行&#xff0c;&#xff08;如图所示的是INSERT 语句的最基本形式&#xff09; 1、首先&#xff0c;是要指定要插入的表的名称&#xff08;例如图中的yuangong&#xff09; 2、其次&#xff0c;指定要插入的数据&#xff0c;一个或多个列的列表。必须…

pycharm sql语句插入

一. 二. 开控制台 三. 书写sql语句&#xff0c;点击绿色三角运行

python执行sql 语句

python执行sql 语句 数据etl 过程中会涉及到调度&#xff0c;也就是每天要定时执行的任务&#xff0c;这些任务执行过程中其实是通过底层的脚本代码来进行数据的清洗转换等处理的。而脚本代码中肯定会涉及到调用sql 语句的情况&#xff0c;最近项目正好用到python 脚本调用sql…

通过Navicat 写SQL语句

具体步骤&#xff1a; 1、首先打开要写SQL语句的数据库连接 2、然后点击菜单中的查询&#xff08;query&#xff09; 3、然后点击新建查询 4、然后输入SQL语句&#xff0c;点击运行 &#xff0c;查询到的数据在底部