`
jishublog
  • 浏览: 898912 次
文章分类
社区版块
存档分类
最新评论

JSP对浏览器发送来的数据进行重新编码的两种方案

 
阅读更多

最近做的DRP项目中,使用JSP操作中文时,经常会出现一些乱码问题。这些问题导致中文无法输入,或者是无法正常显示。这里就涉及到了字符集的设置、字符集的编码方式。

在JSP/Servlet中主要有以下几个地方可以设置编码,pageEncoding="GB18030",contentType="text/html;charset=GB18030"、request.setCharacterEncoding("GB18030")和 response.setCharacterEncoding("GB18030"),其中前两个只能用于JSP中,而后两个可以用于JSP和Servlet 中。

这里,我们只谈一下对浏览器发送来的数据进行重新编码时的编码方式。众所周知,要对浏览器发送来的数据进行重新编码,只需要一个语句就可以了,很简单。


方案一:(很简单吧)

request.setCharacterEncoding("GB18030");  

但是,这里就出现了一个问题,需要设置字符级的页面有很多,而且,这样的方式也缺乏灵活性,对于日后的维护限制很大,因此,我对方案一进行了一下优化,加入了Filter接口,将设置字符集的语句抽象出一个java类,该java类实现了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;

import org.omg.CORBA.Request;

/**
 * 采用Filter统一处理字符集
 * @author jerry
 *
 */
public class CharsetEncodingFilter implements Filter {
	
	private String encoding = null;
	
	public void destroy() {
		
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		
		//System.out.println("CharsetEncodingFilter--->>>>begin");
		// 设置字符集
		request.setCharacterEncoding(encoding);
		
		// 继续执行
		chain.doFilter(request, response);
		
		//System.out.println("CharsetEncodingFilter--->>>>end");
	}

	public void init(FilterConfig filterConfig) throws ServletException {
		this.encoding = filterConfig.getInitParameter("encoding");
		//System.out.println("System.out.println---->>>encoding" + encoding);
	}
}


有了Filter类还不行,还需要在web.xml中进行配置。

<filter>
	<filter-name>CharsetEncodingFilter</filter-name>
	<filter-class>com.bjpowernode.drp.util.filter.CharsetEncodingFilter</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>GB18030</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>CharsetEncodingFilter</filter-name>
	<url-pattern>*.jsp</url-pattern>
</filter-mapping>


在这里,对编码方式进行了一个灵活的设置,可以在配置文件中灵活更改,为日后的维护简化了很多。

从这个小例子中,我们可以看到,其实有很多的代码是可以进行优化的,从能实现功能的简单代码逐渐优化成不惧各种修改、各种维护的更优代码,这其中更多的是对代码优化的思考,显然,我还不够格,还需要更多的练习,更多的思考。

分享到:
评论

相关推荐

    JSP对浏览器发送来的数据进行重新编码的两种方式

    为了解决这些问题,JSP提供了多种方式来对数据进行重新编码。 首先,需要了解的是字符集的设置和编码方式。字符集(Character Set)定义了字符与字节之间的映射关系,而编码方式(Encoding)则是将字符转换为字节...

    JSP实现浏览器关闭cookies情况下的会话管理.docx

    JSP提供了两个方法来帮助开发者实现这个功能:`response.encodeURL()`和`response.encodeRedirectURL()`。 `response.encodeURL(String url)`方法的作用是在给定的URL后面附加Session ID,但仅当浏览器不支持...

    jsp页面文档编码问题

    这是一个编译时的设定,它不会影响到最终发送到浏览器的内容,而是确保JSP引擎在处理包含非ASCII字符的源代码时,能正确识别和转换这些字符。 两者之间的主要区别在于作用范围和时间点: 1. `pageEncoding`仅在JSP...

    JSP页面中的pageEncoding和contentType两种属性 - 51CTO_COM - 注解

    pageEncoding主要关注JSP源文件的内部编码,而contentType则关注最终发送到浏览器的数据格式和编码。在实际应用中,应确保pageEncoding和contentType的编码一致,以避免在数据传输过程中出现乱码。 举个例子,如果...

    jsp使用URL编码传递中文参数问题.doc

    例如,浏览器可能使用GBK或UTF-8等不同的字符集发送数据,而服务器(如Tomcat)可能使用其他编码来解码这些数据。如果编码不匹配,就会出现乱码。在本例中,`b.jsp`通过`request.getParameter("test")`获取参数,但...

    将html页改成jsp的两种方式

    这里介绍两种转换方法。 **方法一:直接修改HTML文件** 1. 在HTML文件顶部添加JSP指令标签: ```jsp ; charset=GB18030" pageEncoding="GB18030"%&gt; ``` 这行代码告诉服务器这是一个JSP页面,语言为Java,并...

    jsp面试题及答案

    它可以在请求到达Servlet/JSP之前对其进行预处理,而且能够在响应离开Servlet/JSP之后对其进行后处理。过滤器的作用是可以在多个Servlet/JSP之间共享数据转换或页面处理,可以写一个过滤器类,然后在部署描述文件...

    JSP中文乱码问题解决办法

    解决JSP中文乱码问题主要有两种方法: 1. 方法一:自定义转换函数 在JSP页面中,可以通过自定义一个转换函数,将接收到的ISO-8859-1编码的字符串重新编码为GBK。这种方式适用于GET、POST请求以及地址栏中的查询字符...

    js 显示base64编码的二进制流网页图片

    关于浏览器对Base64编码数据的支持,当前主流浏览器如IE8、Firefox、Chrome和Opera等都已经支持Data URI scheme。这意味着开发者可以在Web开发中利用Base64编码来优化小文件的传输过程。 在HTML中显示Base64编码的...

    JSP源码jsp基于Web的可维护的数据库浏览器(源代码+论文+答辩PPT)

    根据提供的文件信息,我们可以推断出这是一套关于使用JSP技术实现的Web数据库浏览器项目的资源包,其中包括了项目的源代码、相关论文以及答辩时使用的PPT。下面将围绕这个项目进行详细的分析与解释。 ### JSP技术...

    解决jsp提交乱码的问题

    对于POST请求,主要涉及表单提交数据和JSP页面自身编码两方面: 1. **表单提交数据**:确保表单的`enctype`属性设置为`application/x-www-form-urlencoded`或`multipart/form-data`。默认情况下,`enctype`为`...

    JSP中汉字乱码现象分析与解决.pdf

    通过对JSP文件与响应编码方式的设置、文件头部的字节顺序标记(BOM)、表单数据的读取、请求参数的处理等多个方面进行深入分析,帮助开发者更好地理解和解决这一问题。 #### 1. 设置JSP文件与响应编码方式 在JSP...

    JSP页面中的pageEncoding和contentType两种属性的区别.

    ### JSP页面中的pageEncoding与contentType两种属性的区别 在Java Server Pages(JSP)技术中,`pageEncoding`和`contentType`是两个重要的属性,它们分别控制着JSP页面的编码方式以及输出内容的类型。了解这两个...

    jsp中文显示问号问题解决方法.docx

    解决JSP 中文显示问号问题的方法有两种:一种是在 Eclipse 中设置 Encoding 选项,另一种是修改 JSP 文件的编码方式。 方法一:在 Eclipse 中设置 Encoding 选项 在 Eclipse 中,可以通过设置 Encoding 选项来解决 ...

    jsp主要九大内置对象、四大web域、两种包含、两种注释、几个jsp标准动作

    在JavaServer Pages (JSP) 技术中,开发者可以利用一系列内置对象来简化Web应用程序的开发。这些内置对象提供了对HTTP请求、响应、会话管理、应用上下文等核心功能的直接访问。以下是JSP的九大内置对象的详细介绍: ...

    JSP_Servlet_API_HTML格式的 可通过浏览器直接打开

    **JSP(JavaServer Pages)和Servlet是Java Web开发中的两个关键组件,它们共同构建了动态Web应用程序的基础。** **JSP** 是一种用于创建动态网页的技术,它允许开发者将HTML代码与Java代码混合编写,使得网页内容...

    JSP笔记,JSP笔记

    - `response.sendRedirect()`:重定向,服务器告诉浏览器需要重新发送请求到指定URL,客户端浏览器会发起新的HTTP请求,可见两次请求和响应。 6. **Request对象** - `request.getParameter()`:获取请求参数的...

    Servlet和JSP技术简介-外文文献翻译.pdf

    Servlet和JSP(JavaServer Pages)是Java开发语言在Web应用中的两个核心组件,它们主要用于构建动态、交互式的Web应用程序。...通过理解和熟练掌握这两种技术,开发者能够构建出高效、安全的Web应用程序。

    jsp File browser 1.2 bug修复,解决乱码等问题

    此外,"Browser原版.jsp"可能是bug修复前的版本,对比两个文件可以找出具体的改动,如新增的编码处理逻辑或者对原有代码的优化。通过这种方式,开发者不仅可以修复已知问题,还能学习到如何预防类似问题的发生。 ...

Global site tag (gtag.js) - Google Analytics