Servlet的初始化参数的配置和使用

 

在Java Web开发中。常量信息通常倾向于写在配置文件中。这样需求变化时只需要修改一下配置文件就可以了。而不用大量的改动代码并造成程序的重新编译。web.xml提供了这种配置初始化参数的功能。

<servlet>
    <servlet-name>ServletParamTest</servlet-name>
    <servlet-class>servlet.ServletParamTest</servlet-class>
    <init-param>
     <param-name>helloween</param-name>         <!--第一个参数-->
     <param-value>password</param-value>        <!--第一个参数的参数值-->

    </init-param>
    <init-param>
     <param-name>admin</param-name>             <!--第二个参数-->
     <param-value>admin</param-value>           <!--第二个参数的参数值-->
    </init-param>
    <init-param>
     <param-name>babyface</param-name>          <!--第三个参数-->
     <param-value>babyface</param-value>        <!--第二个参数的参数值-->
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>ServletParamTest</servlet-name>
    <url-pattern>/servlet</url-pattern>
  </servlet-mapping>

 

怎样取得Servlet初始化参数?
通过ServletConfig接口的getInitParameter(java.lang.String name)方法。

getServletConfig()该方法定义在Servlet接口中,返回ServletConfig接口的引用。
所有的servlet都继承了该方法。当容器实例化一个servlet之前,会从web.xml中读取这个servlet的初始化参数,并把这些参数交给ServletConfig,然后在调用init()方法时,容器会传送这个ServletConfig的引用到servlet。每个servlet都会有一个唯一的ServletConfig引用。一旦有了ServletConfig的引用就可以调用getInitParameter()方法来取得我们在servlet中设置的初始化参数。

 

还可以使用方法getInitParameterNames()来返回所有配置参数的名称的集合。这个集合为枚举类型。这种配置方式只可以在该Servlet种才可对其实现取值。而其他的Servlet中则不可以。因为它是配置在某一个<servlet></servlet>配置节内的。

举一个取值的例子:

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  request.setCharacterEncoding("GBK");
  response.setCharacterEncoding("GBK");
  response.setContentType("text/html");
  Enumeration parmas=this.getInitParameterNames(); //只获得所有参数名称。而不获得参数值
  while(parmas.hasMoreElements())   //判断条件为枚举类型里是否有至少一个值
  {
   String name1=(String) parmas.nextElement();  //获取下一个参数名称
   String name=getInitParameter(name1);  //根据参数名称获得参数值
   request.setAttribute("name", name);
     
  }
  response.sendRedirect("index.jsp");
 

而要做到每个Servlet中都可取到的参数则需要上下文参数。

上下文初始化参数与Servlet初始化参数类似,区别是上下文初始化参数对整个web应用而不是Servlet初始化参数只对应一个servlet。
在web应用的整个生命周期中上下文初始化参数都存在,任意的servlet和jsp都可以随时随地的访问它。

上下文初始化参数对应于整个web应用,因此它不在某个servlet元素内。一个web应用有一个ServletContext,而一个servlet有一个ServletConfig
而它需要使用标签<context-param>来配置

 


    <context-param>
     <param-name>helloween</param-name>         <!--第一个参数-->
     <param-value>password</param-value>        <!--第一个参数的参数值-->

    </context-param>
    <context-param>
     <param-name>admin</param-name>             <!--第二个参数-->
     <param-value>admin</param-value>           <!--第二个参数的参数值-->
    </context-param>
    <context-param>
     <param-name>babyface</param-name>          <!--第三个参数-->
     <param-value>babyface</param-value>        <!--第二个参数的参数值-->
    </context-param>

获取context-param可以使用ServletContext对象。

Servlet中通过getServletConfig().getServletContext()来获取ServletContext对象,使用该对象的getInitParameter()方法获取指定名称的参数值。getInitParameterNames()获取所有参数名称。

 servlet的ServletConfig对象拥有该servlet的ServletContext的一个引用,所以可这样取得上下文初始化参数;
getServletConfig().getServletContext().getInitParameter()
也可以在servlet中直接调用getServletContext().getInitParameter(),两者是等价的

在Java 5.0里开始引入注解的概念。而是用注解可以实现不用Servlet主动读取配置的参数。而由WEB容器启动时自动把web.xml里配置的信息注射到Servlet里。不需要编写任何代码。

 

 

 

 

 

 

 

 

 

 

 

 

我们在配置servlet的时候,可能需要在启动servlet的时候给他初始化一些参数,这样我们可以在web.xml配置文件中对servlet进行配置。

 

< ?xml version="1.0" encoding="UTF-8"?>

< web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">

  < display-name>strutsDemo< /display-name>

  < jsp-config>

    < taglib>

      < taglib-uri>/WEB-INF/struts-bean.tld< /taglib-uri>

      < taglib-location>/WEB-INF/struts-bean.tld< /taglib-location>

    < /taglib>

    < taglib>

      < taglib-uri>/WEB-INF/struts-html.tld< /taglib-uri>

      < taglib-location>/WEB-INF/struts-html.tld< /taglib-location>

    < /taglib>

    < taglib>

      < taglib-uri>/WEB-INF/struts-logic.tld< /taglib-uri>

      < taglib-location>/WEB-INF/struts-logic.tld< /taglib-location>

    < /taglib>

    < taglib>

      < taglib-uri>/WEB-INF/struts-tiles.tld< /taglib-uri>

      < taglib-location>/WEB-INF/struts-tiles.tld< /taglib-location>

    < /taglib>

    < taglib>

      < taglib-uri>/WEB-INF/struts-nested.tld< /taglib-uri>

      < taglib-location>/WEB-INF/struts-nested.tld< /taglib-location>

    < /taglib>

  < /jsp-config>

  < servlet>

    < servlet-name>action< /servlet-name>

    < servlet-class>org.zy.pro.strutsdemo.control.ApplicationActionServlet< /servlet-class>

    < init-param>

      < param-name>config< /param-name>

      < param-value>/WEB-INF/struts-config.xml< /param-value>

    < /init-param>

    < init-param>

      < param-name>debug< /param-name>

      < param-value>2< /param-value>

    < /init-param>

    < load-on-startup>2< /load-on-startup>

  < /servlet>

  < servlet-mapping>

    < servlet-name>action< /servlet-name>

    < url-pattern>*.do< /url-pattern>

  < /servlet-mapping>

  < servlet>

    < servlet-name>onefileuploadservlet< /servlet-name>

    < servlet-class>org.zy.pro.strutsdemo.servlet.OneFileUploadServlet< /servlet-class>

    < init-param>

      < param-name>a< /param-name>

      < param-value>aaaaaaaaaa< /param-value>

    < /init-param>

  < /servlet>

  < servlet-mapping>

    < servlet-name>onefileuploadservlet< /servlet-name>

    < url-pattern>/onefileupload< /url-pattern>

  < /servlet-mapping>

  < servlet>

    < description>Added by JBuilder to compile JSPs with debug info< /description>

    < servlet-name>debugjsp< /servlet-name>

    < servlet-class>org.apache.jasper.servlet.JspServlet< /servlet-class>

    < init-param>

      < param-name>classdebuginfo< /param-name>

      < param-value>true< /param-value>

    < /init-param>

    < load-on-startup>3< /load-on-startup>

  < /servlet>

  < servlet-mapping>

    < servlet-name>debugjsp< /servlet-name>

    < url-pattern>*.jsp< /url-pattern>

  < /servlet-mapping>

< /web-app>

 

如我们以上代码中的蓝色部分。即实现了我们的配置,那么我们如何在我们的servlet中使用呢?

我们看我们的servlet部分代码:

  //Process the HTTP Post request

  public void doPost(HttpServletRequest request, HttpServletResponse response) throws

      ServletException, IOException {

 

    String a = this.getInitParameter("a");

    System.out.println(" the  a   parameter  initialize  when  loading  :  " +

                       a);

在我们的处理post的代码中,我们可以取得我们的配置参数。

之后,我们就可以对此参数进行处理了。

如果我们通过次配置使用一个xml来实现对servlet的扩展配置的话,那么我们此时得到的是一个xml文件的路径,那么我们可以通过对xml的读取和解析来取得我们想要的参数。

 

但是,我们不能在启动的时候给servlet初始化一个非String类的实例,如:

    < init-param>

    < param-name>util< /param-name>

    < param-value>org.lyj.commons.util.DigestUtil< /param-value>

    < /init-param>

这种配置是错误的。因为我们的getInitParameter()方法仅能得到一个字符串类型的返回值。

 

 

 

HelloWorldServlet.java

  1. package jp.co.xiehl.servlet.ch7;  
  2.   
  3. import java.io.IOException;  
  • import java.io.PrintWriter;  
  • import javax.servlet.ServletException;  
  • import javax.servlet.http.HttpServlet;  
  • import javax.servlet.http.HttpServletRequest;  
  • import javax.servlet.http.HttpServletResponse;  
  •   
  • public class HelloWorldServlet extends HttpServlet {  
  •       
  •     private String  driver;  
  •     private String url;  
  •     private String  password;  
  •     private String user;  
  •   
  •     private static final long serialVersionUID = -5370049563045822665L;  
  •   
  •     @Override  
  •     protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
  •             throws ServletException, IOException {  
  •           
  •         PrintWriter out = resp.getWriter();  
  •           
  •         out.println("<html>");  
  •         out.println("<head>");  
  •         out.println("<title>HelloWorld</title>");  
  •         out.println("</head>");  
  •           
  •         out.println("<body bgcolor=/"lightblue/">");  
  •         out.println("<hr>");  
  •         out.println("DRVER is " + driver);  
  •         out.println("URL   is " + url);  
  •         out.println("USER  is " + user);  
  •         out.println("PSSSW is " + password);  
  •         out.println("</body>");  
  •         out.println("</html>");  
  •     }  
  •       
  •     @Override  
  •     protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
  •             throws ServletException, IOException {  
  •         doPost(req, resp);  
  •     }  
  •       
  •     @Override  
  •     public void init() throws ServletException {  
  •         super.init();  
  •         driver = getInitParameter("driver");  
  •         url = getInitParameter("url");  
  •         user = getInitParameter("user");  
  •         password = getInitParameter("password");  
  •     }  
  • }  

package jp.co.xiehl.servlet.ch7; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloWorldServlet extends HttpServlet { private String driver; private String url; private String password; private String user; private static final long serialVersionUID = -5370049563045822665L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter out = resp.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>HelloWorld</title>"); out.println("</head>"); out.println("<body bgcolor=/"lightblue/">"); out.println("<hr>"); out.println("DRVER is " + driver); out.println("URL is " + url); out.println("USER is " + user); out.println("PSSSW is " + password); out.println("</body>"); out.println("</html>"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override public void init() throws ServletException { super.init(); driver = getInitParameter("driver"); url = getInitParameter("url"); user = getInitParameter("user"); password = getInitParameter("password"); } }

 

 

web.xml配置

  1. <servlet>  
  2.     <servlet-name>HelloWorld</servlet-name>  
  3.     <servlet-class>jp.co.xiehl.servlet.ch7.HelloWorldServlet</servlet-class>  
  4.     <init-param>  
  5.         <param-name>driver</param-name>  
  6.         <param-value>aaaaaa-8</param-value>  
  7.     </init-param>  
  8.     <init-param>  
  9.         <param-name>url</param-name>  
  10.         <param-value>127.1.1.1</param-value>  
  11.     </init-param>  
  12.   
  13.     <init-param>  
  14.         <param-name>user</param-name>  
  15.         <param-value>ccc</param-value>  
  16.     </init-param>  
  17.     <init-param>  
  18.         <param-name>password</param-name>  
  19.         <param-value>ddd</param-value>  
  20.     </init-param>  
  21. </servlet>  
  22.   
  23. <servlet-mapping>  
  24.     <servlet-name>HelloWorld</servlet-name>  
  25.     <url-pattern>/hello</url-pattern>  
  26. </servlet-mapping>  

<servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>jp.co.xiehl.servlet.ch7.HelloWorldServlet</servlet-class> <init-param> <param-name>driver</param-name> <param-value>aaaaaa-8</param-value> </init-param> <init-param> <param-name>url</param-name> <param-value>127.1.1.1</param-value> </init-param> <init-param> <param-name>user</param-name> <param-value>ccc</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>ddd</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>

 

 

执行:

http://localhost/HibernateStudy/hello

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值