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
---------------
我每一次回头,都感觉自己不够努力,所以我不再回头。
---------------