作用域名称 | 对应Servlet中的对象 | 解释 | |
---|---|---|---|
应用域 | application | ServletContext | 服务器开启,会自动创建应用域对象,这个对象是全局唯一的,存在里面的数据在整个应用中都能共享。 |
会话域 | session | HttpSession | 会话是指浏览器的一次开启以及关闭,开启浏览器表示开启了一个会话,关闭浏览器表示会话结束(会话就是单纯的浏览器的开启与关闭,与标签页无关,单独开启新的标签页不是新的会话),存在里面的数据可以在同一个会话共享。 |
请求域 | request | HttpRequest | 浏览器每次访问我们的服务器都称为一次请求,数据如果存在在请求域中,就代表只有当前葡请求能获取到里面的数据。 |
用处:
作用域主要就是用来存储数据的,根据作用域的级别不同,数据的存储范围也不同从大到小一次为:
应用域>会话域>请求域
如果数据存在应用域之中,只要服务不关闭所有的Servlet都能访问到数据,如果数据存放在会话域之中,只有同一个会话才能从里面获取数据,如果数据存放在请求域之中,只有同一个请求才能从里面获取数据
```java
public class AServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
//观察应用域数据(存)
//arg0.getServletContext().setAttribute("msg", "和斗殴让他加油");
//观察会话域数据(存)
//arg0.getSession().setAttribute("msg", "立刻就离开他如今又卡了");
/*HttpSession session = arg0.getSession();
//设置会话域数据过期时间(不活跃的时间间隔)
session.setMaxInactiveInterval(100);
session.setAttribute("msg", "空间还看过的来看");
session.setAttribute("msgg", "空间还看过的来看");*/
arg0.setAttribute("aaa", "哦和金融诶具体如图");
}
}
public class BServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
//取出应用域的数据
//System.out.println("BServlet:"+arg0.getServletContext().getAttribute("msg"));
//取出会话域的数据
/*System.out.println("BServlet:"+arg0.getSession().getAttribute("msg"));
System.out.println("BServlet:"+arg0.getSession().getAttribute("msgg"));*/
System.out.println(arg0.getAttribute("aaa"));
}
}
public class CServlet extends HttpServlet{
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
//System.out.println("CServlet:"+arg0.getServletContext().getAttribute("msg"));
//System.out.println("BServlet:"+arg0.getSession().getAttribute("msg"));
//删除指定的会话层数据
//arg0.getSession().removeAttribute("msg");
//清空会话层所有数据
//arg0.getSession().invalidate();
System.out.println(arg0.getAttribute("aaa"));
}
}
```
web.xml的配置
```xml
<servlet>
<servlet-name>a</servlet-name>
<servlet-class>com.ishangu.servlet.AServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>a</servlet-name> <!-- 指定Servlet的名字 -->
<url-pattern>/a</url-pattern> <!-- 指定浏览器访问这个路径 -->
</servlet-mapping>
<servlet>
<servlet-name>b</servlet-name>
<servlet-class>com.ishangu.servlet.BServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>b</servlet-name> <!-- 指定Servlet的名字 -->
<url-pattern>/b</url-pattern> <!-- 指定浏览器访问这个路径 -->
</servlet-mapping>
<servlet>
<servlet-name>c</servlet-name>
<servlet-class>com.ishangu.servlet.CServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>c</servlet-name> <!-- 指定Servlet的名字 -->
<url-pattern>/c</url-pattern> <!-- 指定浏览器访问这个路径 -->
</servlet-mapping>
```
实际开发中应用域我们是很少使用的,因为应用域的数据一般不会过期,频繁使用应用域的话会造成服务器数据越来越多,引起服务器崩溃,会话在开发使用中我们很少去设置过长的时间,因为会话的数据也是存储在服务器中的,如果会话长时间保持联系,也会造成服务器数据越来越多,|所以我们几乎不会在会话域和应用域存储大量数据,以及一般会根据情况给会话设置一个合理的过期时间。