Servlet过滤器是一个Web应用组件,和Servlet类似,也需要在Web应用配置文件中进行配置:首先是过滤器的Web应用定义包含在<filter>…</filer>元素中,其次是Web应用的过滤器映射配置文件<filter-mapping>…</filter-mapping>
过滤器的应用很广泛,在这里介绍利用过滤器进行中文转码。一般在JavaWeb应用中,当利用request.getParameter(String str)方法获取从表单或是页面传过来的中文参数都会是一个乱码。通常会采用如下的转码方式在Servlet或是JSP中进行转码设置:
(1)request.setCharacterEncoding("gb2312");
(2)String username = request.getParameter("username");
username = new String(username.getBytes("ISO-8859-1"), "GB2312");
假设:一个表单有多数据传到Servlet或是JSP,那么就可能在这些Servlet或是JSP中写下多个request.setCharacterEncoding("gb2312")或是多个类似于String username = request.getParameter("username");
username = new String(username.getBytes("ISO-8859-1"), "GB2312");这样子肯定加大代码工作量。
针对上面的一些常见的问题,下面利用过滤器进行中文转码就可以迎刃而解。配置Filter的步骤如下:
(1)现在web.xml文件中配置如下信息
<filter>
<filter-name>CharactsetConversion</filter-name>
<filter-class>com.gxa.edu.servlet.CharactsetConversion</filter-class>
<init-param>
<param-name>flag</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>charcode</param-name>
<param-value>gb2312</param-value>
</init-param>
</filter>
<filter-mapping>
<!-- 配置需要过滤的URL,这里主要是对所有的文件进行过滤 -->
<filter-name>CharactsetConversion</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
当配置好web.xml文件后,就创建一个过滤器类,名称CharactsetConversion,该类必须实现Filter接口,同时Filter接口提供了3个方法
(1)void doFilter(ServletRequest req,ServletResponse res,FilterChain filterChain)
(2)void init(FilterConfig filterConfig)
(3)void destroy()
(2)创建一个CharactsetConversion.java文件,该文件了实现Filter接口
package com.gxa.edu.servlet;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class CharactsetConversion implements Filter{
private FilterConfig filterConfig = null;
private boolean flag = true;
private String charcode = "gb2312";
public void init(FilterConfig filterConfig) {
this.filterConfig = filterConfig;
String temp = this.filterConfig.getInitParameter("flag");
String str = this.filterConfig.getInitParameter("charcode");
if(temp != null){
if(temp.equals("true")){
this.flag = true;
}else if(temp.equals("false")){
this.flag = false;
}else{
this.flag = true;
}
}
if(str != null){
this.charcode = str;
}
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain filterChain) {
try {
if (flag) {
String c = request.getCharacterEncoding();
if (c == null) {
request.setCharacterEncoding(charcode);
} else if (!c.equals(this.charcode)) {
request.setCharacterEncoding(charcode);
}
}
filterChain.doFilter(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
public void destroy() {
this.filterConfig = null;
}
}
分享到:
相关推荐
本文将详细讲解如何利用过滤器来解决中文乱码问题。 1. **理解中文乱码** 中文乱码通常是因为字符编码不一致导致的。在计算机系统中,字符被编码成二进制表示,不同的编码标准(如GBK、UTF-8等)对同一字符有不同...
本文将详细讲解如何利用过滤器来解决JavaWeb中的乱码问题。 首先,我们需要理解JavaWeb中的乱码产生的原因。当用户通过浏览器提交数据时,如果服务器接收到的数据编码与服务器内部处理编码不匹配,或者JSP页面的...
JSP利用过滤器解决request中文乱码问题 JSP中requestgetParameter中文乱码问题是经常遇到的问题,解决这个问题有多种方法,但利用过滤器解决request中文乱码问题是其中最有效的一种方法。本文将详细介绍如何使用...
### 利用过滤器解决JavaWeb(JSP)乱码问题 #### 一、问题背景与重要性 在JavaWeb开发中,特别是在使用JSP技术时,开发者常常会遇到中文字符显示异常的问题,即所谓的“乱码”。这不仅影响用户体验,还可能导致数据...
本篇将详细讲解如何利用这种过滤器来消除Java Web中的乱码问题。 首先,我们需要理解乱码产生的原因。在Java Web应用中,乱码通常源于字符编码不一致。例如,HTTP请求的数据可能使用UTF-8编码,而服务器默认使用GB...
本文将深入探讨如何利用过滤器(Filter)来有效解决这个问题。过滤器是Servlet规范的一部分,它允许我们在请求到达目标Servlet或者视图之前进行预处理,以及在响应离开目标之后进行后处理,这为处理编码问题提供了...
实际上,这个技术点是基于Servlet过滤器机制实现的,它不仅可以处理中文乱码问题,还可以扩展应用到其他类型的请求数据处理,例如进行数据格式验证、安全检查等。过滤器是JSP中一个非常强大和灵活的功能,可以有效地...
通过上述步骤,我们可以有效地利用Servlet过滤器来解决Web应用中的乱码问题。这种方式不仅提高了代码的可维护性和扩展性,还保证了用户数据的准确性。在实际项目中,可以根据具体的业务需求调整过滤器的逻辑,例如...
### 利用过滤器解决JavaWeb (JSP) 乱码问题详解 #### 一、问题背景 在JavaWeb开发中,特别是在使用JSP技术时,开发者常常会遇到中文字符显示异常的问题,即所谓的“乱码”。这主要是由于客户端与服务器端在处理...
本文将详细介绍如何利用过滤器来解决中文乱码问题。 首先,我们需要了解中文乱码产生的原因。通常,乱码是由于字符编码不一致导致的。在Web应用中,数据在服务器和客户端之间传输时,可能会涉及到不同的字符编码,...
利用过滤器(filter)解决myeclipse中的乱码问题,包含过滤器源代码,不懂的加Q9402055517。
通过以上步骤,我们可以利用拦截器来解决Web应用中的中文乱码问题。然而,值得注意的是,尽管拦截器是一个有效的解决方案,但在某些情况下,如静态资源的处理,可能需要通过其他方式(如配置服务器或修改资源文件的...
为了解决这个问题,我们可以利用Java的Servlet过滤器(Filter)机制来处理请求。 1. **创建过滤器**: 在Java Web应用中,过滤器是实现特定功能的一段代码,可以在请求到达目标Servlet之前或之后进行预处理和后...
为了解决这个问题,我们可以利用Java的Servlet规范中的Filter机制,创建一个编码过滤器(EncodingFilter)。Filter接口是Servlet API的一部分,它允许我们在请求到达目标Servlet之前或之后进行拦截处理,比如在这里...
通过上述步骤,我们可以利用过滤器在请求到达Servlet或JSP页面之前,就对请求数据进行编码处理,从而有效避免中文乱码的问题。使用过滤器来解决乱码问题不仅可以保持Servlet或JSP代码的简洁性,还提高了代码的可复用...
在处理中文字符时,不同的编码格式可能导致乱码问题。中文编码过滤器的主要任务是确保用户输入的中文字符能正确地被系统识别和处理。它通常涉及到UTF-8、GBK等编码方式的转换。这个过滤器会检查并统一输入的编码...
**过滤器处理乱码问题** 在Java Web开发中,字符编码问题经常出现,尤其是处理中文字符时。过滤器可以用来解决这个问题。当请求或响应的编码与预期不一致时,过滤器可以在数据进入或离开Servlet之前进行编码转换。...
通过在过滤器中设置请求的字符集可以很方便的解决乱码问题。 * 缓存控制:缓存是常见的一种技术,利用好缓存技术可以减少网络带宽的占用,提高系统响应速度,提升用户体验,减轻服务器负担。但有些页面却不适合使用...