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

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操作中文时,经常会出现一些乱码问题。这里,我们只谈一下对浏览器发送来的数据进行重新编码时的编码方式。众所周知,要对浏览器发送来的数据进行重新编码,只需要一个语句就可以了,很简单

    JSP实用技巧集合,jsp编程的一些小技巧总结

    107.在重新显示表单时保留用户已经输入的合法数据? 108.使用选代器遍历集合 109.使用特定字符串对一个字符串进行分割? 110.格式化输出数字和字符? 111.生成一定范围的随机数? 112.调用其它应用程序? 113.禁止列出...

    jsp编程技巧集锦

    在重新显示表单时保留用户已经输入的合法数据? 108.使用选代器遍历集合 109.使用特定字符串对一个字符串进行分割? 110.格式化输出数字和字符? 111.生成一定范围的随机数? 112.调用其它应用程序? ...

    Explorer4JSP

    1.列表和缩略图两种浏览模式 2.预置7种尺寸缩略图 3.仿Win7地址栏导航方式 4.支持4种文件排序方式 5.大图片缩略图转换,能将超过512K的大图片(照片通常在1M以上)转换成缩略图尺寸,减小浏览器压力及带宽压力,提高...

    java及web中英对照译文

    可用两种方法访问 JSP 文件:浏览器发送 JSP 文件请求、发送至 Servlet 的请求。JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于...

    jsp九大内置对象

    1、Request对象  该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息...(虽然两种方式都能达到同样的目的)  9、Exception对象  在处理异常的网页中可以直接访问exception隐式对象。

    JSP程序设计实例教程(第2版)-电子课件第1章-Java-Web编程基础.pptx

    2.B/S结构 B/S结构即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S体系结构的一种变化或者改进的结构。在B/S体系结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,...

    淘特Jsp内容管理系统(Cms) v3.0.zip

    系统自带了中、英文两种语言包,翻译其它语言只需用记事本打开文件修改。后台采用可视化的内容编辑,操作容易、上手简单,是一套不需要懂技术的人就可以管理的内容管理系统。    淘特JSP Cms3.0新版正式发布!...

    java 编写文件上传类简单易用

    通过表单提交数据的方法有两种,一种是 GET 方法,另一种是 POST 方法,前者通常用于提交少量的数据,而在上传文件或大量数据时,应该选用 POST 方法。在 HTML 代码中,在 &lt;form&gt; 标签中添加以下代码可以页面...

    java面试题大全--java基础,struts,spring,ejb等

    2.J2EE是一种技术还是一种平台,他提供了那些技术。 3.什么是Application Server,它有什么功能和优点。 4.简单介绍连接池的优点和原理。 5.Web.xml的作用 四、其他 1.Web安全性的考虑(表单验证、浏览器Basic方式...

    千方百计笔试题大全

    237、触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。 56 238、EJB容器提供的服务 56 239、EJB的角色和三个对象 56 240、EJB的几种类型 56 241、bean 实例的生命周期 56 242、...

    java面试宝典

    237、触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。 56 238、EJB容器提供的服务 56 239、EJB的角色和三个对象 56 240、EJB的几种类型 56 241、bean 实例的生命周期 56 242、...

    AJAX基础概念、核心技术与典型案例(内涵动态实例)

    程序描述:本章将介绍 GWT应用中高级应用的部分,包括各中组件和布局、如何发送XMLHttpRequest请求,以及如何解决浏览器历史记录问题等等,同时读者还将详细的了解RPC应用的开发过程。 /xmlsample/AjaxSample....

    超级有影响力霸气的Java面试题大全文档

    redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。 23、EJB与JAVA BEAN的区别?  Java Bean 是可...

    JAVA上百实例源码以及开源项目源代码

    发送消息,同时对文本进行少量修改,发送end-of-messages消息,最后关闭连接。 Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器  Tcp服务端与客户端的JAVA实例源代码,一个简单...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    XML对这一原理进行了深化和扩展,用XML,你可以描述你的信息在哪里,你可以通过meta来验证信息,执行搜索,强制显示,或者处理其他的数据。 下面是一些XML metadata在实际应用中的用途: 1.可以验证数字签名,使...

    健身房管理信息系统设计.doc

    本健身管理信息系统开发主要包括前台界面的设计以及后台数据库的建立与维护开发 两个方面,经过对课题的调研以及可行性分析,本系统设计采用MyEclipse作为开发环境 ,HTML和JSP作为开发工具,基于B/S结构设计方案,...

    java 面试题 总结

    redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。 20、EJB与JAVA BEAN的区别? Java Bean 是可复用...

    JAVA上百实例源码以及开源项目

    发送消息,同时对文本进行少量修改,发送end-of-messages消息,最后关闭连接。 Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器  Tcp服务端与客户端的JAVA实例源代码,一个简单...

Global site tag (gtag.js) - Google Analytics