Java Web学习(12):JSP九大内置对象(二)

       接着来看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信息释放,资源回收。

       这个比较简单,就不再验证。

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
JSPJava Server Pages)是一种基于Java语言的服务器端网页开发技术,其中包括九大内置对象和四大作用域。 九大内置对象是指在每一个JSP页面中,系统自动为开发者创建的九个对象,分别是: 1. request对象:用于获取HTTP请求的信息,如请求参数、请求头等。 2. response对象:用于设置HTTP响应的信息,如设置返回的内容、重定向等。 3. out对象:用于向客户端输出内容,可以通过该对象在页面中生成动态内容。 4. session对象:用于存储用户的会话信息,可以在不同的页面和请求之间共享数据。 5. application对象:用于存储全局的应用程序数据,可供所有用户访问。 6. config对象:用于获取当前JSP页面的配置信息,如JSP的初始化参数等。 7. page对象:代表当前JSP页面本身,可以用于调用页面的方法或属性。 8. exception对象:用于处理JSP页面中的异常,可以获取异常的相关信息。 9. pageContext对象:包含了对其他八个内置对象的引用,可用于简化代码的编写。 四大作用域是指在JSP中定义的存储数据的范围,分别是: 1. page作用域:数据的作用范围限定在当前JSP页面,即页面级别的作用域。 2. request作用域:数据的作用范围限定在一次HTTP请求与响应过程中,可供同一请求中的不同页面共享。 3. session作用域:数据的作用范围限定在用户的整个会话过程中,可供不同请求和页面共享。 4. application作用域:数据的作用范围限定在整个Web应用程序中,可供所有用户和所有请求共享。 通过合理的使用这九大内置对象和四大作用域,可以方便地处理页面间的数据传递和数据共享,提高JSP网页开发的效率和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值