ServletContext对象:
1. 概念:代表整个web应用,可以和程序的容器(服务器)来通信
2. 获取:
(1)通过request对象获取
request.getServletContext();
(2)通过HttpServlet获取。
this.getServletContext();
(3)注意:
* 每个web工程都只有一个ServletContext对象,所以在哪里获得的ServletContext对象都是同一个.
* ServletContext在服务器启动时,会为托管的每一个web应用程序,创建一个ServletContext对象;从服务器移除托管或者关闭服务器时销毁.
* 一个web应用由多个web资源组成(静态的+动态的),组成web应用的这些文件通常用一个目录组织,这个目录叫做web应用所在目录,如下:
* html、css、js文件
* Jsp文件、java程序、支持jar包
* 配置文件等等
3. 功能:
1. 获取MIME类型:
* MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。
* 格式: 大类型/小类型 text/html image/jpeg
* 获取:String getMimeType(String file)
2. 域对象:共享数据
1. setAttribute(String name,Object value)
2. getAttribute(String name)
3. removeAttribute(String name)
* ServletContext对象范围:所有用户所有请求的数据,不同用户打开浏览器访问都是公用这个对象,所以使用该对象共享数据要慎重。
*
3. 获取文件的真实(服务器)路径
(1)说明:一个WEB项目会存放在网络服务器(比如tomcat)中和本地工作空间中,我们说的都是访问网络服务器。比如我们项目放在E盘下,tomcat是在D盘,我们获取的文件 路径会是D盘的路径。
(2)方法:String getRealPath(String path)
String b = context.getRealPath("/b.txt");//web目录下资源访问
System.out.println(b);
String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目录下的资源访问
System.out.println(c);
String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目录下的资源访问
System.out.println(a);
举例:
获取文件的真实路径
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/contextDemo2")
public class contextDemo2 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext sc = req.getServletContext();
//web目录下的的资源访问---个人感觉web就是根目录
String aPath = sc.getRealPath("a.txt");
File file = new File(aPath);// 要获取绝对路径名File,所以需要去获取绝对路径
System.out.println(aPath);
//web/WEB-INF目录下文件的获取真实路径方法
String bPath = sc.getRealPath("WEB-INF/b.txt");
System.out.println(bPath);
//src一般用来存放java目录程序,但是实际在tomcat服务器里会将src的文件和文件夹放到web/WEB-INF/classes目录下
String cPath = sc.getRealPath("/WEB-INF/classes/c.txt");
System.out.println(cPath);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
输出:
E:\JAVA_WORK\ideaprojects3\out\artifacts\Day25Demo_war_exploded\a.txt
E:\JAVA_WORK\ideaprojects3\out\artifacts\Day25Demo_war_exploded\WEB-INF\b.txt
E:\JAVA_WORK\ideaprojects3\out\artifacts\Day25Demo_war_exploded\WEB-INF\classes\c.txt