0%

servlet三个作用域

2017年9月7日 上午11:07

概述

  1. Servlet提供三个作用域(变量池),用于让方便用户存储变量
  2. 关键是要了解这三个作用域(变量池),何时开始,何时释放不要自己需要这个池子里的变量时,但是池子已经释放了
  3. 附录中有使用的源码

servlet的作用域

概述:每个作用域对象都相应的代表一个域容器 其中的信息在本域中共享。

  1. request作用域 作用范围:一次请求
    1. 当前request池子结束标志:
      1. 用户刷新了一下当前页面,原来的request池子就释放了,产生了一个新的request池子
    2. 如果使用在service中使用请求转发的方式,那么依然算一次请求,request池子还在
  2. session作用域 作用范围:一次会话
    1. session池子结束标志
      1. 用户把浏览器关了
      2. 用户换了一个浏览器登陆
  3. application作用域 作用范围:一次服务周期
    1. application结束标志
      1. 服务器管理员将tomcat服务器重启了
  4. application作用域 > session作用域 > request作用域
    1. 小的作用域存在,大的作用域一定存在

附录:

MyServlet5 extends HttpServlet:给池子里赋值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package com.shanxi.weixin.servlet;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.GenericServlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class MyServlet5 extends HttpServlet {

/*
* 接收所有请求的方法
*/
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
HttpSession session = req.getSession();
ServletContext application = req.getServletContext();

req.setAttribute("name","mike");
session.setAttribute("name","john");
application.setAttribute("name","rose");

//req.getRequestDispatcher("myServlet6").forward(req, res);
res.sendRedirect("/servletDemo/myServlet6");
}

}

MyServlet6 extends HttpServlet:从池子里取值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.shanxi.weixin.servlet;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.GenericServlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class MyServlet6 extends HttpServlet {

/*
* 接收所有请求的方法
*/
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
HttpSession session = req.getSession();
ServletContext application = req.getServletContext();
System.out.println(req.getAttribute("name"));
System.out.println(session.getAttribute("name"));
System.out.println(application.getAttribute("name"));

}

}