ServletContext

Github:servletContext_demo

一. 概念

代表整个 web 应用,可以和程序的容器(服务器)通信。

二. 获取

  • 通过 request 对象获取:request.getServletContext();
  • 通过 HttpServlet 获取:this.getServletContext();
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;

/**
 * 获取 ServletContext 对象
 */
@WebServlet("/servletContextDemo1")
public class ServletContextDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 通过 request 对象获取 ServletContext
        ServletContext context1 = request.getServletContext();
        // 通过 HttpServlet 获取 ServletContext
        ServletContext context2 = this.getServletContext();

        System.out.println(context1);
        System.out.println(context2);
        System.out.println(context1 == context2); 
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

三. 功能

1. 获取 MIME 类型

  • MIME 类型:在互联网通信过程中定义的一种文件数据类型
    • 格式:大类型/小类型,e.g. text/html、image/jpeg
  • 获取:String getMimeType(String file)
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;

/**
 * 获取 MIME 类型
 */
@WebServlet("/servletContextDemo2")
public class ServletContextDemo2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1. 通过 HttpServlet 获取 ServletContext
        ServletContext context = this.getServletContext();

        // 2. 定义文件名称
        String filename = "a.jpg";

        // 3. 获取 MIME 类型
        String mimeType = context.getMimeType(filename);
        System.out.println(mimeType);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

2. 域对象:共享数据

  • 方法
    • setAttribute(String name, Object value)
    • getAttribute(String name)
    • removeAttribute(String name)
  • ServletContext 对象范围:所有用户所有请求的数据(范围大,所以要谨慎使用 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.IOException;

/**
 * 域对象:共享数据
 */
@WebServlet("/servletContextDemo3")
public class ServletContextDemo3 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 通过 HttpServlet 获取 ServletContext
        ServletContext context = this.getServletContext();

        // 设置数据
        context.setAttribute("msg", "hello");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
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("/servletContextDemo4")
public class ServletContextDemo4 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 通过 HttpServlet 获取 ServletContext
        ServletContext context = this.getServletContext();

        // 获取数据
        System.out.println(context.getAttribute("msg"));
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

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

  • String getRealPath(String path)
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("/servletContextDemo5")
public class ServletContextDemo5 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 通过 HttpServlet 获取 ServletContext
        ServletContext context = this.getServletContext();

        // 获取文件的真实(服务器)路径
        String realPathA = context.getRealPath("/WEB-INF/classes/a.txt"); // src 目录下的资源路径
        System.out.println(realPathA);
        String realPathB = context.getRealPath("/b.txt"); // web 目录下的资源路径
        System.out.println(realPathB);
        // File file = new File(realPath);
        String realPathC = context.getRealPath("/WEB-INF/c.txt"); // web -> WEB-INF 目录下的资源路径
        System.out.println(realPathC);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
// Output
/Users/hjplz/idea-workspace/servletContext_demo/out/artifacts/servletContext_demo_war_exploded/WEB-INF/classes/a.txt
/Users/hjplz/idea-workspace/servletContext_demo/out/artifacts/servletContext_demo_war_exploded/b.txt
/Users/hjplz/idea-workspace/servletContext_demo/out/artifacts/servletContext_demo_war_exploded/WEB-INF/c.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值