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
阅读全文
0 0
- 005_ServletContext
- 21_ServletContext补充
- 我的学习之路_第三十一章_servletContext
- 005
- 005
- 005
- 005
- 005
- 005
- 005
- 005
- 005
- 005
- SDAUP 005
- OOAD-005
- 042-005
- 005 Apology
- ocp-005
- python实现的个人税后工资计算器
- java static volatile
- JAVA FTPClient——远程文件操作
- CSS书写规范
- web.xml配置之<context-param>、 </init-param>详解
- 005_ServletContext
- 作业帮从科普切入,能否成K12在线教育的一支奇兵?
- 丛林战争项目一之TCP客户端、服务端的编写
- Command `run-android(ios)` unrecognized.
- 定销房概念扫盲
- 从零开始学 Java
- CuteFTP、FlashFXP、FileZilla 基本应用比较
- oracle datetime 时间类型比较
- 【leetcode_easy】104-MaximumDepthofBinaryTree