JavaWeb开发中倾向于将公用的常量信息写在配置文件中,当需求改变的时候,只需要改变配置文件中的参数及其值,不需要对代码做修改,维护起来也方便。web.xml提供了设置初始化参数的功能,本节演示从wen.xml中读取预设置参数的功能。
在web.xml配置初始化参数:
在web.xml中添加预定参数的时候,只需要在需要使用到参数的Servlet的<servlet>标签中添加<init-param>标签,<init-param>标签有两个子标签,<param-name>设置参数名,<param-value>设置参数值。示例代码为:
<servlet>
<servlet-name>InitParamServlet</servlet-name>
<servlet-class>servlet.InitParamServlet</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>
<servlet-name>InitParamServlet</servlet-name>
<servlet-class>servlet.InitParamServlet</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>
可以看到,在web.xml中添加了三个默认参数,通过InitParamServlet可以访问到此三个参数。以下演示一个小案例。
在MyEclipse新建一个web工程,命名为GetPara,在WebRoot/WEB-INF下新建一个notice.html。由于Tomcat的保密设定,外界无法直接访问存放在WebRoot/WEB-INF下的文件,只有内部的文件可以访问。现在假设我们添加的三个参数为内定的用户名及其密码,创建一个登录界面,当输入的登录用户名为上面三个属性:helloween,admin,babyface中的其中一个且密码符合其value值,则有Servlet跳转到notice.html,其他的则刷新页面,代码如下:
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//特定的参数及其值已经存储在web.xml中,本Servlet主要是为了演示从web.xml中提取参数并且验证所提交的参数是否与事先假定的参数一致
public class InitParamServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8"); //设置响应的编码方式为UTF8,兼容中文
request.setCharacterEncoding("UTF-8"); //设置请求的编码方式为UTF8,兼容中文
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>请登录查看Notice文件</TITLE></HEAD>");
out.println("<style>body,td,div{font-size:12px;}</style>");
out.println(" <BODY>");
out.print("<form action='"+request.getRequestURI()+"'method='post'>");
out.print("账号:<input type='text' name = 'username' style='width:200px;'><br/><br/>");
out.println("密码:<input type='password' name = 'password' style='width:200px;'><br/><br/>");
out.println("<input type = 'submit' value='登录'>");
out.println("</form>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws
ServletException,IOException{
String username = request.getParameter("username"); //提交的username参数
String password = request.getParameter("password"); //提交的password密码参数
Enumeration params = this.getInitParameterNames(); //获取所有初始化参数名称,集合为一个枚举类型
//this.getInitParameter("parameter-name"); 使用已知的参数名称获取相应的初始化参数值
while(params.hasMoreElements()){ //遍历所有初始化参数
String usernameParam = (String)params.nextElement(); //取得参数名,即用户名
String passnameParam = (String)getInitParameter(usernameParam); //取得参数值,即用户密码
if(usernameParam.equalsIgnoreCase(username)&&passnameParam.equals(password)){
request.getRequestDispatcher("/WEB-INF/notice.html").forward(request, response); //当用户名与密码匹配时,就跳转到notice.html界面
return;
}
}
this.doGet(request, response); //不匹配,显示原来的登录界面
}
}