现在在JavaWeb开发中,倾向于将常量信息写于某个配置文件中,这样做好处是当需求变化时,只需要修改一下配置文件就可以了,不用修改源程序,不用重新编译,维护方便。
初始化参数(init-param)
初始化参数(init-param)位于web.xml文件的标签下,一个Servlet可以配置0到多个初始化参数。
下面看一个例子:利用初始化参数(init-param)进行权限控制。
本实例存在四个页面:index.jsp(登录页面) ,InitParamServlet(权限判断),notice.html(放入/WEB-INF目录下,该目录下文件不能直接访问),web.xml文件(配置文件)。
index.jsp源码:
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
登陆后查看机密文件登陆后查看机密文件
账号:
密码:
悄悄告诉你:账号密码都是admin
InitParamServlet源码:
package com.javaweb.servlet;
import java.io.IOException;
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 InitParamServlet extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
String name = req.getParameter("username");
String passw = req.getParameter("userpw");
// 获取初始化参数方法 getInitParameterNames
Enumeration params = this.getInitParameterNames();
while(params.hasMoreElements()){
//获取初始化参数名 即用户名
String nameParam = (String) params.nextElement();
//获取密码 getInitParameter方法获取参数值
String passwParam = this.getInitParameter(nameParam);
if(name.equals(nameParam)&&passw.equals(passwParam)){
req.getRequestDispatcher("/WEB-INF/notice.html").forward(req, resp);
return;
}
}
req.getRequestDispatcher("/index.jsp").forward(req, resp);
}
}
notice.html源码:
这是一个机密网页恭喜你,进入内部页面!
此页面存放于/WEB-INF 下
幸运的人,请点击传送门
web.xml配置源码:
InitParamServlet
com.javaweb.servlet.InitParamServlet
admin
admin
codinghjy
codinghjy
123456
123456
InitParamServlet
/servlet/InitParamServlet
当我们需要控制用户权限时,可以直接在web.xml文件中进行增加和删除用户,不用修改源代码。
上下文参数(context- param)
初始化参数(init-param)只属于其servlet的参数,并不是全局参数,而上下文参数(context-param)属于全局参数,可以被所有servlet访问。
我们可以通过
ServletContext servletContext = getServletConfig().getServletContext();
获取上下文,然后使用
servletContext.getInitParameter("")获取参数。