全局域对象ServletContext

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.File;
import java.io.IOException;

@WebServlet("/ServletContextDemo")
public class TestServletContextOServlet extends HttpServlet {
    
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        //获取web应用的全局域对象
        ServletContext servletContext = req.getServletContext();
        ServletContext servletContext1 = this.getServletContext();
        System.out.println(servletContext+"/"+servletContext1);
        //org.apache.catalina.core.ApplicationContextFacade@7b4a2189/
        //org.apache.catalina.core.ApplicationContextFacade@7b4a2189

        /*
        * 以上就是获取ServletContext对象的两种方法
        * 说明该对象可以在req中获取也可以在资源本身获取
        * */

        System.out.println("-------------------------------------------------------------------------------------------------");


        //context-type: 服务器告诉浏览器本次响应消息的响应体的数据格式以及编码格式
        /*
        * 通过对resp的学习可知
        * 服务器能在响应信息的响应头中
        * 设置响应体消息的数据格式以及编码格式
        * 那么响应体的数据格式是什么呢
        * 默认情况下是
        * text/html
        *
        * 这里要了解一个概念
        * 什么是Mime类型
        * 格式就是
        * 大类型/小类型
        * 例如text/html image/jpg
        * 可见mime类型就是泛指所有的响应体的数据格式
        *
        * ServletContext对象的功能之一就是能够获取mime类型
        * */
        String filename = "a.jpg";
        String mimeType = servletContext.getMimeType(filename);
        System.out.println(mimeType);


        /*以上就是Servletcontext的第一个功能: 获取mime类型*/
        System.out.println("-------------------------------------------------------------------------------------------------");

        /*void setAtribute(String name, Object object);   存储数据
          Object getAttribute(String name);   通过键获取值
          void removeAttribute(String name);  移除一个键值对
          作为范围最大的域对象
          自然少不了共享数据的功能

          这个域对象共享的是所有用户的所有请求的数据
          这个对象要谨慎使用
         */
        System.out.println("-------------------------------------------------------------------------------------------------");

        /*ServletContext对象最后一个功能就是
        * 可以很方便的获取web应用中的资源的地址
        *
        * 说到地址
        * 首先要了解一些概念
        * 什么是绝对地址
        * 什么是相对地址
        * 什么是本地项目文件的地址
        * 什么是服务器资源地址
        *
        *
        * Servletcontext对象正好可以十分方便的获取到资源的服务器路径
        * 使用getRealPath(String 本地项目文件路径)
        *
        * 以获取一个配置文件为例
        * 在一个EE项目中
        * 文件存放的位置有一下三个位置
        * 一个是src下
        * 一个是web目录下
        * 一个是web的WEB-INF目录下
        *
        *
        **/
        String a = servletContext.getRealPath("/WEB-INF/classes/a.xml");    //D:\IdeaProjects\88\out\artifacts\816_ServletContext_war_exploded\WEB-INF\classes\a.xml
        String b = servletContext.getRealPath("/b.xml");    //D:\IdeaProjects\88\out\artifacts\816_ServletContext_war_exploded\b.xml
        String c = servletContext.getRealPath("/WEB-INF/c.xml");    //D:\IdeaProjects\88\out\artifacts\816_ServletContext_war_exploded\WEB-INF\c.xml

        System.out.println(a);
        System.out.println(b);
        System.out.println(c);


    }
}

猜你喜欢

转载自blog.csdn.net/weixin_45032905/article/details/121855833