近日,使用struts 1.1,发现讨厌的中文乱码问题,在form的传送过程和入库时候出现。
就我在网络上找的方法罗列如下:
(tomcat 5.0.28+struts 1.1+hibernate 2.1+sqlserver2k)
1.直接转编码public static string isotogb(string src){ string strret=null; try{ strret = new string(src.getbytes("iso_8859_1"),"gb2312"); }catch(exception e) { } return strret;}通过一个函数转编码,我没有成功,不知为何!
2.过滤filter设置法
package yourbean;
import javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;
public class servfilter extends httpservlet implements filter { private filterconfig filterconfig; //handle the passed-in filterconfig public void init(filterconfig filterconfig) { this.filterconfig = filterconfig; } //process the request/response pair public void dofilter(servletrequest request, servletresponse response, filterchain filterchain) { try { request.setcharacterencoding("gb2312"); ((httpservletresponse)response).setheader("cache-control","no-cache"); response.setheader("pragma","no-cache"); response.setheader("cache-control","no-cache"); response.setheader("expires","0"); ((httpservletresponse)response).setheader("pragram","no-cache"); filterchain.dofilter(request, response); } catch(servletexception sx) { filterconfig.getservletcontext().log(sx.getmessage()); } catch(ioexception iox) { filterconfig.getservletcontext().log(iox.getmessage()); } } //clean up resources public void destroy() { }}下面是一个web.xml文件你用jbuilder写上面的bean的时候会生成一个<?xml version="1.0" encoding="iso-8859-1"?>
<!doctype web-app public "-//sun microsystems, inc.//dtd web application 2.3//en" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app> <display-name>welcome to tomcat</display-name> <description> welcome to tomcat </description> <filter> <filter-name>servfilter</filter-name> <filter-class>yourbean.servfilter</filter-class> </filter> <filter-mapping> <filter-name>servfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-app>把上面的servfilter编译放在你的web-inf/classes/yourbean/下web.xml放在web-inf/下和classes在一个目录下在每个jsp页面上加上<%@page contenttype="text/html;charset=gbk"%>
也不是很方便,而且在tomcat也没有成功,继续郁闷!
3.我现在使用方法,推荐!!
写一个myactionservlet来并覆盖actionservlet中的process()方法。
protected void process(httpservletrequest request, httpservletresponse response) throws java.io.ioexception, javax.servlet.servletexception { /**@todo override this org.apache.struts.action.actionservlet method*/ request.setcharacterencoding("gb2312");//就加着一行一切都解决了 super.process(request, response); }
当然别忘了改一下web.xml里面的配置 <servlet> <servlet-name>action</servlet-name> <servlet-class>strutsdemo.myactionservlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param> <init-param> <param-name>config</param-name> <param-value>/web-inf/struts-config.xml</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet>
改一下servlet-class标签中的内容就可以!
真的可以,一劳用yi!
具体编码的理论就不说了,google上已经够多了。
另外,如果不用struts的话,hibernate也可能碰到中文乱码问题,只要在hibernate.cfg.xml配置中如下:
<property name="hibernate.connection.url"> jdbc:microsoft:sqlserver://localhost:1433;selectmethod=cursor;characterencoding=gbk;databasename=mydatabase. </property>
characterencoding=gbk!就可以了。
