ServletContext对象

Posted Vodka~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ServletContext对象相关的知识,希望对你有一定的参考价值。

1.每一个web应用都有且仅有一个ServletContext对象,又称Application对象,在web容器启动时,会为每一个web应用程序创建一个对应的ServletContext对象。

2.作用:
-作为域用来共享数据,此时数据在整个应用程序中共享;
-该对象保存了当前应用程序的相关信息,例如可以通过
getServerInfo() ; 获取当前服务器信息;
getRealPath(String path); 获取资源的真实路径等等

package com.StartSL;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author Vodka
 * @date 2021/08//17:32
 */
@WebServlet(urlPatterns = {"/One","/Two"})
public class SLC extends HttpServlet {
     @Override
    protected void  service(HttpServletRequest req, HttpServletResponse res){
         //获取ServletContext对象的途径有很多
         //1.request对象获取
         ServletContext scOne = req.getServletContext();

         //2.通过session对象获取
         ServletContext scTwo = req.getSession().getServletContext();

         //3.通过servletConfig 对象获取,在Servlet标准中提供了ServletConfig 方法
         ServletConfig scf = getServletConfig();
         ServletContext scThree = scf.getServletContext();

         //4.直接获取
         ServletContext scFour = getServletContext();

         //常用方法
//         1.获取服务器版本信息
         String ServerInfo = req.getServletContext().getServerInfo();
         System.out.println("当前服务器版本信息:" + ServerInfo);
//       2.获取项目的真实路径
         String realPath = req.getServletContext().getRealPath("/");
         System.out.println("项目的真实路径:"+realPath);
     }

}

3.ServletContext域对象
-ServletContext 可以当做域对象来使用,通过向ServletContext中存数据,可以使得整个应用程序共享某些数据,不建议寸法过多数据,因为ServletContext中的数据一旦存储进去,若不手动删除,将会一直保存。

package com.StartSL;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;

/**
 * @author Vodka
 * @date 2021/08//17:32
 */
@WebServlet(urlPatterns = {"/scMain"})
public class SLC extends HttpServlet {
     @Override
    protected void  service(HttpServletRequest req, HttpServletResponse res){
        //获取ServletContext域对象
         ServletContext sc = getServletContext();
         //设置ServletContext对象的属性
         ArrayList<String> Quality = new ArrayList<>();
         Quality.add("Middle");
         Quality.add("Wrong");
         Quality.add("Excellent");
         sc.setAttribute("Qualities",Quality);
         System.out.println("Qualities 已经存储进ServletContext对象");

     }

}



package com.StartSL;
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;

/**
 * @author Vodka
 * @date 2021/08//0:03
 */
@WebServlet(urlPatterns={"/scOne"})
public class SCOne extends HttpServlet{
    @Override
    protected void  service(HttpServletRequest req, HttpServletResponse res){
        //以scOne连接访问时,获取ServletContext域对象,并获取内容
        ServletContext sc =  getServletContext();
        ArrayList<String> Qualities = (ArrayList<String>) sc.getAttribute("Qualities");
        System.out.println("scOne获取到域对象的内容为:"+ Qualities);
    }
}





package com.StartSL;
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;

/**
 * @author Vodka
 * @date 2021/08//0:06
 */
@WebServlet(urlPatterns={"/scTwo"})
public class SCTwo extends HttpServlet {
    @Override
    protected void  service(HttpServletRequest req, HttpServletResponse res){
        //以scTwo连接访问时,获取ServletContext域对象,并获取内容
        ServletContext sc =  getServletContext();
        ArrayList<String> Qualities = (ArrayList<String>) sc.getAttribute("Qualities");
        System.out.println("scTwo获取到域对象的内容为:"+ Qualities);
    }
}
/*
在/scMain设置好ServletContext对象的内容后,分别访问/scTwo,/scOne再获取ServletContext得到的结果
Qualities 已经存储进ServletContext对象
scTwo获取到域对象的内容为:[Middle, Wrong, Excellent]
scOne获取到域对象的内容为:[Middle, Wrong, Excellent]
*/

4.ServletContext 的三大域对象:
1.request域对象:在一次请求中有效,请求转发有效,重定向失效。
2.session域对象:在一次会话中有效,请求转发和重定向都有效,session销毁后失效。
3.servletContext域对象: 整个应用程序有效,服务器关闭后失效。

以上是关于ServletContext对象的主要内容,如果未能解决你的问题,请参考以下文章

JAVA语言中用于投票器的代码如何写

servlet开发之ServletContext

在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法

三:ServletContext对象

ServletContext对象

在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法