zoukankan      html  css  js  c++  java
  • ServeletContext对象的获取及其作用

    官方对ServeletContext的解释是定义了一组可以使servelet和web容器通信的方法。

    也就是servelet对象可以通过serveletcontext对象与web容器进行交互。

    接下来讲解ServeletContext的获取及其作用

    • 获取:(两种方法)

      1. 通过request对象获取:request.getServletContext();
      2. 通过当前类获取:this.getServletContext();

    注意:无论通过哪种方式我们获得的ServeletContext对象是同一个对象。

    • 作用:

      1. 获取文件对应的MIME类型
      2. 获取文件的真实路径(真实路径是部署在服务器上的文件路径,也就是真实访问的路径)
      3. 在整个web项目中共享数据

    演示:

    1. 获取文件对应的MIME类型:

    代码:

    @WebServlet("/servlet01")
    public class Servlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //获取ServeletContext对象
            ServletContext context = this.getServletContext();
            String s="a.txt";
            //获取对应的MIME类型
            String mimeType = context.getMimeType(s);
            System.out.println(mimeType);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doPost(request, response);
        }
    }

    结果:

        2.获取文件的真实路径(真实路径是部署在服务器上的文件路径,也就是真实访问的路径)

    • 首先我们先分别在src,web,WEB-INF下分别创建a.txt,b.txt,c.txt文件

     然后获得它们部署在服务器中的真实路径:

    代码:

    @WebServlet("/servlet01")
    public class Servlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //获取ServeletContext对象
            ServletContext context = this.getServletContext();
        //获取b.txt文件的真实路径:
            String brealPath = context.getRealPath("/b.txt");
            System.out.println("b.txt的真实路径是:"+brealPath);
            //获取c.txt文件的真实路径:
            String crealPath = context.getRealPath("/WEB-INF/c.txt");
            System.out.println("c.txt的真实路径是:"+crealPath);
            //获取a.txt文件的真实路径:
            String arealPath = context.getRealPath("/WEB-INF/classes/a.txt");
            System.out.println("a.txt的真实路径是:"+arealPath);
    
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doPost(request, response);
        }
    }

    结果:

    注意:

    src下的文件在项目中部署的真实路径在WEB-INF下的classes文件下(src相当于classes)

        3.在整个web项目中共享数据

    ServeletContext对象的作用域是整个项目:

    代码:

    @WebServlet("/servlet01")
    public class Servlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //获取ServeletContext对象
            ServletContext context = this.getServletContext();
            context.setAttribute("name", "zhangsan");
    
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doPost(request, response);
        }
    }

    在资源类2中打开另一个浏览器模拟另一个用户获取:

    @WebServlet("/servlet02")
    public class Servlet02 extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String name = (String) request.getServletContext().getAttribute("name");//在另一个资源类中获取
            System.out.println(name);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doPost(request, response);
        }
    }

    结果:



      

    迎风少年
  • 相关阅读:
    【转】MyEclipse快捷键大全
    【转】MOCK测试
    【转】万亿移动支付产业的难点和痛点
    【转】【CTO俱乐部走进支付宝】探索支付宝背后的那些技术 部分
    CTO俱乐部
    tomcat修改默认端口
    VS2013试用期结束后如何激活
    项目中遇到的 linq datatable select
    LINQ系列:LINQ to DataSet的DataTable操作
    C#中毫米与像素的换算方法
  • 原文地址:https://www.cnblogs.com/ZYH-coder0927/p/13671735.html
Copyright © 2011-2022 走看看