zoukankan      html  css  js  c++  java
  • JavaWeb 之 ServletContext 接口

    一、ServletContext 接口

      1、ServletContext 是什么

        (1)ServletContext 是一个接口,它表示 Servlet 上下文对象(可以和程序的容器(服务器)来通信);

        (2)一个 web 工程, 只有一个 ServletContext 对象实例;

        (3)ServletContext 对象是一个域对象;

        (4)ServletContext 是在 web 工程部署启动的时候创建。 在 web 工程停止的时候销毁

      2、域对象

        域对象:就是类似于 Map,可以在里面存取数据,叫域对象。

        域对象的范围:指的是 存取数据的操作范围。

        ServletContext 范围:整个 Web 工程。

    二、获取 ServletContext 对象

      1、通过 ServletConfig 获取

        方法:

    ServletContext servletContext = getServletConfig().getServletContext();

      2、通过ServletRequest及其子类获取

        方法:

    ServletRequest req = (ServletRequest)request;                    //强转成 ServletRequest 获取
    ServletContext servletContext3 = req.getServletContext();
    ServletContext servletContext5 = request.getServletContext();    //通过 HttpServletRequest 获取

      3、通过 getServletContext() 方法获取

        直接调用该方法,其实是 GenericServlet 类中的方法,其本质还是通过 ServletConfig 对象获取的

    ServletContext servletContext = getServletContext();
    

    三、功能作用

      1、获取 web.xml 中配置的 上下文参数 context-param

     1 //web.xml配置
     2 <!--context-param 是上下文参数(它属于整个 web 工程)-->
     3     <context-param>
     4     <param-name>username</param-name>
     5 <param-value>context</param-value>
     6 </context-param>
     7 <!--context-param 是上下文参数(它属于整个 web 工程)-->
     8 <context-param>
     9     <param-name>password</param-name>
    10     <param-value>root</param-value>
    11 </context-param>
    12   //获取参数的 方法
    13   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    14         // 获取 web.xml 中配置的上下文参数 context-param
    15         ServletContext context = getServletConfig().getServletContext();
    16         String username = context.getInitParameter("username");
    17         System.out.println("context-param 参数 username 的值是:" + username);
    18         System.out.println("context-param 参数 password 的值是:" + context.getInitParameter("password"));
    19     }

        注意:

          ① <context-param> 标签要书写在 <web-app> 里面,<servlet>的外面;

          ② 这里配置的参数是为整个 web 工程配置的,对所有的 servlet 都有效;而之前 <init-param> 为某一个servlet单独配置的,注意区分;

      2、域对象:存取数据

        (1)setAttribute(String name,Object value);   存储数据

        (2)getAttribute(String name);   获取数据

        (3)removeAttribute(String name);  移除数据

         ServletContent 对象范围:所有用户所有请求的数据(谨慎使用)

         Demo:

     1 // ContextServlet1
     2 public class ContextServlet1 extends HttpServlet {
     3     protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException {
     4          5         // 获取 ServletContext 对象
     6         ServletContext context = getServletContext();
     7         System.out.println(context);
     8         System.out.println("保存之前: Context1 获取 key1 的值是:" + context.getAttribute("key1"));
     9         context.setAttribute("key1", "value1");
    10         System.out.println("Context1 中获取域数据 key1 的值是:" + context.getAttribute("key1"));
    11     }
    12 }
    13 // ContextServlet2
    14 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
    15     ServletContext context = getServletContext();System.out.println(context);
    16     System.out.println("Context2 中获取域数据 key1 的值是:"+ context.getAttribute("key1"));
    17 }

      3、获取当前的工程路径(虚拟路径):格式:/工程路径

        获取当前工程的路径(虚拟路径),格式:/工程路径

    String contextPath = getServletContext().getContextPath();

      4、获取工程部署后在服务器硬盘上的绝对路径(真实路径)

        获取工程绝对路径(真实路径)

    String realPath = getServletContext().getRealPath("/");
    

              Demo:

     1 // 获取工程部署后在服务器硬盘上的绝对路径(真实路径)
     2 /**
     3 * / 斜杠被服务器解析地址为:http://ip:port/工程名/ 映射到 IDEA/eclipse 代码的 web 目录
     4 */
     5 System.out.println("工程部署的路径是:" + context.getRealPath("/"));
     6 System.out.println("工程下 css 目录的绝对路径是:" + context.getRealPath("/css"));
     7 System.out.println("工程下 imgs 目录 1.jpg 的绝对路径是:" + context.getRealPath("/imgs/1.jpg"));
     8 
     9 String b = context.getRealPath("/b.txt");//web目录下资源访问
    10 String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目录下的资源访问
    11 String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目录下的资源访问

      5、获取MIME类型

        MIME 类型:在互联网通信过程中定义的一种文件数据类型。

        格式:

    大类型/小类型;   如:text/html、image/jpeg 等
    

         获取一个文件的 MIME类型

    String mimeType = getServletContext().getMimeType(String fileName);

      

     

     

  • 相关阅读:
    Docker+Nginx 部署Vue+Element前端项目
    MySql取字段逗号分隔的第一个
    Mysql数据库中从表字段中存储了主表以逗号隔开的主键ID,现需求查询从表数据以及以逗号隔开的字段改为主表名称隔开(group_count() find_in_set())
    IIS 错误500.21解决方法
    IIS 出现500.19 错误处理解决方式
    Linux中vim的三种模式
    Centos7 .Net Core 使用Supervisor守护进程,进行后台运行
    Nginx反代理ASP.NET Core项目
    C# vb .net实现圆角矩形特效滤镜
    C# vb .net实现旋转特效滤镜
  • 原文地址:https://www.cnblogs.com/niujifei/p/11620266.html
Copyright © 2011-2022 走看看