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被销毁的时机
- session超时;
- 浏览器关闭后,再也访问不到和该浏览器对应的session,它会在超时之后被销毁;
- 调用 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属性范围会影响服务器性能。