`
2277259257
  • 浏览: 515403 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

 

 

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>  

 

 

执行:

http://localhost/HibernateStudy/hello

分享到:
评论

相关推荐

    Servlet初始化参数演示例子[源代码]

    Servlet初始化参数是在Servlet容器启动时设置的,这些参数可以在整个应用生命周期中被Servlet访问,通常用来配置Servlet的行为或应用的配置信息。本示例提供了对Servlet初始化参数的演示,帮助开发者了解如何在实际...

    Servlet初始化参数和上下文初始化参数训练及处理数据库示例[汇编].pdf

    本文主要讲解 Servlet 初始化参数和上下文初始化参数的概念、定义、配置和获取方法。同时,通过实践演示,展示了如何在 Servlet 中读取初始化参数和上下文初始化参数,并将其显示在网页上。 一、Servlet 初始化参数...

    jsp页面中获取servlet请求中的参数的办法详解

    在Servlet中,我们使用`request.getRequestDispatcher("/bbs.jsp").forward(request, response)`将控制权传递给`bbs.jsp`,这样,请求和响应对象会保持不变,JSP页面可以访问之前设置在请求作用域内的属性。...

    Servlet的应用与配置

    Servlet 配置是指在 web.xml 文件中定义 Servlet 的配置信息,包括 Servlet 名称、映射 URL、初始化参数等。web.xml 文件是 Java Web 应用程序的标准配置文件,用于定义应用程序的结构和行为。 四、Servlet 生命...

    log4j初始化

    2. **配置log4j文件名参数**:在web.xml中,为Servlet配置初始化参数,指明`log4j`配置文件的名称。 3. **在Servlet中调用初始化方法**:在Servlet的`init()`方法中,获取Web应用的根目录,结合配置的文件名,构造...

    Servlet编程范例(4)

    Servlet初始化参数是用于配置Servlet的特定设置,它们在Servlet被容器加载时进行传递。在`web.xml`部署描述符中,我们可以通过`&lt;init-param&gt;`元素定义这些参数。例如: ```xml &lt;servlet&gt; &lt;servlet-name&gt;MyServlet...

    Servlet

    - **`web.xml`** 文件:这是一种传统的配置方式,可以在其中指定初始化参数以及其他配置信息。 - **注解**:现代的Servlet容器支持通过注解的方式进行配置。这种方式更加简洁灵活。 #### 五、Servlet生命周期 了解...

    SERVLET基本原理

    SERVLET 的初始化参数可以在 web.xml 文件中配置,使用 &lt;init-param&gt; 元素来定义初始化参数。SERVLET 可以使用 getInitParameter() 方法来获取初始化参数。 SERVLET 的多线程并发处理可以提高 SERVLET 的处理性能,...

    用于servlet程序的开发的servlet-jar包

    6. **部署描述符(web.xml)**:这是web应用的配置文件,定义了Servlet、过滤器和监听器等组件的映射、初始化参数和安全约束等。 7. **Servlet容器**:如Apache Tomcat,负责加载和管理Servlet,处理请求分发,提供...

    servlet-api基本类和接口介绍

    通常用于设置Servlet配置信息,例如读取初始化参数等。 - **`void service(ServletRequest request, ServletResponse response)`**:处理客户端请求的核心方法。此方法根据请求类型执行相应的业务逻辑,并将结果返回...

    探讨Struts的初始化方法

    当Web应用启动时,`ActionServlet`作为Servlet初始化并存入Tomcat容器中。这一过程发生在Struts首次被使用时。`ActionServlet`在初始化过程中主要负责配置和管理整个Struts应用的环境,包括但不限于配置文件的加载、...

    javaweb Servlet开发总结(二).docx

    ##### 1.1 配置Servlet初始化参数 在JavaWeb开发中,`ServletConfig` 是一个非常重要的接口,它允许开发者访问Servlet的一些特定配置信息。这部分内容主要讨论如何在 `web.xml` 文件中为Servlet配置初始化参数。 *...

    Servlet注意点

    4. **初始化参数**:使用`init-params`配置初始化参数,便于管理和共享。 以上就是Servlet的主要知识点,包括其工作原理、配置方式、生命周期以及需要注意的问题。理解并掌握这些内容对于开发高质量的Java Web应用...

    servlet传参

    1. 初始化:Servlet 初始化时,会读取 web.xml 文件中的配置信息,并执行 init 方法。在这个阶段,Servlet 会获取 web.xml 文件中的预定义参数。 2. 服务:在 Servlet 初始化完成后,会进入服务阶段。在这个阶段,...

    Servlet中文API文档 .docx

    2. `ServletConfig getServletConfig()`:返回Servlet的配置对象,可以从其中获取Servlet的初始化参数和其他配置信息。 3. `void service(ServletRequest request, ServletResponse response) throws ...

    servlet-api.rar_java servlet_servlet api_servlet-api

    ServletConfig提供了获取Servlet初始化参数和Web应用上下文信息的方法。 5. **ServletContext接口**: 表示整个Web应用程序的共享环境。通过ServletContext,Servlet可以与其他Servlet通信,获取全局初始化参数,...

    Java_Servlet教程(繁体)

    在Web应用的部署描述符(web.xml)中,可以定义Servlet的配置,包括Servlet名称、映射URL模式以及初始化参数。例如: ```xml &lt;servlet&gt; &lt;servlet-name&gt;MyServlet&lt;/servlet-name&gt; &lt;servlet-class&gt;...

    servlet源码

    ServletConfig对象提供了访问Servlet初始化参数的方法,这些参数是在web.xml文件中配置的。例如,可以获取Servlet的名称、初始化参数值等。 6. **ServletContext接口** ServletContext代表整个Web应用的上下文,...

    javax.servlet jar包---解决找不到javax.servlet.*等问题

    - `ServletConfig`: 代表Servlet的配置信息,包含在web.xml中定义的Servlet特定的初始化参数。 - `ServletContext`: 表示整个Web应用的上下文,可以获取Web应用的信息,如初始化参数、资源路径等。 - `...

    serlvet 源码 servlet-src 源文件

    4. **ServletConfig接口**:在Servlet初始化时,Servlet容器会传递一个ServletConfig对象给Servlet,这个对象包含了Servlet的配置信息,如Servlet名称、初始化参数等。 5. **ServletContext接口**:表示整个Web应用...

Global site tag (gtag.js) - Google Analytics