JavaWeb篇_12——ServletContext对象

ServletContext对象

ServletContext对象介绍

ServletContext官方叫Servlet上下文。服务器会为每一个Web应用创建一个ServletContext对象。这个对象全局唯一,而且Web应用中的所有Servlet都共享这个对象。所以叫全局应用程序共享对象。

ServletContext对象的作用

  • 相对路径转绝对路径
  • 获取容器的附加信息
  • 读取配置信息
  • 全局容器
相对路径转绝对路径

context.getRealPath("path")

该方法可以将一个相对路径转换为绝对路径,在文件上传与下载时需要用到该方法做路径的转换。

java 复制代码
   	//获取ServletContext对象
       ServletContext servletContext = this.getServletContext();
       //转换路径
       String realPath = servletContext.getRealPath("image.PNG");
       File file=new File(realPath);
获取容器的附加信息

servletContext.getServerInfo()

返回Servlet容器的名称和版本号

servletContext.getMajorVersion()

返回Servlet容器所支持Servlet的主版本号。

servletContext.getMinorVersion()

返回Servlet容器所支持Servlet的副版本号。

java 复制代码
public class GetBaseInfoServlet extends HttpServlet {
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       this.doPost(req, resp);
   }

   @Override
   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //获取ServletContext对象
       ServletContext servletContext = this.getServletContext();
       //获取容器的基本信息
       String serverInfo = servletContext.getServerInfo();
       //获取容器所支持的主版本号
       int majorVersion = servletContext.getMajorVersion();
       //获取容器所支持的副版本号
       int minorVersion = servletContext.getMinorVersion();
       //设置响应编码
       resp.setContentType("text/plain;charset=utf-8");
       PrintWriter pw = resp.getWriter();
       pw.println("容器的基本信息:"+serverInfo);
       pw.println("容器所支持Servlet的版本号为:"+majorVersion+"."+minorVersion);
   }
}
xml 复制代码
    <servlet>
        <servlet-name>getBaseInfoServlet</servlet-name>
        <servlet-class>com.java.GetBaseInfoServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>getBaseInfoServlet</servlet-name>
        <url-pattern>/getBaseInfo.do</url-pattern>
    </servlet-mapping>
获取web.xml文件中的信息
xml 复制代码
<context-param>
  <param-name>key</param-name>
  <param-value>value</param-value>
</context-param>

servletContext.getInitParameter("key")

该方法可以读取web.xml文件中标签中的配置信息。

servletContext.getInitParameterNames()

该方法可以读取web.xml文件中所有param-name标签中的值。

xml 复制代码
    <context-param>
        <param-name>key1</param-name>
        <param-value>java1</param-value>
    </context-param>

    <context-param>
        <param-name>key2</param-name>
        <param-value>java2</param-value>
    </context-param>
java 复制代码
public class ContextReadInfoServlet extends HttpServlet {
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       this.doPost(req, resp);
   }

   @Override
   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //获取ServletContext对象
       ServletContext servletContext = this.getServletContext();
       //获取所有的<param-name>的值
       Enumeration<String> initParameterNames = servletContext.getInitParameterNames();
       PrintWriter pw = resp.getWriter();
       while (initParameterNames.hasMoreElements()){
           String name = initParameterNames.nextElement();
           String value = servletContext.getInitParameter(name);
           pw.println("name:"+name+" = value:"+value);
       }
       pw.flush();
       pw.close();
   }
}
xml 复制代码
	<servlet>
        <servlet-name>contextReadInfoServlet</servlet-name>
        <servlet-class>com.java.ContextReadInfoServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>contextReadInfoServlet</servlet-name>
        <url-pattern>/readInfo.do</url-pattern>
    </servlet-mapping>
    
全局容器

servletContext.setAttribute("key",ObjectValue)

向全局容器中存放数据。

servletContext.getAttribute("key")

从全局容器中获取数据。

servletContext.removeAttribute("key")

根据key删除全局容器中的value。

java 复制代码
public class GlobalContainerServlet extends HttpServlet {
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       this.doPost(req,resp);
   }

   @Override
   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //获取ServletContext对象
       ServletContext servletContext = this.getServletContext();
       String s1 = (String) servletContext.getAttribute("key1");
       String s2 = (String)servletContext.getAttribute("key2");
       PrintWriter pw=resp.getWriter();
       pw.println(s1);
       pw.println(s2);
       pw.flush();
       pw.close();
   }

   @Override
   public void init() throws ServletException {
       //获取ServletContext对象
       ServletContext servletContext = this.getServletContext();
       servletContext.setAttribute("key1","java1");
       servletContext.setAttribute("key2","java2");
   }
}

ServletContext对象生命周期

​ 当容器启动时会创建ServletContext对象并一直缓存该对象,直到容器关闭后该对象生命周期结束。ServletContext对象的生命周期非常长,所以在使用全局容器时不建议存放业务数据。

相关推荐
小羊没烦恼!5 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里5 天前
java中的继承和多态的区别
java
小羊没烦恼!5 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕5 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码5 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖5 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时5 天前
01-06-A-JVM排查实战详解
java·jvm
vipxieliang5 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
ba_pi5 天前
mysql 查询所有表名并授权
java
ProcessOn官方账号5 天前
java函数式编程--入门基础
java·编程·函数式编程