ServletContext对象

Posted 苦瓜爆炒牛肉

tags:

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

1.什么是ServletContext对象?

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

 

2.如果创建ServletContext对象?

(1)Request对象调用getServletContext()方法。

(2)HttpServlet对象调用getServletContext()方法。

示例:

public class ServletDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context1 = req.getServletContext();
        ServletContext context2 = this.getServletContext();
        System.out.println(context1 == context2);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}

// 输出结果:
true

 

3.ServletContext对象有什么用?

(1)获取MIME类型    String getMimeType(String file)

什么是MIME类型?

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

格式: 大类型/小类型   text/html        image/jpeg

 

(2)域对象:共享数据(范围:所有用户所有请求的数据)

1. setAttribute(String name,Object value)
2. getAttribute(String name)
3. removeAttribute(String name)

 

(3)获取文件的真实(服务器)路径

说到服务器目录,就先要说一下我们的本地工作目录。

当我们打开IDEA的时候,工作目录是这样的:

但是Tomcat并不是根据这些文件运行的。他根据的是~/桌面/JavaTemp/Demo2/out/artifacts/Demo2_war_exploded/这个目录的文件去运行的!同时这个目录也对应着项目URL的虚拟目录!

这个目录下的文件路径如下:

Demo2_war_exploded/
├── c.txt
├── index.jsp
└── WEB-INF

    ├── libs
    ├── b.txt
    └── classes
        ├── a.txt
        └── com
            └── chichung
                └── web
                    └── ServletDemo1.class
所以在指定文件目录时要按照服务器的路径来指定,不能根据我们的工作目录来指定!

ServletContext对象可以获取文件的真实路径,也就是服务器的路径。

方法:String getRealPath(String path)

示例:

@WebServlet("/servletdemo1")
public class ServletDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context1 = req.getServletContext();

        String c = context1.getRealPath("/c.txt");
        System.out.println(c);

        String b = context1.getRealPath("/WEB-INF/b.txt");
        System.out.println(b);

        String a = context1.getRealPath("/WEB-INF/classes/a.txt");
        System.out.println(a);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}

// 输出结果:
/home/chichung/桌面/JavaTemp/Demo2/out/artifacts/Demo2_war_exploded/c.txt
/home/chichung/桌面/JavaTemp/Demo2/out/artifacts/Demo2_war_exploded/WEB-INF/b.txt
/home/chichung/桌面/JavaTemp/Demo2/out/artifacts/Demo2_war_exploded/WEB-INF/classes/a.txt

 

4.可以获取当前工程的虚拟路径(最重要!!!)

String  getContextPath()

 在我们写路径时,虚拟路径部分用这个替代,如果以后更改虚拟路径就不用一个一个来替换了!

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

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

servlet开发之ServletContext

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

三:ServletContext对象

ServletContext对象

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