1、ServletContext基本介绍(系统上下文)
ServletContext,即 servlet 上下文。服务器会为每一个工程创建一个对象,这个对象就是 ServletContext 对象,一个web应用对应一个ServletContext。一个Web服务器可以运行一个或多个WebApp,对于每个WebApp,Web服务器都会为其创建一个全局唯一的ServletContext
实例。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象,所以叫全局应用程序共享对象。
1.1、servletContext的作用
servletContext 是一个域对象,它代表整个web应用,可以和程序的容器即服务器进行通信。ServletContext
实例最大的作用就是设置和共享全局信息。servletContext 可以用于在不同动态资源(servlet)之间传递与共享数据,servletContext 可以共享所有用户所有请求的数据。该域对象在服务器启动时即创建,在服务器关闭时才销毁。
- 获取文件的 MIME 类型
- 域对象:共享数据
- 获取文件在服务器文件系统上的绝对文件路径
- 可以读取全局配置参数
- 可以搜索当前工程目录下面的资源文件
- 可以获取当前工程名字
凡是域对象都有如下3个方法:
2、servletContext的基本使用
获取 servletContext 对象:
publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //通过reque对象可以获取 request.getServletContext(); //直接通过 HttpServlet 获取也行。跟上面获取到的是同一个对象 //this.getServletContext(); }
2.1、获取文件的 MIME 类型(getMimeType())
servletContextObj.getMimeType(str) 方法返回文件的MIME类型。
publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = this.getServletContext(); //文件名称 String fileName = "a.jpg"; //获取MIME类型 String mimeType = context.getMimeType(fileName); }
MIME 类型是根据文件的后缀名来进行判断的,而且不同文件后缀名对应的 MIME 类型是在服务器内已经配置好的,比如我们可以在 tomcat 的安装目录下的 conf/web.xml 文件下看到配置信息,类似:
2.2、共享数据
servletContext 可以在整个服务器内共享数据,并且就算是不同用户的数据也能够共享。
存数据:
publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //往serlvetContext里面存数据 getServletContext().setAttribute("username", "admin"); }
在另一个servlet里可以获取数据,就算下面的 servlet 是另一用户访问的也可以获取到数据,因为 servletContext 的对象范围是所有用户所有请求的数据。
publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取ServletContext里面的用户名数据 String username = getServletContext().getAttribute("username"); }
2.3、获取文件在服务器文件系统上的绝对文件路径(getRealPath())
比如说应用中有个JSP页面 index.jsp,调用 getRealPath("index.jsp"),则返回index.jsp文件在服务器文件系统中的绝对路径。在windows下或许是这样:D:xxxxxxindex.jsp,在linux下或许是这样:/root/xxx/index.jsp。
运行结果:
比如:
getRealPath("/a.txt") 方法返回的是在 webcontent 目录下的文件在服务器的绝对路径;
getRealPath("/WEB-INF/a.txt") 方法返回的是在 webcontent/WEB-INF 目录下的文件在服务器的绝对路径;
getRealPath("/WEB-INF/classes/a.txt") 方法返回的是在 src 目录下的文件在服务器的绝对路径,因为在 src 下的文件经编译过后都将存放在项目根目录下的 WEB-INF/classes 文件夹下。