一.Filter对乱码问题的处理
web中的配置
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.test.filter.EncodeFilter</filter-class>
<init-param>
<param-name>Encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
java程序
package com.test.filter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class EncodeFilter implements Filter{
String encode = null;
public void init(FilterConfig filterConfig) throws ServletException {
encode = filterConfig.getInitParameter("Encoding");
System.out.println("Filter init.....");
}
public void destroy() {
System.out.println("Filter destroy.....");
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
if(req.getMethod().equals("GET")) {
//Get方式处理乱码
request = new MyRequest(req);
} else {
//post方式处理乱码
request.setCharacterEncoding(encode);
}
response.setContentType("text/html;charset="+encode);
//放行
chain.doFilter(request, response);
}
/**
* 内部类装饰request对象
* @author Administrator
*
*/
class MyRequest extends HttpServletRequestWrapper {
public MyRequest(HttpServletRequest request) {
super(request);
}
@Override
public String getParameter(String name) {
String value = super.getParameter(name);
if (value != null) {
try {
value = new String(value.getBytes("ISO8859-1"), encode);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return value;
}
@Override
public String[] getParameterValues(String name) {
String[] values = super.getParameterValues(name);
if (values != null && values.length > 0) {
for (int i = 0; i < values.length; i++) {
String value = values[i];
try {
values[i] = new String(value.getBytes("ISO8859-1"), encode);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
return values;
}
}
}
二.Filter在权限控制中的应用(登录权限)
web中filter的注册
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.test.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/jsps/*</url-pattern>
</filter-mapping>
java代码
package com.test.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.test.model.User;
public class LoginFilter implements Filter{
public void init(FilterConfig arg0) throws ServletException {
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse rep = (HttpServletResponse) response;
HttpSession session = req.getSession();
//session中取出User对象
User user = (User) session.getAttribute("user");
if(user != null) {
//放行
chain.doFilter(request, response);
} else {
//客户端跳转
rep.sendRedirect("/index.jsp");
//服务端跳转
//req.getRequestDispatcher("/index.jsp").forward(request, response);
}
}
}