servlet ServletContext

ServletContext概述

  • 全局对象,也拥有作用域,对应一个Tomcat中的Web应用

  • 当Web服务器启动时,会为每一个Web应用程序创建一块共享的存储区域(ServletContext)。

  • ServletContext在Web服务器启动时创建,服务器关闭时销毁。

获取ServletContext对象

GenericServlet提供了getservletContext()方法。(推荐)this.getservletContext();

HttpServletRequest提供了getServletContext()方法。(推荐)

HttpSession提供了getServletContext()方法。

ServletContext作用

获取项目真实路径

获取当前项目在服务器发布的真实路径

String realpath=servletContext.getRealPath("/");

获取项目上下文路径

获取当前项目上下文路径(应用程序名称)

System.out.println(servletContext.getContextPath());//上下文路径(应用程序名称)
System.out.println(request.getContextPath());

全局容器

servletContext拥有作用域,可以存储数据到全局容器中

//存储数据
servletContext.setAttribute("name",value);
//获取数据
servletContext.getAttribute("name");
//移除数据
servletContext.removeAttribute("name");

ServletContext特点

  • 唯一性:一个应用对应一个servlet上下文。

  • 生命周期:只要容器不关闭或者应用不卸载,servlet上下文就一直存在。

ServletContext应用场景

ServletContex统计当前项目访问次数

使用

package com.zjw;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "ServletContextServlet" , value = "/context")
public class ServletContextServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取ServletContext对象
        ServletContext servletContext1 = this.getServletContext();
        ServletContext servletContext2 = request.getServletContext();
        ServletContext servletContext3 = request.getSession().getServletContext();
        //获取的是同一个对象
        System.out.println(servletContext1);
        System.out.println(servletContext2);
        System.out.println(servletContext3);

        //获取项目真实路径
        System.out.println(servletContext1.getRealPath("/"));

        //获取项目上下文路径
        System.out.println(servletContext1.getContextPath());
        System.out.println(request.getContextPath());

        //全局容器
        servletContext1.setAttribute("name","张三");
    }
}

运行结果

org.apache.catalina.core.ApplicationContextFacade@9665db
org.apache.catalina.core.ApplicationContextFacade@9665db
org.apache.catalina.core.ApplicationContextFacade@9665db
E:\code\IdeaProjects\servlet\servlet\target\servlet-1.0-SNAPSHOT\
/servlet_war_exploded
/servlet_war_exploded
posted @ 2020-10-29 14:12  雨中遐想  阅读(126)  评论(0编辑  收藏  举报