初始化参数(init-param)

web.xml中配置Servlet的时候,标签<servlet>来配置初始化参数。一个Servlet可以配置0到多个初始化参数,接下来的例子里配置了3个初始化参数
本文有卡菲牛奶撰写,原文请访问http://fuchangle.iteye.com/blog/1326993
<servlet>
  	<servlet-name>InitparamServlet</servlet-name>
  	<servlet-class>com.dapp.InitParemServlet</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>InitparamServlet</servlet-name>
  		<url-pattern>/Servlet/InitparamServlet</url-pattern>
  </servlet-mapping>


看一个例子。公司要颁布一个机密文件notice.html。要求能有几个人能够浏览。来实现这种权限控制。把notice.html放在/WEB-INF文件夹里面。因为java Web应用程序的WEB-INF有这个特性,任何人都不能通过浏览器直接获取其下面的文件,即使他知道文件的准确位置和名称。WEB-INF下面 的文件时受保护的,这样就保证了文件的安全性,如果浏览器直接访问服务器会报404Error,即使这个地址是对的
编写一个程序InitparamServlet,提示用户输入用户名密码。如果密码通过,则通过程序转到notice.html中。虽然web-inf下的文件不能通过浏览器直接获取,但是仍然可以通过程序读取到,程序代码如下:


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;

public class InitParemServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setCharacterEncoding("UTF-8");
		request.setCharacterEncoding("UTF-8");
		
		response.setContentType("text/html");
		PrintWriter out=response.getWriter();
		out.print("<!DOCTYPE html PUBLIC\" -//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.print("<HTML>");
		out.print("<head><title>请登录查看Notice文件</title></head>");
		out.print("<body>");
		out.print("<form action='"+request.getRequestURI()+" ' method='post'>");
		out.print("账户:<input type='text' value='username' style='width:200px'><br/>");
		out.print("密码:<input type='password' value='password' style='width:200px'><br/>");
		
		out.print("<input type='submit' value='登录'>");
		out.print("</form>");
		
		out.print("</body>");
		out.print("<HTML>");
		out.flush();
		out.close();
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		
		Enumeration params=this.getInitParameterNames();
		while(params.hasMoreElements()){
			String usernameParam=(String)params.nextElement();//用户名
			String passwordParam=getInitParameter(usernameParam);//密码	
			
			if(usernameParam.equalsIgnoreCase(username) && 
					passwordParam.equals(password)){
				request.getRequestDispatcher("/WEB-INF/notice.html").forward(request, response);
				return;
			}
		}
		this.doGet(request, response);//username,password不匹配
	}
}

一个月后,公司要求Peter为可以浏览该机密文件的人选,同时禁止babyface的账号。由于没有将这些信息写在源程序里而是写在web,xml里,因此改动相当简单,在参数配置里添加一个Peter,删除babyface就可以啦,一分钟搞定!

你可能感兴趣的:(Web,init-param)