• ServletContext


    概念

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


    1、setAttribute()、getAttribute()、removeAttribute()


    2、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

    3.getRequestDispatcher()

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


    4. 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:ideaWorkspaceservlet-demosrcmainwebapp

    5.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/

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

    6.getResourceAsStream()

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

    demo

    1、在/WEB-INF目录下创建一个test.properties文件

    name=zs
    age=18
    View Code

    2、新建一个servlet

    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;
    import java.io.InputStream;
    import java.util.Properties;
    
    @WebServlet(urlPatterns = "/hello", name = "hello")
    public class ServletDemo extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
            InputStream resourceAsStream = getServletContext().getResourceAsStream("/WEB-INF/test.properties");
            Properties properties = new Properties();
            properties.load(resourceAsStream);
            response.getWriter().println(properties.getProperty("name"));
            response.getWriter().println(properties.getProperty("age"));
        }
    }
    View Code

    3、访问http://127.0.0.1/hello,响应内容

    zs
    18

    扩展

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

  • 相关阅读:
    jsonp
    web系统中上下移动功能的实现
    重载的目的是什么
    重写和重载
    final和static
    static的应用
    shiro认证
    做阉割版Salesforce难成伟大的TOB企业
    Go语言在国产CPU平台上应用前景的探索与思考
    101 More Security Best Practices for Kubernetes
  • 原文地址:https://www.cnblogs.com/Mike_Chang/p/10059864.html
Copyright © 2020-2023  润新知