服务器启动时先进行所有拦截器的初始化
要用FilterChain,将请求继续向下转发。
chain.doFilter(request,response) ;没有就无法向下执行
中文过滤,统一编码方式
硬编码不好,用filterConfig 读取web.xml配置文件里面的信息
可以用 getInitParameterNames 获取到web.xml里所有的配置信息
Enumberation
hasMoreElements 测试此枚举中是否包含更多的元素
nextElements 如果此枚举中至少还有一个可提供的元素,则返回此枚举的下一个元素
对于get 和post 提交处理中文的不一样
过滤器
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException{
request.setCharacterEncoding(“utf-8”);
//get/post,֪��get,post->reqeust
HttpServletRequest req=(HttpServletRequest)request;
System.out.println(req.getMethod());
if(req.getMethod().equals(“GET”)){
EncodingRequest er=new EncodingRequest(req);
chain.doFilter(er, response);
}else if(req.getMethod().equals(“POST”)){
chain.doFilter(request, response);
}
}
EncodingRequest
private HttpServletRequest req; // null
public EncodingRequest(HttpServletRequest request) {
super(request);
this.req = request;
}
//request.getParameter(name)->
public String getParameter(String name) {
String value = req.getParameter(name); // key->value iso8859-1
try {
if (value != null) {
value = new String(value.getBytes(“iso-8859-1”), “utf-8”);
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return value;
}
非法字符
如果出现空错误 解决办法 ,页面被拦截器拦截住了 在web和页面进行修改,
不要用 /*
自动跳到登录页面
public class SessionFilter implements Filter {
private List<String> uriList = new ArrayList<String>();
@Override
public void destroy() {
// TODO Auto-generated method stub
}
// 过滤session 检测未登录,或者session过期行为
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain fc)
throws IOException, ServletException {
// TODO Auto-generated method stub
// 强转
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
// 获取请求路径
String uri = request.getRequestURI();
boolean flag = false;
// 遍历集合查看是否包含应该放行的路径
for (String stringUri : uriList) {
if (uri.indexOf(stringUri) != -1) {
flag = true;
break;
}
}
if (flag) {
fc.doFilter(request, response);
} else {
String uname = (String) request.getSession().getAttribute("uname");
if (null != uname) {
fc.doFilter(request, response);
} else {
response.setContentType("text/html;charset=gbk");
response.setHeader("refresh", "2;URL=login.jsp");
PrintWriter writer = response.getWriter();
StringBuffer sb = new StringBuffer();
sb.append("您还未登陆,请先登陆!!!<br>").append("两秒后自动跳转到登陆窗口!!!<br>")
.append("如果没有跳转,请按<a href='login.jsp'>这里</a>!!!<br>");
writer.write(sb.toString());
}
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
uriList.add("login.jsp");
uriList.add("errors.jsp");
uriList.add("Login");
uriList.add("register.jsp");
uriList.add("register?method=checkName");
uriList.add("register?method=register");
}
}