Servlet的基本使用2

1、ServletContext基本介绍(系统上下文)

ServletContext,即 servlet 上下文。服务器会为每一个工程创建一个对象,这个对象就是 ServletContext 对象,一个web应用对应一个ServletContext。一个Web服务器可以运行一个或多个WebApp,对于每个WebApp,Web服务器都会为其创建一个全局唯一的ServletContext实例。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象,所以叫全局应用程序共享对象。

 

1.1、servletContext的作用

servletContext 是一个域对象,它代表整个web应用,可以和程序的容器即服务器进行通信。ServletContext实例最大的作用就是设置和共享全局信息。servletContext 可以用于在不同动态资源(servlet)之间传递与共享数据,servletContext 可以共享所有用户所有请求的数据。该域对象在服务器启动时即创建,在服务器关闭时才销毁。

  1. 获取文件的 MIME 类型
  2. 域对象:共享数据
  3. 获取文件在服务器文件系统上的绝对文件路径
  4. 可以读取全局配置参数
  5. 可以搜索当前工程目录下面的资源文件
  6. 可以获取当前工程名字

凡是域对象都有如下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())

通过 servletContextObj.getRealPath(fileName) 可以虎获取文件在服务器文件系统上的绝对文件路径 。

比如说应用中有个JSP页面 index.jsp,调用 getRealPath("index.jsp"),则返回index.jsp文件在服务器文件系统中的绝对路径。在windows下或许是这样:D:\xxx\xxx\index.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 文件夹下。

 

posted @ 2021-04-14 18:48  wenxuehai  阅读(107)  评论(0编辑  收藏  举报
//右下角添加目录