`

Servlet、Jsp乱码问题(三)

    博客分类:
  • J2EE
 
阅读更多

    感谢elfin1314对我上一篇关于乱码问题的建议——使用过滤器。那本文就会对乱码问题做一个阶段性的总结,提供给大家一个简单并且可以方便处理乱码的方案。
    过滤器是什么?我个人的理解简单来说就是:拦截客户端的请求,进行定制化的处理继续执行未完成的请求
    在这里做一下简单说明,为什么过滤器可以帮我们处理乱码问题。比如客户端请求访问服务器端的HelloServlet,那么在执行HelloServlet之前,会先经过过滤器进行处理。过滤器处理结束后继续访问HelloServlet完成客户端的请求。
    就像中学课堂的化学实验:过滤
    水倒入瓶中——即客户端的请求
    过滤网——即服务器端的过滤器,过滤杂质
    水流入瓶中——经过过滤器后水最后进入瓶中
    化学实验要过滤的是水中的杂质,而我们使用过滤器是要过滤请求当中会产生的乱码。

    拦截器的开发步骤:拦截器在Struts1中需要开发人员手动编写代码来实现。本质上来说过滤器也是一个Servlet,了解Servlet的开发人员就会很容易拦截器开发的注意内容。比如创建一个Servlet需要一个继承HttpServlet的类并且在web.xml中对该Servlet进行配置。那么过滤器是如何设置的呢?(和Servlet的配置有异曲同工之妙)

<!-- 定义过滤器 --> 
<filter> 
<filter-name>Set Character Encoding</filter-name> 
<filter-class>com.web.util.FilterServlet</filter-class> 
<!-- 定义过滤器的初始化参数 --> 
<init-param> 
<!-- 参数名称为【encoding】的值为【UTF-8】 --> 
<param-name>encoding</param-name> 
<param-value>UTF-8</param-value> 
</init-param> 
</filter> 
<!-- 设置名过滤器【Set Character Encoding】的映射路径 --> 
<filter-mapping> 
<filter-name>Set Character Encoding</filter-name> 
<!-- 【*】代表映射到所有请求 --> 
<url-pattern>/*</url-pattern> 
</filter-mapping>

    除了配置过滤器之外,还需要与配置相对应的过滤器实现的类文件。文件路径需要和<filter-class>com.web.util.FilterServlet</filter-class>保持一致。代码如下:

package com.web.util; 
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 FilterServlet implements Filter { 

/** 
* 编码类型 
*/ 
protected String encoding; 

/** 
* 过滤器初始化函数,读取配置参数 
*/ 
public void init(FilterConfig filterConfig) throws ServletException { 
// 获取web.xml中定义过滤器是设置的初始化参数【encoding】中的值,此处获得的值为UTF-8 
System.out.println("开始获取encoding的值咯!"); 
this.encoding = filterConfig.getInitParameter("encoding"); 

} 

/** 
* 过滤器的处理函数 
*/ 
public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) throws IOException, ServletException { 
System.out.println("执行过滤器的doFilter()方法咯~"); 
String encoding = this.encoding; 
System.out.println("encoding: " + encoding); 
if(encoding != null){ 
request.setCharacterEncoding(encoding); 
} 
System.out.println("doFilter()处理完毕开始跳转~"); 
chain.doFilter(request, response); 
} 

/** 
* 过滤器的销毁函数 
*/ 
public void destroy() { 
System.out.println("执行过滤器的destroy()方法咯!"); 
this.encoding = null; 
} 
}

    这样过滤器的创建和配置就完成了。我们就可以编写功能来测试过滤器是不是起作用了。
    下面提供下载的代码,Form表单提交的方式是Post方式,如果改成Get请求仍然会出现乱码,原因我已经在上两篇文章做了说明(http://www.arm4u.com/read.php?tid=36http://www.arm4u.com/read.php?tid=44
    解决方案如下:
    修改当前web应用的服务器Tomcat的配置。找到Tomcat根目录下conf文件夹下的server.xml文件。在<Connector/>节点中添加两个粗体显示的配置:

<Connector port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000" [b]useBodyEncodingForURI="true" URIEncoding="UTF-8"[/b] 
redirectPort="8444"/>

    useBodyEncodingForURI="true" //设置POST和GET使用相同编码
    URIEncoding="UTF-8" //对URI使用utf-8编码处理

    这样,不管客户端请求的方式是Get还是Post都不会有乱码问题了。
    期待大家的关注,也希望得到宝贵的建议。

分享到:
评论

相关推荐

    servlet与jsp中文乱码处理

    通过以上方法,基本可以解决servlet和jsp在接收和显示中文时的乱码问题。但在实际开发中,可能还需要根据具体环境和需求进行调整。了解这些知识点,对于Java Web开发者来说是非常必要的,能够提高项目的稳定性和用户...

    Jsp和Servlet中文乱码问题

    本文将深入探讨JSP和Servlet中文乱码问题的根源、解决方案以及预防策略。 ### JSP和Servlet中的中文乱码问题根源 中文乱码问题通常源于字符编码不一致或配置错误。在Web应用中,数据流经多个环节,包括客户端...

    解决servlet页面乱码问题

    本文将深入探讨如何解决Servlet页面显示乱码的问题,这对于初学者来说是至关重要的知识点。 首先,我们需要理解乱码的根源。在Web应用中,乱码通常出现在两个阶段:输入(如POST表单数据)和输出(如HTML页面的响应...

    jsp传参 servlet接收中文乱码问题的解决方法.docx

    jsp 传参 servlet 接收中文乱码问题的解决方法 jsp 传参 servlet 接收中文乱码问题是一个经常遇到的问题,特别是在使用 Hibernate+Servlet 框架时。当我们在 jsp 页面传参到 servlet 时,中文字符经常会出现乱码...

    servlet输出JS乱码问题

    知识点:Servlet输出JS乱码问题解析与解决方案 一、Servlet与JS输出背景 Servlet是Java Web应用中的核心组件,主要用于处理客户端发送的HTTP请求,并生成响应。在Web开发中,Servlet经常被用来处理业务逻辑,然后...

    servlet中文乱码问题

    ### Servlet + Tomcat 中文乱码问题解析及解决方案 #### 一、中文乱码问题概述 在使用Servlet和Tomcat进行Web开发时,经常会遇到中文乱码的问题。这主要是因为客户端(如浏览器)与服务器之间使用的字符编码不一致...

    解决jsp+servlet开发中的中文乱码问题

    ### 解决JSP+Servlet开发中的中文乱码问题 #### 概述 在基于JSP(Java Server Pages)和Servlet技术的Java Web应用开发过程中,中文乱码问题一直是困扰开发者的一大难题。由于Java Web应用程序涉及多个组件之间的...

    javaweb servlet(jsp)的乱码问题原理及解决

    ### javaweb servlet(jsp)的乱码问题原理及解决 #### HTTP协议的基本理解与乱码问题背景 HTTP协议作为互联网应用中最为广泛使用的通信协议之一,它定义了客户端和服务端之间的交互规则。HTTP请求主要分为GET和...

    Servlet及jsp解决中文乱码问题

    ### Servlet及JSP解决中文乱码问题 #### 一、引言 在Web开发中,中文乱码问题一直是困扰开发者的一大难题。特别是在使用Java技术栈(如Servlet与JSP)进行开发时,如果处理不当,很容易出现中文字符显示乱码的情况...

    jsp+servlet+mysql乱码解决的这天

    jsp+servlet+mysql乱码解决方案是指在使用jsp+servlet+mysql开发web应用程序时,如何解决中文乱码问题的解决方案。该方案通过设置每个页面的编码格式为utf-8,控制器servlet中的请求编码格式为utf-8,数据库连接url...

    web项目乱码问题 jsp乱码问题解决

    在Web开发中,尤其是涉及到Java和JSP的项目,中文乱码问题常常困扰着开发者。本文将深入探讨这个问题,提供解决方案。 首先,我们需要理解乱码的根源。乱码通常由于字符编码不一致导致,尤其是在JSP文件中,不同的...

    jsp编码 jsp乱码

    jsp乱码问题是jsp开发中常见的问题之一,该问题可能会导致jsp页面显示乱码,影响用户体验。解决jsp乱码问题的方法有多种,以下是一些常见的解决方案: 1. 设置pageEncoding参数 设置pageEncoding参数可以解决jsp...

    JSP乱码 N种解决方案

    本文将深入探讨“JSP乱码”的多种解决方案,并提供实用的解决策略。 1. **理解字符编码的基本概念** - 字符编码是计算机对文字进行存储和处理的标准,常见的有ASCII、GBK、UTF-8等。 - JSP页面默认使用ISO-8859-1...

    servlet过滤器解决乱码问题

    ### Servlet过滤器解决乱码问题 在Web应用开发过程中,字符编码问题经常出现,尤其是在处理中文等多字节字符时。如果不正确地设置字符编码,可能会导致页面显示乱码。本文将详细介绍如何通过Servlet过滤器来解决这...

    jsp传参 servlet接收中文乱码问题的解决方法

    在开发基于JSP和Servlet的Web应用时,中文乱码问题是一个常见的困扰许多开发者的难题。尤其是当JSP页面向Servlet传递中文参数时,如果不正确地处理,很容易出现乱码的情况,影响用户使用体验和数据准确性。下面,我...

    jspservlet取参数乱码问题分析

    ### jspservlet取参数乱码问题分析 #### 一、问题本质及原因分析 在Java Web开发中,尤其是在处理中文参数时,经常会遇到一个常见问题——**jspservlet取参数乱码**。这一现象通常发生在当用户从客户端提交包含...

    Java Web开发(JSP、Servlet)乱码终极解决方案.txt

    在Java Web开发中,尤其是使用JSP和Servlet技术时,字符编码问题——即所谓的“乱码”问题,是开发者常遇到的挑战。本篇将详细解析如何在Java Web项目中彻底解决乱码问题,确保数据在各个环节都能正确地显示和处理。...

    JSP乱码解决方案

    本文将深入探讨JSP乱码的原因及其解决方案,帮助开发者有效地处理这类问题。 ### 1. JSP乱码的成因 - **字符集设置不一致**:JSP文件、HTML页面、HTTP头、Servlet输出以及数据库存储等环节的字符集设置不一致,...

    jsp eclipse乱码问题

    - **POST请求**:可以通过在JSP页面或Servlet中设置请求编码来解决POST请求中的乱码问题。例如: ```java ("UTF-8"); %&gt; ``` - **GET请求**:由于GET请求的参数直接包含在URL中,因此不能通过`request.set...

Global site tag (gtag.js) - Google Analytics