Filter 解决web网页跳转乱码

为什么采用filter实现了字符集的统一编码

问题:

为什么会有字符集编码的问题呢?对于Java Web应用,使用Tomcat容器获取和传递的参数(request.getParameter())默认是iso8859-1编码格式,所以即使我们在页面统一使用中文编码GB2312,在request.getParameter()取得的参数仍会有乱码。

因此我们要对Tomcat获取的参数进行编码转换,采用request.setCharacterEncoding()与response.setCharacterEncoding()会使得获取的参数与返回的结果和页面的(比如是GB2312)编码一致,这样就可以避免编码问题了。

但是这样的话,问题又来了,比如我们现在有很多的servlet和jsp,每个文件都要取得参数,这样的话每个servlet和jsp都要写request.setCharacterEncoding()与response.setCharacterEncoding(),这样就有重复的代码,不简洁,这就需要用filter来帮忙了。

解决思路:

Filter是一层接口,横切在请求与Tomcat容器之间,它可以设置请求传递的数据编码格式或者说Tomcat取得参数与返回结果的字符编码。这样在servlet和jsp中就不用再写重复的代码了,由filter设置。采用Filter必须要实现javax.servlet.Filter接口,一个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;

//设置统一的字符集编码控制类 public class CharsetEncodingFilter implements Filter {  private String charEncode = null;

public void destroy() {  }

public void doFilter(ServletRequest servletRequest,    ServletResponse servletResponse, FilterChain filterChain)    throws IOException, ServletException {   servletRequest.setCharacterEncoding(charEncode);   filterChain.doFilter(servletRequest, servletResponse);  }

public void init(FilterConfig filterConfig) throws ServletException {   this.charEncode = filterConfig.getInitParameter("charEncode");  }

}

根据API,要实现其三个方法:init、doFilter、destroy,其核心是doFilter方法。该方法将拦截到的所有请求统一设置为指定的charEncode编码,然后将请求再发送下去,这样Tomcat得到的参数都是指定的编码格式了,也就实现了简化重复.

要想使用该filter,必须要配置该filter,就像servlet一样需要配置。其配置如下(在web.xml中):

<!-- 用于设置字符集的filter -->

<filter>
  <filter-name>CharsetEncodingFilter</filter-name>
  <filter-class>kane.CharsetEncodingFilter</filter-class>
  <init-param>
   <param-name>charEncode</param-name>
   <param-value>GB2312</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>CharsetEncodingFilter</filter-name>
  <url-pattern>*.jsp</url-pattern>
 </filter-mapping>
 <filter-mapping>
  <filter-name>CharsetEncodingFilter</filter-name>
  <url-pattern>*.do</url-pattern>
 </filter-mapping>

其配置的大致与servlet是一致的,这样的话,任何以.jsp、.do结尾的请求都会被fliter拦截到,从而用指定的编码设置字符集,这样就可以实现编码简洁了。

时间: 2024-08-08 03:36:07

Filter 解决web网页跳转乱码的相关文章

解决web访问的中文乱码问题

resp.setCharacterEncoding("UTF-8"); //resp.setHeader("content-type","text/html;charset=UTF-8"); resp.setContentType("text/html;charset=utf-8");

解决web网页改变起引用的图片,刷新页面仍然显示之前的图片

主要是tomcat服务器上的缓存引起的,只要在更新图片的时候同时给缓存更新即可 我项目存放图片的文件夹路径 C:\Users\miaoz\workspace\book\WebContent\images 然后再tomcat服务器上有个缓存空间C:\Users\miaoz\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\book\images 当刷新页面时图片还是从缓存空间中取,所以才会导致更新图片还

解决Web工程乱码问题

1.servlet跳转到jsp页面 在JSP中涉及到使用Servlet进行一些逻辑处理  处理完后进行页面跳转  如在Servlet中进行的request.getRequestDispatcher("index.jsp").forward(request, response);  这样的跳转 可是有时候我们在跳转的时候  会遇到中文乱码的问题  就算是同一个页面  你进行过一些处理后调回本页面  也可能遇到这样的情况 也许你会说你没有啊  因为出现这种情况是你的Servlet中存在这样

【Filter】利用过滤器Filter解决post传递的编码问题与利用EL表达式简化参数传递

post传递的编码问题,解决的方式有两种,一种是修改Tomcat的配置文件,这种方式是我反对的,因为你并不能保证自己的工程在任意一个Tomcat都能跑,当然如果以后出现什么情况,处理修改Tomcat配置文件,没有别的的话,那么才修改也不迟,另一种是在页面取值之前使用: request.setCharacterEncoding("utf-8"); 本来这样没什么的,不就一行代码吗?但是在现在JSP编程不停强调页面绝对不能出现后端代码的趋势下,不能使用<[Jsp]使用Post与Get

解决在网页里设置锚点后,链接不到相应位置

在网页里设置锚点后,链接不到相应位置,常常出现点完链接后跳到相应位置偏下的位置, <div class="row" id="alter-title" name="alter-title"> 只需要在设置id的位置设置它的样式padding-top; .row{padding-top:20px;} 像数根据实际情况调 解决在网页里设置锚点后,链接不到相应位置,布布扣,bubuko.com

使用 python urllib2 抓取网页时出现乱码的解决方案

这里记录的是一个门外汉解决使用 urllib2 抓取网页时遇到乱码.崩溃.求助.解决和涨经验的过程.这类问题,事后看来只是个极小极小的坑,不过竟然花去很多时间,也值得记录一下.过程如下:目标: 抓取 http://sports.sina.com.cn/g/premierleague/index.shtml 代码: 1 2 3 4 5 6 # coding: u8 import urllib2 url = "http://sports.sina.com.cn/g/premierleague/ind

使用IE11抓包,防止在网页跳转时抓包数据被清除的方法

引:最近在研究使用python实现模拟登陆各大网站,在使用IE11进行抓包分析网站登陆的逻辑结构的时候,发现每次在抓包的时候,当网页跳转的时候,抓包数据会被清除,让我很是郁闷,最终在查阅相关资料以及自己的摸索,发现了解决问题的方法. 方法:在使用IE11进行抓包工作的时候,不要勾选“导航时清除项”,即可解决网页跳转数据包被清除的问题了.(虽然这个问题较简单,但是我自己摸索尝试解决的.) 2014-12-25 21:18:02

【转】【Asp.Net】asp.net(c#) 网页跳转

在asp.net下,经常需要页面的跳转,下面是具体的几种方法.跳转页面是大部编辑语言中都会有的,正面我们来分别介绍一下关于.net中response.redirect sever.execute server.transfer 三种页面跳转的方法: ①response.redirect 这个跳转页面的方法跳转的速度不快,因为它要走2个来回(2次postback),但他可以跳 转到任何页面,没有站点页面限制(即可以由雅虎跳到新浪),同时不能跳过登录保护.但速度慢是其最大缺陷!redirect跳转机

php -- 解决php连接sqlserver2005中文乱码问题(附详细解决方法)

@[email protected]~~ --php5.2 --phpstudy --apache --sqlserver2005 @[email protected]~~问题描述 问题一:php连接sqlsever2005,输入中文,然后查询sqlserver中对应的数据,由于提交中文是UTF-8,而sqlserver的中文为GBK,所以字段无法匹配,没有查询结果. 问题二,php连接sqlsever2005,读取数据表数据,由于中文是UTF-8,而sqlserver的中文为GBK,读出来的中