一、session
作用:解决了一个用户的不同请求处理的数据共享问题
原理:用户第一次访问服务器,服务器创建一个session对象给此用户,并将session对象的JSESSIONID用cookie技术存入浏览 器端,保证用户的其他请求能够获取到同一个session对象,保证了不同请求能获取到共享的数据。
特点:由服务器创建,存在服务器端,依赖cookie技术。
临时存在cookie中(关闭浏览器cookie失效,JSESSIONID失效),有效期是一次会话。
session默认存储30分钟(超时JSESSIONID失效)。
失效处理:用户请求中的JSESSIONID和后台获取到的session的Jsessionid比较
(例如登录后30分钟没有任何操作,自动退出,session失效,就要重新让用户登录)
使用: (1)创建session对象,也是获取session对象
HttpSession hs=req.getSession();
(2)设置session存储时间
hs.setMaxInactiveInterval(int seconds);//秒
(3)强制session失效,比如注销登录时
hs.invalidate();
1.如果请求中有session的标识符即JSESSIONID,则返回对应的session对象。
2.如果请求中没有session的标识符即JSESSIONID,则创建新的session对象,并将其JSESSIONID作为cookie数据返回
3.如果session对象失效,也会重新创建session对象,并将JSESSIONID存储在浏览器内存
//失效时间是距离最后一次使用的时间,不是初始设置时间
(4)存储数据
hs.setAttribute(String name, Object value);//键-值 (5)在另一个servlet中获取session信息
hs.getAttribute(String name);//返回数据类型为Object
hs.setAttribute("name", name);//键-值
//获取session信息
HttpSession hs=req.getSession();
System.out.println("SessionServlet2:"+hs.getId());
//得到SessionServlet存入session中的信息
System.out.println("SessionServlet2:"+hs.getAttribute("name"));//键名
注意:存储的动作和取出的动作可以发生在不同请求中,存储要先于取出执行
二、ServletContext对象
作用:解决了不同用户的数据共享问题。
原理:ServletContext对象由服务器进行创建,一个项目只有一个,不管在项目的任意位置进行获取得到的都是同一个对象,那么不同用户发起的请求获取到的也是同一个对象,该对象由用户共同拥有。(统计网站总登录人数)
生命周期:服务器启动到服务器关闭。
使用:
1.获取ServletContext对象
//方式1
ServletContext sc1=this.getServletContext();
//放式2
ServletContext sc2=this.getServletConfig().getServletContext();
//方式3
ServletContext sc3=req.getSession().getServletContext(); 2.使用ServletContext对象完成数据共享
//数据存储
sc1.setAttribute(String name, object value);//键-值 //数据获取
sc1.getAttribute(String name);//返回Obiect类型
(用户可以做存操作,也可以做取操作,获取的数据不存在返回NULL,) 3. 获取项目中web.xml文件中的全局配置数据
作用:将web.xml文件中的静态数据解耦
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 配置全局数据 -->
<context-param> <!-- 一个标签里配一个键值对-->
<param-name>name</param-name>
<param-value>libai</param-value>
</context-param>
//获取项目web.xml的全局配置数据
String name= sc1.getInitParameter("name");//根据键的名字返回string类型的值,没有为NULL
sc1.getInitParameterNames();//返回键名的枚举
4.获取项目webroot下资源的绝对路径
String path=sc1.getRealPath("/doc/1.txt");//只要写webroot之后的路径
System.out.println(path); //输出D:\tomcat\webapps\sc\doc\1.txt
5.获取webroot下的资源流对象
InputStream is= sc1.getResourceAsStream("/doc/1.txt");
(只能获取webroot根目录下的资源流对象,class文件的流对象需要使用类加载器获取。)
三、ServletConfig对象
作用:是servlet的专属配置对象,每个servlet都单独拥有一个servletconfig对象,用来获取web.xml中的配置信息。
使用:
获取ServletConfig对象
获取web.xml中的配置数据
//获取servletconfig对象
ServletConfig sc=this.getServletConfig();
//获取web.xml配置
String config=sc.getInitParameter("config");配置web.xml
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>ServletConfigServlet</servlet-name>
<servlet-class>ServletConfigServlet</servlet-class>
<!--内部配置-->
<init-param>
<param-name>config</param-name>
<param-value>utf-8</param-value>
</init-param>
</servlet>
四、web.xml使用总结
作用:存储项目和相关的配置信息,保护Servlet,解耦一些数据对程序的依赖
使用位置:每个web项目中--->局部配置,针对本项目
Tomcat服务器中--->全局配置,配置公共信息
核心组件(内容):
全局上下文配置(全局配置,context-param)
Servlet配置
过滤器配置
监听器配置
加载顺序:ServletContext → context-param --> listener---> filter-->Servlet加载组件
加载时机:服务器启动
五、server.xml文件
<Server>
<Service>
<Connector/>端口号
<Connector/>
<Engine>引擎
<Host>
<Context/>热部署
</Host>
</Engine>
</Service>
</Server>