在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中提供方法getInitParameter(String param)来获取初始化参数值。还可以使用方法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中都可取到的参数则需要上下文参数。而它需要使用标签<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()获取所有参数名称。
在Java 5.0里开始引入注解的概念。而是用注解可以实现不用Servlet主动读取配置的参数。而由WEB容器启动时自动把web.xml里配置的信息注射到Servlet里。不需要编写任何代码。明天说这个。今天睡觉了。