无为清净楼资源网 Design By www.qnjia.com
最近做的DRP项目中,使用JSP操作中文时,经常会出现一些乱码问题。这些问题导致中文无法输入,或者是无法正常显示。这里就涉及到了字符集的设置、字符集的编码方式。
在JSP/Servlet中主要有以下几个地方可以设置编码,pageEncoding="GB18030",contentType="text/html;charset=GB18030"、request.setCharacterEncoding("GB18030")和 response.setCharacterEncoding("GB18030"),其中前两个只能用于JSP中,而后两个可以用于JSP和Servlet 中。
这里,我们只谈一下对浏览器发送来的数据进行重新编码时的编码方式。众所周知,要对浏览器发送来的数据进行重新编码,只需要一个语句就可以了,很简单。
方案一:(很简单吧)
复制代码 代码如下:
<span style="font-family:Microsoft YaHei; font-size:18px">request.setCharacterEncoding("GB18030");</span><span style="font-family:'Microsoft YaHei'; font-size:18px"></span>
但是,这里就出现了一个问题,需要设置字符级的页面有很多,而且,这样的方式也缺乏灵活性,对于日后的维护限制很大,因此,我对方案一进行了一下优化,加入了Filter接口,将设置字符集的语句抽象出一个java类,该java类实现了Filter接口。下面我们来看一下代码。
方案二:(采用Filter统一处理字符集)
复制代码 代码如下:
<span style="font-family:Microsoft YaHei; font-size:18px">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);
}
}</span>
有了Filter类还不行,还需要在web.xml中进行配置。
复制代码 代码如下:
<span style="font-family:Microsoft YaHei; font-size:18px"><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></span>
在这里,对编码方式进行了一个灵活的设置,可以在配置文件中灵活更改,为日后的维护简化了很多。
从这个小例子中,我们可以看到,其实有很多的代码是可以进行优化的,从能实现功能的简单代码逐渐优化成不惧各种修改、各种维护的更优代码,这其中更多的是对代码优化的思考,显然,我还不够格,还需要更多的练习,更多的思考。
在JSP/Servlet中主要有以下几个地方可以设置编码,pageEncoding="GB18030",contentType="text/html;charset=GB18030"、request.setCharacterEncoding("GB18030")和 response.setCharacterEncoding("GB18030"),其中前两个只能用于JSP中,而后两个可以用于JSP和Servlet 中。
这里,我们只谈一下对浏览器发送来的数据进行重新编码时的编码方式。众所周知,要对浏览器发送来的数据进行重新编码,只需要一个语句就可以了,很简单。
方案一:(很简单吧)
复制代码 代码如下:
<span style="font-family:Microsoft YaHei; font-size:18px">request.setCharacterEncoding("GB18030");</span><span style="font-family:'Microsoft YaHei'; font-size:18px"></span>
但是,这里就出现了一个问题,需要设置字符级的页面有很多,而且,这样的方式也缺乏灵活性,对于日后的维护限制很大,因此,我对方案一进行了一下优化,加入了Filter接口,将设置字符集的语句抽象出一个java类,该java类实现了Filter接口。下面我们来看一下代码。
方案二:(采用Filter统一处理字符集)
复制代码 代码如下:
<span style="font-family:Microsoft YaHei; font-size:18px">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);
}
}</span>
有了Filter类还不行,还需要在web.xml中进行配置。
复制代码 代码如下:
<span style="font-family:Microsoft YaHei; font-size:18px"><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></span>
在这里,对编码方式进行了一个灵活的设置,可以在配置文件中灵活更改,为日后的维护简化了很多。
从这个小例子中,我们可以看到,其实有很多的代码是可以进行优化的,从能实现功能的简单代码逐渐优化成不惧各种修改、各种维护的更优代码,这其中更多的是对代码优化的思考,显然,我还不够格,还需要更多的练习,更多的思考。
标签:
浏览器发送数据,重新编码
无为清净楼资源网 Design By www.qnjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
无为清净楼资源网 Design By www.qnjia.com
暂无评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
2024年11月10日
2024年11月10日
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]