22、ServletContext对象简介

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

发布了285 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/l0510402015/article/details/104760595