005_ServletContext

来源:互联网 发布:idc国际数据公司 编辑:程序博客网 时间:2024/05/18 17:59

ServletContext接口

  • Servlet引擎为每个WEB应用程序都创建一个对应的ServletContext对象,ServletContext对象被包含在ServletConfig对象中,调用ServletConfig.getServletContext方法可以返回ServletContext对象的引用。
  • 由于一个WEB应用程序中的所有Servlet都共享同一个ServletContext对象,所以,ServletContext对象被称之为 application 对象(Web应用程序对象)。
  • 功能:
    • 获取WEB应用程序的初始化参数
    • 记录日志
    • application域范围的属性
    • 访问资源文件
    • 获取虚拟路径所映射的本地路径
    • WEB应用程序之间的访问
    • ServletContext的其他方法

测试代码

package com.mac;import java.io.IOException; * ServletConfig对象:/* * ServletContext对象: *   *  1.获取当前web应用的初始化参数 *      1.1.方法: *          getInitParameter(String name) *          getInitParameterNames(),和ServletConfig里面的两个方法是一样的) *  .   1.2.通过ServletContext获取的初始化参数和通过ServletConfig获取的初始化参数的区别: *          ServletContext所获取的参数是在全局的,是所有Servlet都可以获取的 *          ServletConfig获取的参数在某个servlet-name下面的,只有这个Servlet可以获取到 *  2.获取当前的web应用(就是WebContent下面)的某个文件的绝对路径(在服务器上的路径) *      2.1.方法:getRealPath(String relativePath) *  3.获取当前Web应用的名称 *      3.1.方法:getContextPath() *  4.获取当前Web应用的某个文件的输入流 *      4.1.方法:getResourceAsStream(String filePath)  *  5.和Atttribute相关的方法,后面再写 */public class HelloServlet implements Servlet{    @Override    public void destroy() {        System.out.println("销毁Servlet对象~~~~");    }    @Override    public ServletConfig getServletConfig() {            System.out.println("获取Servlet配置~~~~");        return null;    }    @Override    public String getServletInfo() {        System.out.println("获取Servlet信息~~~~");        return null;    }    @Override    public void init(ServletConfig config) throws ServletException {        /*         * public ServletContext    getServletContext()         * 返回对调用者在其中执行操作的 ServletContext 的引用。         * return   一个 ServletContext 对象,调用者用于与其 servlet 容器交互         */        /*         * ServletContext对象:         * 定义一组方法,servlet 使用这些方法与其 servlet 容器进行通信,例如,获取文件的 MIME 类型、         * 分发请求或写入日志文件。每个 Java 虚拟机的每个“Web 应用程序”都有一个上下文。(“Web 应用程         * 序”是 servlet 和内容的 Collection,这些 servlet 和内容安装在服务器的 URL 名称空间         * (比如 /catalog)的特定子集下,并且可能通过 .war 文件安装。)         * 如果 Web 应用程序在其部署描述符中标记为 "distributed",那么每个虚拟机都将有一个上下文实例。         * 在这种情况下,不能将上下文用作共享全局信息的位置(因为该信息不会是真正全局共享的)。请使用外部资         * 源(如数据库)替代。         * ServletContext 对象包含在 ServletConfig 对象中,ServletConfig 对象在初始化 servlet 时         * 由 Web 服务器提供给 servlet。         */        //1.获取ServletContext对象        ServletContext servletContext = config.getServletContext();        //2.获取web初始化参数值(web.xml里面的 context-param下面的name和value)        String jdbcURL = servletContext.getInitParameter("jdbcURL");        String driver = servletContext.getInitParameter("driver");        System.out.println("-----------------------------------------");        System.out.println("driver: " + driver);        System.out.println("jdbcURL: " + jdbcURL);        System.out.println("-----------------------------------------");        //3.获取所有的param-name        Enumeration<String> initParameterNames = servletContext.getInitParameterNames();        while( initParameterNames.hasMoreElements() ) {            String name = initParameterNames.nextElement();            System.out.println("names: " + name);        }        System.out.println("-----------------------------------------");        /*         * public String    getRealPath(String path)         * 为给定虚拟路径返回包含实际路径的 String。         * 例如,可以通过对 "http://host/contextPath/index.html" 的请求使路径 "/index.html" 返回服务器文件系统上的         * 绝对文件路径,其中 contextPath 是此 ServletContext 的上下文路径。         * 将采用与正在其上运行 servlet 容器的计算机和操作系统相适应的形式返回实际路径         * (包括采用适当的路径分隔符)。如果 servlet 容器由于某种原因无法将虚拟路径转换为实际路径         * (例如正从 .war 归档文件中获得内容时),则此方法返回 null。         * path     指定虚拟路径的 String         * return   指定实际路径的 String,如果无法执行转换,则返回 null。         */        //4.获取当前的web应用(就是WebContent下面)的某个文件的绝对路径(在服务器上的路径)        String path = servletContext.getRealPath("test.txt");        System.out.println("test.txt: " + path);        //test.txt: /Users/mac/Documents/StudyWork/code/JavaWeb/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/005_ServletContext/test.txt        System.out.println("-----------------------------------------");        /*         * public String    getContextPath()         * 返回 Web 应用程序的上下文路径。         * 上下文路径是用来选择请求上下文的请求 URI 的一部分。请求 URI 中首先出现的总是上下文路径。         * 路径以 "/" 字符开头但不以 "/" 字符结束。对于默认(根)上下文中的 servlet,此方法返回 ""。         * servlet 容器可能通过多个上下文路径匹配一个上下文。在这种情况下,getContextPath() 将返回该请求         * 使用的实际上下文路径,它可能不同于此方法返回的路径。此方法返回的上下文路径应该被认为是应用程序的         * 主要或首选上下文路径。         * return   Web 应用程序的上下文路径;对于默认(根)上下文,返回 ""         */        //5.获取当前Web应用的名称        String webName = servletContext.getContextPath();        System.out.println("contextPath: " + webName);        // /003_FirstServlet        System.out.println("-----------------------------------------");        //6.获取当前web应用中的某个文件的输入流(根目录是当前web应用的目录,这里是/005_ServletContext)        InputStream is = servletContext.getResourceAsStream("/WEB-INF/classes/test.properties");            //注意,这里是实际路径上的,文件最后是放在classes下面的        //注意,classes虽然是在build下面,但是映射到WEB-INF下面的,可以这么访问        System.out.println("file: " + is);    }    @Override    public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {        System.out.println("Servlet服务~~~~");    }    public HelloServlet() {        System.out.println("构造器~~~~");    }}

运行结果

信息: Starting Servlet Engine: Apache Tomcat/7.0.81构造器~~~~-----------------------------------------driver: com.mysql.jdbc.DriverjdbcURL: jdbc:mysql:///test-----------------------------------------names: drivernames: jdbcURL-----------------------------------------test.txt: /Volumes/Study/code/JavaWeb/Course/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Course_005_ServletContext/test.txt-----------------------------------------contextPath: /003_FirstServlet-----------------------------------------file: java.io.FileInputStream@7443cf39十月 17, 2017 11:33:21 上午 org.apache.catalina.startup.TldConfig execute信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.构造器~~~~Servlet初始化~~~~参数: org.apache.catalina.core.StandardWrapperFacade@45887fe0十月 17, 2017 11:33:21 上午 org.apache.coyote.AbstractProtocol start信息: Starting ProtocolHandler ["http-bio-8080"]十月 17, 2017 11:33:21 上午 org.apache.coyote.AbstractProtocol start信息: Starting ProtocolHandler ["ajp-bio-8009"]十月 17, 2017 11:33:21 上午 org.apache.catalina.startup.Catalina start信息: Server startup in 627 msServlet服务~~~~

完整源码下载:

关注下方微信公众号,并回复:ServletContext.code

欢迎加入交流群:451826376

更多信息:www.itcourse.top

完整教程PDF版本下载

原创粉丝点击