在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
- 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");
- }
- }
相关推荐
Servlet初始化参数是在Servlet容器启动时设置的,这些参数可以在整个应用生命周期中被Servlet访问,通常用来配置Servlet的行为或应用的配置信息。本示例提供了对Servlet初始化参数的演示,帮助开发者了解如何在实际...
本文主要讲解 Servlet 初始化参数和上下文初始化参数的概念、定义、配置和获取方法。同时,通过实践演示,展示了如何在 Servlet 中读取初始化参数和上下文初始化参数,并将其显示在网页上。 一、Servlet 初始化参数...
在Servlet中,我们使用`request.getRequestDispatcher("/bbs.jsp").forward(request, response)`将控制权传递给`bbs.jsp`,这样,请求和响应对象会保持不变,JSP页面可以访问之前设置在请求作用域内的属性。...
Servlet 配置是指在 web.xml 文件中定义 Servlet 的配置信息,包括 Servlet 名称、映射 URL、初始化参数等。web.xml 文件是 Java Web 应用程序的标准配置文件,用于定义应用程序的结构和行为。 四、Servlet 生命...
2. **配置log4j文件名参数**:在web.xml中,为Servlet配置初始化参数,指明`log4j`配置文件的名称。 3. **在Servlet中调用初始化方法**:在Servlet的`init()`方法中,获取Web应用的根目录,结合配置的文件名,构造...
Servlet初始化参数是用于配置Servlet的特定设置,它们在Servlet被容器加载时进行传递。在`web.xml`部署描述符中,我们可以通过`<init-param>`元素定义这些参数。例如: ```xml <servlet> <servlet-name>MyServlet...
- **`web.xml`** 文件:这是一种传统的配置方式,可以在其中指定初始化参数以及其他配置信息。 - **注解**:现代的Servlet容器支持通过注解的方式进行配置。这种方式更加简洁灵活。 #### 五、Servlet生命周期 了解...
SERVLET 的初始化参数可以在 web.xml 文件中配置,使用 <init-param> 元素来定义初始化参数。SERVLET 可以使用 getInitParameter() 方法来获取初始化参数。 SERVLET 的多线程并发处理可以提高 SERVLET 的处理性能,...
6. **部署描述符(web.xml)**:这是web应用的配置文件,定义了Servlet、过滤器和监听器等组件的映射、初始化参数和安全约束等。 7. **Servlet容器**:如Apache Tomcat,负责加载和管理Servlet,处理请求分发,提供...
通常用于设置Servlet配置信息,例如读取初始化参数等。 - **`void service(ServletRequest request, ServletResponse response)`**:处理客户端请求的核心方法。此方法根据请求类型执行相应的业务逻辑,并将结果返回...
当Web应用启动时,`ActionServlet`作为Servlet初始化并存入Tomcat容器中。这一过程发生在Struts首次被使用时。`ActionServlet`在初始化过程中主要负责配置和管理整个Struts应用的环境,包括但不限于配置文件的加载、...
##### 1.1 配置Servlet初始化参数 在JavaWeb开发中,`ServletConfig` 是一个非常重要的接口,它允许开发者访问Servlet的一些特定配置信息。这部分内容主要讨论如何在 `web.xml` 文件中为Servlet配置初始化参数。 *...
4. **初始化参数**:使用`init-params`配置初始化参数,便于管理和共享。 以上就是Servlet的主要知识点,包括其工作原理、配置方式、生命周期以及需要注意的问题。理解并掌握这些内容对于开发高质量的Java Web应用...
1. 初始化:Servlet 初始化时,会读取 web.xml 文件中的配置信息,并执行 init 方法。在这个阶段,Servlet 会获取 web.xml 文件中的预定义参数。 2. 服务:在 Servlet 初始化完成后,会进入服务阶段。在这个阶段,...
2. `ServletConfig getServletConfig()`:返回Servlet的配置对象,可以从其中获取Servlet的初始化参数和其他配置信息。 3. `void service(ServletRequest request, ServletResponse response) throws ...
ServletConfig提供了获取Servlet初始化参数和Web应用上下文信息的方法。 5. **ServletContext接口**: 表示整个Web应用程序的共享环境。通过ServletContext,Servlet可以与其他Servlet通信,获取全局初始化参数,...
在Web应用的部署描述符(web.xml)中,可以定义Servlet的配置,包括Servlet名称、映射URL模式以及初始化参数。例如: ```xml <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>...
ServletConfig对象提供了访问Servlet初始化参数的方法,这些参数是在web.xml文件中配置的。例如,可以获取Servlet的名称、初始化参数值等。 6. **ServletContext接口** ServletContext代表整个Web应用的上下文,...
- `ServletConfig`: 代表Servlet的配置信息,包含在web.xml中定义的Servlet特定的初始化参数。 - `ServletContext`: 表示整个Web应用的上下文,可以获取Web应用的信息,如初始化参数、资源路径等。 - `...
4. **ServletConfig接口**:在Servlet初始化时,Servlet容器会传递一个ServletConfig对象给Servlet,这个对象包含了Servlet的配置信息,如Servlet名称、初始化参数等。 5. **ServletContext接口**:表示整个Web应用...