Servlet三大域、JSP九大内置对象

转自:https://blog.csdn.net/lairikeqi/article/details/88804161

servlet三大作用域:request,session,application(ServletContext)

Request

request表示一个请求,只要发出一个请求就会创建一个request,它的作用域仅在 当前请求中有效,如果Web组件之间需要共享同一个请求中的数据,只能使用请求转发

1. 用处:

用于服务器间同一请求不同页面之间的参数传递

用于表单的控件值传递

2. 常用方法:

request.setAttribute(); 
request.getAttribute(); 
request.removeAttribute(); 
request.getParameter().

Session

服务器为每个会话创建一个session对象,所以session中的数据可供当前会话中所有servlet共享。作用域:会话从用户打开浏览器开始,直到关闭浏览器才结束,一次会话期间只会创建一个session对象。

1. 用处:

用于web开发中的登陆验证界面
用于电商网站购物车功能

2. 常用方法

session.setAttribute(); 
session.getAttribute(); 
session.removeAttribute();

在Servlet直接获取session:

HttpSession session = request.getSession();

JSP页面中直接使用(session属于JSP九大内置对象之一):

<%session.serAttribute("name","admin")%> 

3. session被销毁的时机

  1. session超时;
  2. 浏览器关闭后,再也访问不到和该浏览器对应的session,它会在超时之后被销毁;
  3. 调用 session.invalidate();

备注: session是服务器端对象,保存在服务器端,并且服务器可以将创建session后产生的 sessionid 通过一个 cookie 返回给客户端,以便下次验证。(session底层的一种实现依赖于cookie,session一般配合cookie来保存会话信息,但在不允许使用cookie的情况下,也可以使用url重写的形式传递信息)

Application(ServletContext)

ServletContext在 服务器启动时创建,服务器关闭时销毁("与天地同寿")。一个JavaWeb应用只创建一个ServletContext对象,所有的浏览器在访问服务器时都共享同一个ServletContext对象,ServletContext对象一般用于在多个浏览器间共享数据时使用。

Servlet中获取Application对象:

ServletContext serContext = this.getServletContext();
serContext .setAttribute("name", "kaixuan"); //设置一个值进去
serContext .getAttribute("name"); //获取键值对 

备注:ServletContext同属于JSP九大内置对象之一,在JSP页面中可以直接使用

作用域对象共享数据方法:

1. 设置作用域中的共享数据
作用域对象.setAttribute(String name,Object value);

2. 获取作用域中的共享数据
Object value = 作用域对象.getAttribute(String name);

3. 删除作用域中的指定的共享数据
作用域对象.removeAttribute(String name);

Servlet总结

1. 生命周期

request:只作用于当前一次请求
session:一次会话(多次请求)
application:项目的启动到结束

2. 作用范围

requset:所有被请求转发的Servlet
session:所有Servlet(当前浏览器)
application:所有Servlet(所有浏览器都行)

3. 正确选择作用域

request:跟当前操作功能相关
session:跟用户信息相关,如登录信息、银行账号
application:跟项目全局信息相关,如:京东配送地址
如果选择的作用域不够准确,会造成内存浪费。

4. 测试作用域生命周期

验证

测试过程:新建项目部署到Tomcat,浏览器访问,F5多次刷新,中途换浏览器访问

测试结果:request的计数值始终是1,session的技术值当换了浏览器后从1开始,Application的计数值一直相加

 Cookie

cookie是http协议提供的,不是java独有的;

cookie保存在客户端;

可以设置生命时长;

cookie有个属性是路径,但该路径指的是服务端路径;

cookie的形式是一个键值对,如uid:lxj;

http约定,单条cookie不超过4KB,单个会话最多保存20条cookie; 浏览器最多储存300条cookie;但一般浏览器对这个规定会有超出,如允许单个会话超过20个cookie;

与之对应的,session是Java独有的,全称是httpsession, 每个session 都有JSEESIONID;

session一般配合cookie来保存会话信息,但在不允许、cookie的情况下,也可以使用url重写的形式传递信息

 JSP九大内置对象

 转自 https://www.cnblogs.com/liuyangv/p/8059848.html

JSP有九个内置对象(又叫隐含对象),不需要预先声明就可以在脚本代码和表达式中随意使用(JSP本质上就是一个Servlet, 是一种特殊的servlet,提前声明好了这九大对象)

JSP九大内置对象分为四类:

  • 输入输出对象:out对象、response对象、request对象
  • 通信控制对象:pageContext对象、session对象、application对象
  • Servlet对象:page对象、config对象
  • 错误处理对象:exception对象
 
名称 完整包名 说明 作用
PageContext   javax.servlet.jsp.PageContext JSP的页面容器 提供了对jsp页面所有对象以及命名空间的访问
request  javax.servlet.http.HttpServletrequest  获取用户的请求信息 封装了来自客户端、浏览器的各种信息
response  javax.servlet.http.HttpServletResponse  服务器向客户端的回应信息 封装了服务器的响应信息
session  javax.servlet.http.HttpSession 用来保存每一个用户的信息 用来保存会话信息。也就是说,可以实现在同一用户的不同请求之间共享数
application  javax.servlet.ServletContext 表示所有用户的共享信息 代表了当前应用程序的上下文。可以在不同的用户之间共享信息
config  javax.servlet.ServletConfig 服务器配置信息,可以取得初始化参数 封装了应用程序的配置信息
out  javax.servlet.jsp.jspWriter 页面输出 用于向客户端、浏览器输出数据
page  java.lang.object   指向了当前jsp程序本身
exception  java.lang.Throwable   封装了jsp程序执行过程中发生的异常和错误信息


四种属性范围:
page(pageContext): 只在一个页面中保存属性。 跳转之后无效。
request: 只在一次请求中有效,服务器跳转之后有效。 客户端跳无效
session: 再一次会话中有效。服务器跳转、客户端跳转都有效。 网页关闭重新打开无效
application: 在整个服务器上保存,所有用户都可使用。 重启服务器后无效
注意:如果设置过多的application属性范围会影响服务器性能。

 

 

posted @ 2019-07-07 13:12  lllunaticer  阅读(212)  评论(0编辑  收藏  举报