码迷,mamicode.com
首页 > 其他好文 > 详细

ServletContext

时间:2018-12-03 20:12:48      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:ica   工程   vax   display   schema   pac   图片   应用程序   context   

概念

  ServletContext本身的名称令人有点困惑,因为它以Servlet作为开头,容易被误认为仅是单一Servlet的代表对象。事实上,当整个Web应用程序加载Web容器之后,容器会生成一个ServletContext对象作为整个应用程序的代表。


1、getInitParameter()

技术分享图片
<?xml version="1.1" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
              http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
  <display-name>Archetype Created Web Application</display-name>

  <context-param>
    <param-name>contextParam</param-name>
    <param-value>demo</param-value>
  </context-param>

</web-app>
xml Code
技术分享图片
package com.test;

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(urlPatterns = "/hello", name = "hello")
public class ServletDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String value = getServletContext().getInitParameter("contextParam");
        response.getWriter().println(value);
    }
}
java Code 

响应结果

demo

2.getRequestDispatcher()

  使用 ServletContext 取得RequestDispatcher实例,使用时路径必须以“/”开头,这个斜杠代表应用程序环境根目录。
  以“/”开头称为环境相对路径,没有以“/”作为开头则称为请求相对路径。
  实际上HttpServletRequest的getRequestDispatcher()方法在实现时,若是环境相对路径,则直接委托给ServletContext的getRequestDispatcher();若是请求相对路径,则转换为环境相对路径,再委托给ServletContext的getRequestDispatcher()


3. getRealPath()

  获取的是当前工程部署到服务器中的绝对磁盘路径。

package com.test;

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(urlPatterns = "/hello", name = "hello")
public class ServletDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.getWriter().println(getServletContext().getRealPath("/"));
    }
}

响应结果

E:\ideaWorkspace\servlet-demo\src\main\webapp\

4.getResourcePaths()

  如果想要知道Web应用程序的某个目录中有哪些文件,则可以使用getResourcePaths()方法。

技术分享图片
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        for (String resourcePath : getServletContext().getResourcePaths("/")) {
            response.getWriter().println(resourcePath);
        }
    }
View Code 

响应结果

/index.jsp
/WEB-INF/

如果是个目录,则会以“/”作结尾。

5.getResourceAsStream()

  如果想在Web应用程序中读取某个文件的内容,则可以使用getResourceAsStream()方法。使用时指定路径必须以“/”作为开头,表示相对于应用程序环境根目录,或者相对是/WEB-INF/lib中JAR文件里META- INF/resources的路径,运行结果会返回InputStream实例,接着就可以运用它来读取文件内容。

  你也许会想到使用java.io下的File、FileReader、FileInputStream等与文件读取相关的类。使用这些类时,可以指定绝对路径或相对路径。绝对路径自然是指文件在服务器上的真实路径。必须注意的是,用相对路径时,此时的路径不是相对于Web应用程序根目录,而是相对于启动Web容器时的命令执行目录,这是许多初学者都会有的误解。
  以Tomcat来说,若在Servlet中执行以下语句:out.println(new File("filename").getAbsolutePath());则会显示filename是位于Tomcat目录下的bin目录中,例如:
  C:\Program Files\Apache Software Foundation\Apache Tomcat 7.0.8\bin\filename

ServletContext

标签:ica   工程   vax   display   schema   pac   图片   应用程序   context   

原文地址:https://www.cnblogs.com/Mike_Chang/p/10059864.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!