ServletContext常用方法

本文将介绍怎样使用ServletContext获取Tomcat初始化参数、记录日志和获取资源(文件)

ServletContext官方叫servlet上下文。服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象。所以叫全局应用程序共享对象。

ServletContext定义了servlet用于与其servlet容器通信的一组方法,例如:获取文件的MIME类型、分派请求或写入日志文件。

对于每个Java虚拟机,每个 “web应用程序”  都有一个上下文。“web应用程序”是安装在服务器URL名称空间的特定子集(如/catalog)下的servlet和内容的集合,可能通过.war文件安装。

ServletContext对象包含在ServletConfig对象中,当servlet初始化时,Web服务器提供servlet。

获取Tomcat的初始化参数

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);
}

记录Tomcat日志

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);
}
成熟不是人的心变老,而是泪在眼眶里打转还能微笑。
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号