ServletContext官方叫servlet上下文。服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象。所以叫全局应用程序共享对象。
ServletContext定义了servlet用于与其servlet容器通信的一组方法,例如:获取文件的MIME类型、分派请求或写入日志文件。
对于每个Java虚拟机,每个 “web应用程序” 都有一个上下文。“web应用程序”是安装在服务器URL名称空间的特定子集(如/catalog)下的servlet和内容的集合,可能通过.war文件安装。
ServletContext对象包含在ServletConfig对象中,当servlet初始化时,Web服务器提供servlet。
java.lang.String getInitParameter(java.lang.String name)
返回一个字符串,该字符串包含指定的上下文范围初始化参数的值,如果该参数不存在,则返回null。
java.util.Enumeration<java.lang.String> getInitParameterNames()
以字符串对象枚举的形式返回上下文的初始化参数的名称,如果上下文没有初始化参数,则返回空枚举。
boolean setInitParameter(java.lang.String name, java.lang.String value)
在这个ServletContext上使用给定的名称和值设置上下文初始化参数。
(1)获取Tomcat的server.xml中设置Context的初始化参数。例如:
<Context path="/servlet_demo01" docBase="..." privileged="true" antiResourceLocking="false" antiJARLocking="false" debug="0" reloadable="true"> <Parameter name="name" value="from server.xml file" /> </Context>
java代码:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext servletContext = req.getSession().getServletContext(); String val = servletContext.getInitParameter("name"); System.out.println("val=" + val); }
(2)获取在项目下的web.xml中设置Context的初始化参数。例如:
<context-param> <param-name>name</param-name> <param-value>from web.xml file</param-value> </context-param>
java代码:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext servletContext = req.getSession().getServletContext(); String val = servletContext.getInitParameter("name"); System.out.println("val=" + val); }
void log(java.lang.Exception exception, java.lang.String msg)
弃用,使用log(String message, Throwable throwable)替代。
void log(java.lang.String msg)
将指定的消息写入servlet日志文件,通常是事件日志。
void log(java.lang.String message, java.lang.Throwable throwable)
将指定的消息和异常堆栈信息写入到日志文件
在server.xml文件中,使用logger元素来设置日志文件。
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_log." suffix=".txt" timestamp="true"/>
java代码:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext servletContext = req.getSession().getServletContext(); servletContext.log("测试日志信息"); }
getResource(String parh)
其中path必须是/开头,代表当前web应用程序的根目录。返回的一个代表某个资源的URL对象。
getResoutceAsStream(String parh)
返回文件流。这个好处是可以使用相对于根目录的路径访问到web目录下的所有文件,而不必知道绝对路径。
例如:在WEB-INF下新建文件test.properties,内容为:
appName=servlet-test version=1.0.0
java代码:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext servletContext = req.getSession().getServletContext(); InputStream is = servletContext.getResourceAsStream("/WEB-INF/test.properties"); Properties prop = new Properties(); prop.load(is); String appName = prop.getProperty("appName"); String version = prop.getProperty("version"); System.out.println("appName = " + appName); System.out.println("version = " + version); }