中文乱码和过滤器

struts果然很强大,于无声处尽封装,不知不觉既实现。噼里啪啦,向导N下就搞掂一个WEB程序。

 

今天试着建立了一个简单的struts1工程,和最初的servlet程序相比,struts真的要傻瓜的多。加上日臻完善的MyEclipse插件,甚至连JAR包都不必手工导入了。好。

对普通的servlet程序来说,地址栏初次访问时,走的是doget方法,这一点已经向彪哥处得到证实。但在平时的提交表单项的时候,是不推荐使用GET方式的。除了BYTE数限制之外,或许仅仅是为了信息安全?!说的也是,你把什么东西都提到地址栏,让谁也受不了。

在实现servlet的时候,曾经遇到过中文编码的问题,当时是在日文系统的PC机上实现,编码问题似乎更为难解。最初的想法是过滤器filter。在我本人的最初理解中,或许这个东西就是干这个用的。不管,先试着实现之!

然,问题并没有解决。

何故?servlet中的request与response都设置了UTF-8了啊?况且又加上了似乎很强大的过滤器?全部是万能的UTF-8啊。

恩,他们都是这么说的,纯servlet的web程序,是通过向客户端输出字符集来生成HTML的(out.println()で),html中的字符编码应该也设置为UTF-8,问题找到。编码设置不统一!ORZ~

 

好吧,我用struts,再也不用手写TMD的JAVA内置HTML的神经servlet了。jsp总比你servlet方便简便多了,还可以用struts自动生成。先简单说下struts的实现机制吧。1.x哦~

靠,完全颠覆了我本人的传统思想啊!竟然连FORM表单以及内部属性也可以用向导生成。封装到傻瓜死!个人FORM类是必须的,把JSP上的表单按FORM封装起来。成了简单的JavaBean(POJO?),可以在action里当成简单的bean来用,对,用getset方法来存取。甚是简单。那么action呢?顾名思义,业务逻辑就可以放在这里,form类也可以说是为它服务的。至于如何把action和form关联起来,这就是struts-config文件的事情了(XML真的颠覆了我个人的传统看法,我很喜欢它!),没错,客户端的JSP也是通过这个struts配置文件来找到它的俩兄弟类的(form和action类)。

 

说着说着跑题了,我今天是来说编码和filter的。言归正传,上面说了,jsp上的表单是struts自动给封装到form类的,action直接用form类生成的对象就OK了。非英文环境,依然存在编码的问题,比如说,表单上是查询条件N个,下面是提交按钮,如果查询条件是中文的,点查询按钮后,form自动封装了该表单,即action中你可以直接使用form对象来获得页面设定的条件值。但此时,得到的中文是乱码的。记得龙哥说他用此方法提交后,地址栏传递过去的值是乱码的,无非是使用GET方法来传递request值导致的。但没办法,自动封装的,当你得到的时候,你手里的东西已经是乱码的了。怎么办?百度一下看看吧,方法有几个,tomcat的配置文件中追加编码配置,为方法之一。当然,这时候你一定想到过滤器,filter,我最初的印象里,filter就是干这个用的。

 

开始写过滤器。

 

问题又来了,我使用的版本是MyEclipse6.0的,内置的web工程里面没有自动创建filter的向导啊?莫非要自己写?莫非要到可恶的jar包?莫非又是环境配置问题?还好,百度真好。

百度说,傻瓜,你可以建一个普通的class,继承filter不就行了么。惭愧。真惭愧。赶快回来写吧。继承Filter类,注意,是javax.servlet.Filter,错了会导致出错的。

嗯,编码设置,UTF-8,把request和response强行设置。

 

运行,问题解决!

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页