什么是作用域?

  • 就是对象的声明周期,在JavaWeb中有多个不同声明周期的对象
  • 比如:PageContext,ServletRequest,HttpSession,ServletContext
  • 对象里面包含属性和对应的数据,所以不同作用域对象使用场景会不同

ServletContext

  • 它代表了servlet环境的上下文,相当于一个全局存储空间
  • 同一个WEB应用程序,所有的Servlet和JSP都可以共享同一个区域,是最大的作用域对象(webapps下的每个目录就是一个应用程序)
  • 四大作用域对象-用于存取数据:
    • PageContext(页面)->ServletRequest(请求)->HttpSession(会话)->【ServletContext】(应用)
  • 声明周期:在WEB服务器启动时创建,服务器关闭时销毁

示?

  • 存储全局数据(只要是同一个应用,都可以共享这些数据,类似map结构)
  • web.xml中的配置
  <context-param>
    <param-name>url</param-name>
    <param-value>fl.net</param-value>
  </context-param>
@WebServlet(name = "userServlet",value = "/user1")
public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet");
        //设置响应内容
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter printWriter = resp.getWriter();
        printWriter.write("<div>doGet可以了</div>");

        ServletContext servletContext = this.getServletContext();
        String url = servletContext.getInitParameter("url");
        System.out.println(url);

        servletContext.setAttribute("appInfo","net Info");
    }
}
@WebServlet(name = "testServlet",value = "/test")
public class TestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置响应内容
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter printWriter = resp.getWriter();
        printWriter.write("<div>doGet可以了</div>");

        ServletContext servletContext = this.getServletContext();
        Object appInfo = servletContext.getAttribute("appInfo");
        System.out.println("appInfo:"+appInfo);
    }
}