Servlet上下文
来源:互联网 发布:特种部队知乎 编辑:程序博客网 时间:2024/05/17 08:36
一、Servlet上下文的基本概念
Servlet上下文又叫做:ServletContext。
当WEB服务器启动时,会为每一个WEB应用程序(webapps下的每个目录就是一个应用程序)创建一块共享的存储区域。
ServletContext也叫做“公共区域”,也就是同一个WEB应用程序中,所有的Servlet和JSP都可以共享同一个区域。
ServletContext在WEB服务器启动时创建,服务器关闭时销毁。
//通过当前Servlet类的对象,得到与它关联的ServletContext对象,也就是上下文ServletContext application = this.getServletContext();//HttpSession(私有区域) 与 ServletContext(公共区域) 的区别是什么?1、作用范围不同:HttpSession是针对每一个客户端浏览器单独有一个。 ServletContext是针对每一个WEB应用程序有一个2、存活时间不同:HttpSession第一次访问服务器,服务器端调用request.getSession()时创建,访问间隔时间超过30分钟就销毁。 ServletContext服务器启动时创建,服务器停止时销毁。
二、Servlet会话
1、理解会话的作用
会话——浏览器请求一次服务器,服务器接收请求,处理之后,给出响应,这就是一次会话。
因为HTTP协议是一种“无状态”协议(断开连接式协议),也就是服务器给客户端浏览器响应之后,就会断开网络连接。下次客户端浏览器请求服务器时会再建立网络连接。实际上HTTP协议是为了保证服务器的性能。而这种情况下,默认服务器是不会记录客户端浏览器的信息的。
会话跟踪——在多次浏览器跟服务器的会话过程中,服务器必须要记录客户端浏览器的一些信息,这个叫会话跟踪。
2、会话跟踪原理
试想一下储户和银行的交互过程:
浏览器跟服务器交互的过程与其类似
三、HttpSession的使用
对于HttpSession来说,每个独立的浏览器窗口就是一个不同的客户端,会为它们分配不同的会话ID。
/*得到会话对象request.getSession() 方法有两重含义1、如果浏览器是第一次请求服务器,则请求中没有会话ID,此时会分配ID,创建空间2、如果浏览器不是第一次请求服务器,则请求中存在会话ID,此时会返回原来的HttpSession对象*/HttpSession session = request.getSession();
HttpSession何时被创建,何时被销毁呢?
创建:第一次请求服务器,服务器端的Servlet调用了 request.getSession()方法时被创建。
销毁:如果浏览器间隔时间超过30分钟没有访问服务器,则服务器会销毁对应的HttpSession对象。(默认30分钟是可以配置的。)
<session-config><session-timeout>30</session-timeout></session-config>
void setAttribute(String key, Object value); 存入键值对Object getAttribute(String key); 根据键取出对应的值HttpSession又被称为“私有作用域”,或者也叫做“私有区域“
使用HttpSession实现保存用户信息及登录验证!
URL重写
我们前面如果要给Servlet传递数据,都是通过表单提交。
除了这种方式之外,还有一种常见的形式,就是:URL重写
URL重写的办法就是在URL地址之后传递请求参数:
格式:URL?参数名1=值1&参数名2=值2……
四、总结
1、 HttpServlet是所有我们自己编写的Servlet的父类。我们要通常要重写它的 doGet() 或 doPostt()方法。
Servlet的生命周期是怎样的?
首次访问:实例化——>初始化 init() ——> 服务 service() 根据请求是GET还是POST——> 调用 doGet() 或 doPost()
后续访问:服务 service() 根据请求是GET还是POST ——> 调用 doGet() 或doPost()
在服务器上,Servlet始终只有一个对象!
服务器关闭时:销毁 destroy()
2、 HttpServletRequest是请求对象,服务器会在有客户端请求的时候创建这个对象来保存请求的数据。
常用方法:
void setCharacterEncoding(编码方式) 设置请求内容的编码方式
String getParameter(参数名称) 得到请求参数(表单提交,URL重写)的值
HttpSession getSession() 得到一个私有区域。
首次调用:请求中没有SessionID,会创建一个新对象
后续调用:请求中有SessionID, 会得到原来的对象
3、 HttpServletResponse是响应对象,Servlet处理之后的结果会放到里面,由服务器发送给客户端浏览器。
常用方法:
void setCharacterEncoding(编码方式) 设置响应内容的编码方式
PrintWriter getWritter() 得到一个用来向客户端浏览器发送HTML内容的输出流对象
void sendRedirect(URL地址) 发送重定向(外部跳转)
4、 HttpSession 私有区域。
何时创建?
客户端浏览器第一次请求服务器,服务器端的Servlet调用了request.getSession()时创建。
何时销毁?
访问间隔时间超过30分钟(可以配置)就销毁。
SessionID是存储在客户端浏览器的内存中,而HttpSession对象存储在服务器端。每次客户端浏览器请求服务器时,会自动将SessionID发送给服务器。
常用方法:
void setAttribute(键,值)
Object getAttribute(键)
boolean isNew()
5、 ServletContext 公共区域
何时创建?
服务器启动时会为每一个WEB应用程序创建一个ServletContext。
何时销毁?
服务器停止时销毁。
常用方法:
void setAttribute(键,值)
Object getAttribute(键)
- Servlet上下文
- Servlet 上下文
- Servlet上下文
- Servlet上下文
- Servlet上下文
- Servlet上下文
- Servlet上下文ServletContext接口
- Servlet通信和上下文
- 3 Servlet 上下文
- Servlet通信和上下文
- 什么是servlet上下文
- Servlet上下文监听器
- servlet上下文参数
- 请问什么是Servlet上下文?
- Servlet跳转及上下文
- Servlet 上下文数据共享
- servlet初始化参数、上下文参数、上下文属性
- BlazeDs中获取servlet上下文
- mybatis四大神器之二-改
- js--打卡--12.04数组学习
- BZOJ4408: [Fjoi 2016]神秘数
- lwj_C#_周总结1
- darwin之结构体中定义宏
- Servlet上下文
- 漫画:如何写出更优雅的单例模式?
- 11个优秀的Android开源项目
- 在阿里云服务器上部署基于PM2和mongose的Node项目
- 邮件开发涉及到的一些基本概念
- 织梦后台点击缩略图浏览出现提示:“需输入后台管理目录才能登录”
- 新路程------关于imx6q uart的杂谈
- XSS处理方法
- 阿里云内网集群搭建