`
haouziwefe
  • 浏览: 125830 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

使用过滤器Filter解决tomcat默认编码配下的传值乱码

    博客分类:
  • java
阅读更多
    最近又拿起jsp+servlet来做项目,遇到了乱码的问题。解决方案很多,这次决定用过滤器来解决传值过程中的乱码问题。当然前提是tomcat没修改过connector配置项中的uriencoding,即使用tomcat默认的编码配置。
在表单中使用“method”这个属性来指定提交表单时使用的http请求方式。默认是get方式。
使用get方式,提交的参数放在请求的url后面,浏览器会对url进行转义。所以,在服务端要用以下代码取得正确的参数,“utf-8”是我使用的页面字符编码。
string str = new string(request.getparameter("str").getbytes("iso-8859-1"),"utf-8");

如果使用的是post方式,则提交的参数将放在请求的消息体中。这种情况下,只要指定字符串编码就可以了。
request.setcharacterencoding(encode);


好,下面说一下我使用过滤器解决传值乱码的例子。
首先,写个继承httpservletrequestwrapper的类,扩展一下servlet提供的request的功能。
	public class request extends httpservletrequestwrapper {		public request(httpservletrequest request) {			super(request);		}		public string tochi(string para) {			try {				byte[] bytes = para.getbytes("iso8859-1");				return new string(bytes, encode);			} catch (exception ex) {			}			return null;		}				private httpservletrequest gethttpservletrequest() {			return (httpservletrequest) super.getrequest();		}		public string getparameter(string name) {			return tochi(gethttpservletrequest().getparameter(name));		}		public string[] getparametervalues(string name) {			string values[] = gethttpservletrequest().getparametervalues(name);			if (values != null) {				for (int i = 0; i < values.length; i++) {					values[i] = tochi(values[i]);				}			}			return values;		}	}

在上面的类中,我们其实就完成了一件事。在我们使用getparameter(),getparametervalues()取得参数前,先对参数进行了我们之前所说到的第一个动作。

接着,编写一个过滤器。
public class encodefilter implements filter{	private string encode;	public void destroy() {	}	public void dofilter(servletrequest request, servletresponse response,			filterchain chain) throws ioexception, servletexception {		httpservletrequest httpreq = (httpservletrequest) request;		if (httpreq.getmethod().equals("post")) {			request.setcharacterencoding(encode);		} else {			request = new request(httpreq);		}		chain.dofilter(request, response);	}	public void init(filterconfig filterconfig) throws servletexception {		encode = filterconfig.getinitparameter("encode");	}}

这里,我们使用过滤器完成了两个动作。首先,如果请求是post方式的,则request.setcharacterencoding(encode);如果请求是get方式的,则使用我们进行了扩展的request代替原来的request,这样就做到了对参数进行转码再取值。
接下来,在web.xml中要配置我们的这个过滤器。
	<filter>		<filter-name>encodefilter</filter-name>		<filter-class>com.ieread.search.filter.encodefilter</filter-class>		<init-param>			<param-name>encode</param-name>			<param-value>utf-8</param-value>		</init-param>	</filter>	<filter-mapping>		<filter-name>encodefilter</filter-name>		<url-pattern>/*</url-pattern>	</filter-mapping>

在filter中有个encode参数,用来指定我们所使用的字符编码。

<div style="text-align: center">--------------------------------------------事情还有后续----------------------------------------
0
0
分享到:
评论

相关推荐

    解决tomcat下中文乱码问题

    解决 Tomcat 下中文乱码问题 在本文中,我们将讨论如何解决 Tomcat 下中文乱码问题。该问题是由于 Tomcat 默认的字符编码设置不正确引起的。我们将通过设置 Connector 元素的 URIEncoding 属性和在过滤器中设置字符...

    使用过滤器解决中文乱码问题

    ### 使用过滤器解决中文乱码问题 在Web开发过程中,经常遇到的一个问题是中文或其它非ASCII字符的乱码问题。这种现象通常出现在浏览器接收的数据与实际编码格式不匹配时。解决此类问题的一种常见方法是使用过滤器...

    如何配置Filter过滤器处理JSP中文乱码

    解决这个问题的一种常见方法是使用Filter过滤器。以下是配置Filter过滤器处理JSP中文乱码的详细步骤: 1. **配置web.xml文件** 在项目的`web.xml`文件中,你需要添加一个Filter来定义处理乱码的逻辑。首先,声明一...

    tomcat过滤器,处理表单提交出现乱码

    为了解决这个问题,我们可以利用Java的Servlet过滤器(Filter)机制来处理请求。 1. **创建过滤器**: 在Java Web应用中,过滤器是实现特定功能的一段代码,可以在请求到达目标Servlet之前或之后进行预处理和后...

    解决Tomcat中文乱码

    ### 解决Tomcat中文乱码问题 在使用Tomcat服务器部署Web应用时,经常会遇到中文乱码的问题。本文将详细探讨这一现象的原因,并提供一种有效的解决方案。 #### 问题背景 在Tomcat环境下运行Web应用程序时,如果...

    如何解决Tomcat下中文乱码问题?

    解决方法是创建一个Servlet过滤器(Filter),在请求到达目标Servlet之前,设定请求的字符编码。以下是一个简单的过滤器示例,用于设置请求的字符编码为UTF-8: ```java public class SetCharacterEncodingFilter ...

    解决tomcat中文乱码问题.doc

    综上所述,通过合理设置JSP页面编码、配置请求过滤器以及进行必要的编码转换,可以有效解决Tomcat环境下中文乱码的问题。在实际应用中,还需要根据具体情况选择合适的解决方案,并注意保持前后端编码的一致性。

    彻底解决 Tomcat 5 下文字乱码问题 - JSP日志 - ※一路风尘※

    - Tomcat的日志输出默认使用平台默认编码,可能导致乱码。可以通过修改`logging.properties`文件,为`java.util.logging.ConsoleHandler.encoding`设置为`UTF-8`。 - 如果使用的是自定义日志框架,如Log4j,需在...

    STRUTS ActionForm乱码,servlet全局过滤器转义编码。

    Struts框架中的ActionForm乱码问题以及Servlet全局过滤器的转义编码处理是Java Web开发中常见的字符编码问题。在开发基于Struts的Web应用时,乱码主要出现在三个方面:页面显示乱码、参数传递乱码以及国际化资源文件...

    Tomcat和weblogic中文乱码问题解决方案

    在 Tomcat 服务器中,可以使用以下过滤器来解决中文乱码问题: ```java package com; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet....

    修改tomcat的编码为utf-8

    以上示例使用Spring框架提供的`CharacterEncodingFilter`过滤器来强制所有请求都使用UTF-8编码。这种方法更加灵活,可以根据具体的应用场景来定制。 #### 三、验证修改结果 修改完成后,可以通过以下几种方式来...

    filter过滤器流程及中文乱码解决和客户端IP地址控制

    【filter过滤器流程】 在Java Web开发中,Filter(过滤器)是用于处理HTTP请求和响应的重要组件。它遵循Servlet规范中的Filter接口,允许开发者在请求到达目标Servlet或JSP之前以及响应离开Servlet之后进行拦截和...

    如何解决Tomcat下中文乱码问题?文.pdf

    对于POST提交的表单,可以通过创建一个Servlet过滤器(Filter)来解决乱码问题。过滤器会在请求被处理前执行,可以在这里更改请求参数的编码。以下是一个简单的`SetCharacterEncodingFilter`示例: ```java ...

    过滤器,Jsp开发中的避免中文乱码

    过滤器(Filter)在Java Web应用中扮演了重要角色,它可以用来解决这个问题。过滤器是Servlet API的一部分,允许我们在数据请求到达目标资源之前或之后进行拦截和处理,包括对字符编码的转换,从而避免乱码的出现。 ...

    基于tomcat8 编写字符编码Filter过滤器无效问题的解决方法

    基于tomcat8 编写字符编码Filter过滤器无效问题的解决方法 在基于tomcat8 的Web应用程序中,字符编码问题是常见的问题之一。特别是在处理POST请求时,中文字符可能会出现乱码的情况。为了解决这个问题,我们可以...

    Struts+Hibernate+MyEclipse+Tomcat+MySQL的乱码之解决篇

    使用过滤器统一设置编码 - 创建一个过滤器类`SetCharacterEncodingFilter`,该过滤器会在请求到达控制器之前设置正确的编码。 - 配置过滤器类: ```java package com.ruder.filters; import java.io....

    idea启动tomcat项目控制台乱码问题.docx

    如果你的项目包含`web.xml`,确保其中的`&lt;filter&gt;`和`&lt;filter-mapping&gt;`标签用于字符编码过滤器,如`CharacterEncodingFilter`,确保设置正确的编码,例如: ```xml &lt;filter&gt; &lt;filter-name&gt;encodingFilter&lt;/...

    java过滤器的使用

    在Web应用中,由于编码不一致,中文字符可能会出现乱码,而通过自定义过滤器可以有效地解决这个问题。 首先,让我们了解过滤器的工作原理。在Java Web应用中,过滤器通过实现javax.servlet.Filter接口并重写其...

    SpringMVC Tomcat控制台乱码问题解决方案

    本文主要介绍了SpringMVC Tomcat控制台乱码问题解决方案,该解决方案通过修改Tomcat的logging.properties文件和使用过滤器来解决乱码问题。使用该解决方案可以解决SpringMVC框架中出现的乱码问题,对大家的学习或者...

    tomcat5中文问题完美解决

    **方法一:实现过滤器(FILTER)设置GBK编码** 1. 参考Tomcat的Servlet-Examples目录下的示例,将 `%TOMCAT安装目录%/WEBAPPS/SERVLET-EXAMPLES/WEB-INF/CLASSES/FILTERS/SETCHARACTERENCODINGFILTER.CLASS` 拷贝到...

Global site tag (gtag.js) - Google Analytics