4.ServletConfig和ServletContext

1.ServletConfig接口

在Servlet运行期间,经常需要一些辅助信息,例如,文件使用的编码,使用Servlet程序的公司等,这些信息可以在web.xml文件中使用一个或多个<init-param>元素进行配置。

<init-param>
     <param-name>encoding</param-name>
     <param-value>utf-8</param-value>
</init-param> 

当Tomcat初始化一个Servlet时,会将该Servlet的配置信息封装到一个ServletConfig对象中。

1.1 ServletConfig接口的常用方法

String getServletName() :返回Servlet的名字,即web.xml中<servlet-name>元素的值
ServletContext getServletContext():返回一个代表当前Web应用的ServletContext对象
Enumeration getInitParameterNames():返回一个Enumeration对象,其中包含了所有的初始化参数名
String getInitParameter(String name):根据初始化参数名返回对应的初始化参数值

1.2 案例:TestServlet02.java:获得Servlet配置下的<init-param>的配置参数

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {    
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();    
//获得ServletConfig对象
        ServletConfig config=this.getServletConfig();    
//获得参数名为sname的参数值
        String sname=config.getInitParameter("sname");            
        out.println("sname:"+sname);
        out.flush();
        out.close();
    }

web.xml中<init-param>:

<init-param>
     <param-name>sname</param-name>
     <param-value>zhangsan</param-value>
</init-param>

2.ServletContext接口

Servlet启动时,会为每个Web应用创建一个唯一的ServletContext对象代表当前Web应用,该对象不仅封装了当前Web应用的所有信息,而且实现了多个Servlet之间数据的共享。

2.1 任务:获取web应用程序的初始化参数

1.在web.xml中输入配置信息:

<context-param>
        <param-name>address</param-name>
        <param-value>liaocheng</param-value>
 </context-param>

这个配置信息可以在servlet配置外。
2.在Servlet中读取该配置信息

 response.setContentType("text/html");

        PrintWriter out = response.getWriter();

        //得到ServletContext对象

        ServletContext servletContext=this.getServletContext();

        //取得参数为address的配置信息值

        String address=(String)servletContext.getInitParameter("address");

        out.println("address:"+address);

        out.flush();

        out.close();

3.实现多个Servlet对象共享数据

一个Web应用中的所有Servlet共享同一个ServletContext对象,因此ServletContext对象的域属性可以被该Web应用中的所有Servlet访问。
案例:
1.创建TestServlet04,在该Servlet中设置属性值name为zhangsan

ServletContext servletContext=this.getServletContext();
  //通过setAttribute()方法设置属性值
 servletContext.setAttribute("name","zhangsan");

2.创建TestServlet05,在该Servlet中获取TestServlet04中设置的属性值name

PrintWriter out=response.getWriter();
  ServletContext servletContext=this.getServletContext();
//通过getAttribute()方法获取属性值
 String data=(String) servletContext.getAttribute("name");
 out.println(data);

4.读取Web应用下的资源

在实际开发中,有时候可能会需要读取Web应用中的一些资源文件,比如配置文件、图片等。为此,在ServletContext接口中定义了一些读取Web资源的方法,这些方法是依靠Servlet容器来实现的。Servlet容器根据资源文件相对于Web应用的路径,返回关联资源文件的IO流、资源文件在文件系统的绝对路径等。
在这里插入图片描述

案例:使用ServletContext对象读取资源文件(直接获取输入流对象)

4.1直接获取输入流对象

(1)创建资源文件。在src目录下创建资源文件myfile.properties
文件内容如下:
Company=lctvu
Address=liaocheng
(2)编写读取myfile.properties的Servlet类

response.setContentType("text/html;charset=utf-8");
    ServletContext servletContext=this.getServletContext();
    PrintWriter out=response.getWriter();
    //获取相对路径中的输入流对象
    InputStream in=servletContext.getResourceAsStream("/WEB-INF/classes/myfile.properties");
    Properties properties=new Properties();
    properties.load(in);
    out.println("Company="+properties.getProperty("Company")+"<br/>");
    out.println("Address="+properties.getProperty("Address")+"<br />");

需要注意的是,src目录下创建的资源文件在tomcat服务器启动时会被复制到项目的WEB-INF/classes目录下

(3)访问Servlet
在这里插入图片描述

4.2 根据文件绝对路径获取输入流

上例中的获取输入流对象

InputStream in=servletContext.getResourceAsStream("/WEB-INF/classes/myfile.properties");
可以拆分为:
String path=servletContext.getRealPath("/WEB-INF/classes/myfile.properties");
FileInputStream in=new FileInputStream(path);

5.资源文件在不同路径下的读取方式

5.1 资源文件在包下面时:

InputStream in =this.getServletContext().getResourceAsStream("/WEB-INF/classes/cn/itcast/context/myfile.properties");

cn/itcast/context/myfile.properties:文件的全路径

5.2 资源文件在WEB-INF下

this.getServletContext().getResourceAsStream("/WEB-INF/myfile.properties")

5.3 资源文件在web工程中

this.getServletContext().getResourceAsStream("/myfile.properties");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聊城云在天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值