接着来看JSP内置对象。
response对象
response对象是javax.servlet.http.HttpServletResponse类的实例。当服务器创建request对象时会同时创建用
于响应这个客户端的response对象。
response对象也定义了处理HTTP头模块的接口。通过这个对象,开发者们可以添加新的cookies,时间戳,
HTTP状态码等等。
response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。response对象具有页面作用域,即
访问一个页面时,该页面的response对象只能对这次访问有效,其它页面的response对象对当前页面无效。
response对象代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作
用域,它只在JSP页面内有效。
response对象常用方法如下:
实例:
我们创建一个名字叫做response.jsp页面:
运行结果:
我们看到输出的顺序和我们编写代码的顺序有出入,PrintWriter对象的输出提前于内置对象out对象的输出,那
么我们怎么做到正常顺序输出呢?
在输出之前我们强制清空缓冲区,就可以做到:
运行结果:
我们学习了reuqest对象和reposnse对象,那么再来看一个重要的知识点就是请求重定向与请求转发。
生活实例:
假设你去办理某个护照:
重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去
了B局。
转发:你去了A局,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会
儿,自己到后面办公室联系B的人,让他们办好以后,送了过来。
使用代码验证
请求重定向:客户端行为,response.sendRedirect()。从本质上讲等同于两次请求,前一次请求对象不会保存,
地址栏的URL地址会改变。
例子:
我们继续使用reg.jsp用户注册页面,只不过需要提交的页面改为:
在response.jsp页面我们使用response对象重定向到request.jsp页面:
在注册页面输入用户名和选择爱好:
最后的结果:
请求转发:服务器端行为,request.getRequestDispatcher().forward(requset,response); 是一次请求,转发
后请求对象会保存,地址栏的URL地址不会改变。
还是上面那个例子:
这一次我们在response.jsp页面中把请求重定向注释掉,输入下面的一行转发代码:
还是输入用户名和选择爱好, 最后的结果:
session对象
什么是session?
session表示客户端与服务器的一次会话。Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器
关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。从上述的定义中可以看到,session实际上是一个特
定的时间概念。在服务器的内存中保存着不同用户的session。
从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个
客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办
法知道这是同一个客户,这就需要session对象。
session对象
session对象是javax.servlet.http.HttpSession类的实例。session对象是由服务器自动创建的与用户请求相关的
对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部
使用Map类来保存数据,因此保存数据的格式为"Key/value"。 session对象的value可以使复杂的对象类型,而不仅
仅局限于字符串类型。
session对象的ID指的是当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个session对象,同时分
配一个String类型的ID号,JSP引擎同时将这个ID号发送到客户端,存放在Cookie中,这样session对象和客户之间就
建立了一一对应的关系。当客户再访问连接该服务器的其他页面时,不再分配给客户新的session对象,直到客户关闭
浏览器后,服务器端该客户的session对象才取消,并且和客户的会话对应关系消失。当客户重新打开浏览器再连接到
该服务器时,服务器为该客户再创建一个新的session对象。会话结束指的是和session相关的页面全部关闭。
session对象存在一定时间过期问题,所以存在session中的名值对会在一定时间后失去,可以通过更改session有
效时间来避免这种情况。同时编程时尽量避免将大量有效信息存储在session中,request是一个不错的替代对象。
session是JSP的四大域之一,但我们常用session来做会话管理/会话跟踪,就是在用户登录的时候,把用户的登
陆信息放进session里面,并在一些内部页面校验是否是当前的session ,以确保当前用户不是游客,并且拥有更多的权
限,如添加到购物车,支付购买等。并且通常情况下我们只设置一个session所以,用户登录时就会被自动把用户信息
保存到session域里面。
当你浏览商品,点击购买会提示你还没有登陆,直到登陆后,你的session才开始跟踪你的浏览记录,你才拥有购
买的权限。session是保存在服务器的,底层依赖于cookie,你在浏览器的整个浏览记录都会被保存到cookie(缓存)当
你登录的时候,服务器端的session才会创建(记住,session只保存与用户相关的信息)。
我们生活中的购物流程:
session对象常用的方法:
实例:
我们来创建两个JSP页面,一个是session_page1.jsp页面:
另一个是session_page2.jsp页面:
运行结果:
我们在session_page1.jsp页面中可以设置session保存的多个属性与属性值:
那么在session_page2.jsp也可能需要接受这么多:
最后运行结果:
session生命周期
1)创建:
当客户端第一次访问某个JSP或者Servlet时候,服务器会为当前会话创建一个sessionId,每次客户端向服务器端
发送请求时,都会将此sessionId携带过去,服务器会对此sessionId进行校验。
2)活动:
某次会话当中通过超链接打开的新页面属于同一次会话。
只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时属于同一次会话。
除非本次会话的所有页面都关闭后再重新访问某个JSP或者Servlet将会创建新的会话。
注意事项:注意原有会话还存在,只是这个旧的sessionId仍然存在于服务端,只不过再也没有客户端会携带它然
后交予服务端校验。
3)销毁:
session的销毁有三种方式:
1调用了session.invalidate()方法
2session过期(超时)
3服务器重新启动
实例:
我们在session_page1.jsp页面中设置最大的生命周期时间,过了期限那么跳转到session_page.jsp页面接受到的
信息就不会保存。
在session_page1.jsp页面增加一行代码:
运行结果:
在session_page1.jsp页面中设置了setMaxInactiveInterval()的时间,比如setMaxInactiveInterval(10),无论你
是否跳转到session_page2.jsp页面,10s后,session_page1的session的ID就无效了,所以session_page2后面的
sessionId也无效。
我们可以通过代码验证上面session生命周期活动这一阶段的结论。
1)测试某次会话中通过超链接打开新的页面属于同一次会话
这个我们已经在上面遇到过,这一次还是使用同样的代码进行演示:
sessionLifeDemo.jsp页面代码:
session_page2.jsp页面代码还是不变。
运行结果:
2)只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时属于同一次会话。
我们在不关闭sessionLifeDemo.jsp页面和session_page2的情况下,再次重新打开新的浏览器窗口,这一次我们
单独访问session_page2.jsp页面,ID编码还是和上面相同的,说明,这种情况还是属于同一次会话。
请看结果:
3)本次会话的所有页面都关闭后再重新访问某个JSP或者Servlet将会创建新的会话。
我们这一次全部关闭本次会话的所有页面,重新启动浏览器,重新打开sessionLifeDemo.jsp页面。
重新打开的结果:
4)使用sessio对象的invalidate()方法是销毁当前会话
每次刷新页面,都会进行新的一次会话,也就是sessionId每次刷新后都不同。session是服务器端保存用户信
息,创建时服务器端生成相应的sessionId,接下来的客服端与服务器端的联系标识就是该sessionId。销毁是将服务
器端的session信息释放,资源回收。
这个比较简单,就不再验证。
相关推荐
### JSP九大内置对象详解 #### 一、Request对象 - **定义**:`javax.servlet.http.HttpServletRequest` 类型的对象。 - **用途**:用于接收客户端发送到服务器端的数据(包括但不限于HTTP请求头、请求参数等)。 - ...
二、JSP九大内置对象 1. request对象(javax.servlet.http.HttpServletRequest) request对象是JSP九大内置对象之一,每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。request...
jsp九大内置对象是学习jsp必须了解的内容,所以现在总结一下,以便以后学习中可以使用。
在"Jsp九大内置对象对应代码"这个压缩包中,包含了针对这九大内置对象的具体应用示例。通过这些代码,你可以更深入地理解每个对象的功能和使用场景。例如,你可能会看到如何使用request对象获取参数,如何通过...
在Java Server Pages(JSP)技术中,九大内置对象是开发者处理网页动态内容时最常用到的工具。这些对象由JSP容器自动创建并注入到每个JSP页面,使得开发人员能够轻松地访问服务器端的功能。下面将对这九大内置对象...
【jsp九大内置对象】是JavaServer Pages (JSP) 技术的核心组成部分,它们提供了一种方便的方式来访问和操作与HTTP请求相关的各种信息。以下是这九大内置对象的详细说明: 1. **Request对象**:全称为...
jsp九大内置对象和四大作用域详解 jsp中的九大内置对象和四大作用域是jsp编程中非常重要的概念,它们提供了访问和操作服务器端资源的能力,帮助开发者快速构建动态Web应用程序。 一、request对象 request对象代表...
【JSP的九大内置对象】 JSP的九大内置对象是JSP页面中可以直接使用的Java对象,无需显式声明。它们提供了对HTTP请求、响应、会话管理、页面上下文访问等核心功能的支持。 1. **request对象**:代表...
JSP九大内置对象思维导图,对正在学习JSP的同学很有帮助。session、request、response、application等等。
【jsp九种内置对象详解】 在JavaServer Pages (JSP)技术中,内置对象是预定义的、可以直接在页面上使用的对象,无需显式创建。它们提供了与服务器、用户交互以及管理请求和响应数据的能力。以下是JSP的九种内置对象...
全面介绍了JSP的几种内置对象。熟练使用这些内置对象是开发JSP应用程序的基本要求,尤其是对于request、session和application对象更是必须要掌握的。 会使用对象所具有的方法,能熟练使用每一种对象的几种常用方法。...
### JSP九大内置对象详解 #### 1. request对象 **概述:** `request`对象是JSP中非常重要的一个内置对象,它主要用于封装客户端发送到服务器端的HTTP请求信息。通过这个对象,开发者可以获取客户端请求的各种信息...
JSP九大内置对象
《JSP 九大内置对象详解》 在JavaServer Pages (JSP) 技术中,开发者可以使用九个预定义的、与请求处理相关的对象,这些对象被称为“内置对象”。这些对象提供了对HTTP请求的访问,简化了网页开发,使得程序员能够...