java 过滤器(参数传递中文乱码)
转自:http://blog.csdn.net/guopengzhang/article/details/5557096
(一)过滤器类编写。
1、设置字符集编码方式:
编写过滤器类:实现接口javax.servlet.Filter
public class CharacterEncodingFilter implements Filter { private String charset; public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { // TODO Auto-generated method stub request.setCharacterEncoding(charset); filterChain.doFilter(request, response); } public void init(FilterConfig config) throws ServletException { // TODO Auto-generated method stub charset = config.getInitParameter("charset"); } }
标注:
以上过滤器类只能保证post提交方式能正确解码,get方式依然会出问题。
方案1:
String username = new String(request.getParamter("userName").getBytes("ISO8859-1"),"GBK")
此方法在接受页面上能够对post和get两种方式传过来的参数userName进行正确显示,但每个参数都使用这种方式来接受会太麻烦,所以还是使用过滤器的方式比较方便。
方案2:
对于get接受参数的解决方法:修改服务器的配置文件中
修该tomcat服务器的安装目录(E:/Program Files/Apache Software Foundation/Tomcat 6.0/conf)下的server.xml
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
标注:添加属性 URIEncoding="GBK" ,此方式只能解决get方式提交。
2、检测用户是否登陆的过滤器
public class CheckLoginFilter implements Filter { public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub HttpServletRequest hsRequest = (HttpServletRequest)request; HttpServletResponse hsResponse = (HttpServletResponse)response; HttpSession session = hsRequest.getSession(); //没登录 if(session.getAttribute("userID") == null) { String uri = hsRequest.getRequestURI(); // 请求登录页面 if (uri.contains("log")||uri.contains("Log") || uri.contains("reg") || uri.contains("Reg")) { chain.doFilter(request, response); }else { // 请求其它页面 hsResponse.sendRedirect("login.jsp"); } }else { // 已登录,顺利跳转 chain.doFilter(request, response); } } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
(二)配置web.xml
<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>cn.guopeng.bbs.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>charset</param-name> <param-value>GBK</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>CheckLoginFilter</filter-name> <filter-class>cn.guopeng.bbs.filter.CheckLoginFilter</filter-class> </filter> <filter-mapping> <filter-name>CheckLoginFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
标注:
(1)想过滤多个页面并且不全部过滤,
如果过滤或不过滤的地址比较有规律可以配置为全部过滤,然后在过滤器中编写代码只过滤一部分,其他的直接请求即可。
如果规律不明显,则只能通过web.xml配置,可以为过滤类写多个<filter-mapping>
(2)web.xml 中如果有servlet的配置信息, 那么filter应该在servlet的下面进行配置。