我最近利用struts在做项目,凡是表单提交上来,只要是中文的数据都是乱码,
我也试过了request.setCharacterEncoding("gb2312")都没有用.于是我自己写了一个转码类,已经可以把乱码正确的转换成中文了.但是由于有时一个表单中会有多个中文的属性,如果对其进行一一转码,效率比较低.于是,我转码的这样一个动作,把他放到了数据访问层,也就执行sql语句的时候做,即对整句sql语句进行转码,这样无论表单中有多少个中文属性,最后都将拼接成一个sql语句,我只要转码一次.
我数据访问层结构大体上是这样的,后台一个数据库操作的常用方法类(里面大概是一些增删改查的方法,我想用jdbc的大家都是这么用的吧),然后这些增删改查方法接受的参数一般都是一个sql字符串对象,而我的转码工作,就是在这些增删改查的方法中进行转码的,即对参数sql字符串对象进行转码,这样也能转码成功.
但是由于我项目中还使用到了例如dwr以及struts 的formfile等技术,而这些技术获取到的属性,本身已经是中文的了(我估计可能是它们内部对中文已经进行过转码了),这样就导致我在数据访问层拼接成的sql语句中已经是中文了,而这时候如果把sql语句传递到增删改查的方法中进行转码,反而会被转乱码(如果已经是中文进行转码,反而会变成乱码的).导致插入数据库中数据是乱码.
这样就导致,我不得不为了项目中使用到的一些其他技术获取到的已经中文,而去在后台进行判断是否该转码,这样破坏了后台方法调用的以及后台类的封装性.
不知道有没什么其他方法能解决.
问题不太难,就是很棘手.解决也很容易,但是为了一些小问题,而去破坏一个类的封装性或者类的结构,不是一个面向对象的良好设计
望高手指点,能在保证不破坏原先系统各个对象的结构的情况下,解决这个乱码问题.在线等,一定给分....

解决方案 »

  1.   

    import java.io.UnsupportedEncodingException;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.RequestProcessor;public class Myprocess extends RequestProcessor {protected boolean processPreprocess(HttpServletRequest s, HttpServletResponse arg1) {
    // TODO 自动生成方法存根
    try {
    s.setCharacterEncoding("utf-8");
    } catch (UnsupportedEncodingException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    return false;
    }
    return true;
    }}
    增加一个过滤器,把每次提交的字符串内容转成你所要的编码格式。
      

  2.   

    楼上的方法,我试过了,好象不行
    照样是乱码,而且,你是 utf-8 肯定不行的了
      

  3.   

    什么也不说了,在tomcat的con/server.xml里找到<connector port="8080".../>在里面加URIEncoding="UTF-8",然后在你project里的web.xml加上
    <filter>
    <filter-name>SetCharacterEncoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
    </init-param>
    </filter>
    这样的话post提交不会有乱码,get方法提交,你只需要用URLEncoder/URLDecoder就行了,不懂的可以mail to me :[email protected]
      

  4.   

    http://fll.blog.hexun.com/9156070_d.html
      

  5.   

    做个过滤器   自个写的 用的 用的时候部署下目录:/*成功了记得给分哦  呵呵EncodingFilter.javapackage com.Joshua.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 javax.servlet.http.HttpServletRequest;import com.x3408.office.Constants;public class EncodingFilter implements Filter { public void destroy() {
    // TODO 自动生成方法存根 } public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    // TODO 自动生成方法存根
    HttpServletRequest httpRequest = (HttpServletRequest) request;
    httpRequest.setCharacterEncoding(Constants.CHARSET);
    chain.doFilter(httpRequest, response);
    } public void init(FilterConfig arg0) throws ServletException {
    // TODO 自动生成方法存根 }}
      

  6.   

    web.xml<filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>com.Joshua.filter.EncodingFilter</filter-class>
    <init-param>
    <param-name>EncodingFilter</param-name>
    <param-value>GB2312</param-value>
    </init-param>
    </filter>
      

  7.   

    package com.x3408.office;public interface Constants {
    final String CHARSET="GBK";
    final String UPLOAD_PATH="c:\\UpLoad\\";
    final String APPEND_PATH="c:\\Append\\";
    final int UPLOADMAXSIZE=150*1024*1024;
    final int NEWNOTICEDAYS=3;
    final int NEWFILEDAYS=3;

    final String SITE_DIR="OfficeSystem";
    final String LOGIN_DIR="Login";
    final String PASSED_DIR="Passed";
    final String USER_DIR="User";
    final String ADMIN_DIR="Admin";
    final String USERMANAGE_DIR="UserManage";
    final String BASEINFOUPDATE_DIR="BaseInfoUpdate";
    final String MAIL_DIR="Mail";
    final String MAILSYSTEM_DIR="MailSystem";
    final String FTPMANAGE_DIR="FTPManage";
    final String NOTICEMANAGE_DIR="NoticeManage";
    final String NOTICE_DIR="Notice";
    final String DOWNLOAD_DIR="DownLoad";

    final String INDEX_JSP="Index.jsp";
    final String INDEXHEADER_JSP="CommonHeader.jsp";
    final String INDEXFOOTER_JSP="CommonFooter.jsp";
    final String INDEXTEXT_JSP="IndexText.jsp";
    final String LOGIN_JSP="Login.jsp";
    final String MAIL_JSP="Mail.jsp";
    final String MAILMANAGE_JSP="MailManage.jsp";
    final String MAILLIST_JSP="MailList.jsp";
    final String READMAIL_JSP="ReadMail.jsp";
    final String WRITE_JSP="Write.jsp";
    final String TIP_JSP="Tip.jsp";
    final String NOTICEADD_JSP="NoticeAdd.jsp";
    final String NOTICEQUERY_JSP="NoticeQuery.jsp";
    final String NOTICEMORE_JSP="NoticeMore.jsp";
    final String UPLOAD_JSP="UpLoad.jsp";
    final String DOWNLOAD_JSP="DownLoad.jsp";
    final String DOWNLOADMORE_JSP="DownLoadMore.jsp";
    final String USERADD_JSP="UserAdd.jsp";
    final String BASEINFOUPDATE_JSP="BaseInfoUpdate.jsp";
    final String USERLIST_JSP="UserList.jsp";
    final String OPERATETIP_JSP="OperateTip.jsp";
    final String LOGIN_JAVA="Login";
    final String MAIL_JAVA="Mail";
    final String FTPMANAGE_JAVA="FTPManage";
    final String EMPLOYEES_JAVA="Employees";
    final String BASEINFOUPDATE_JAVA="BaseInfoUpdate";
    final String DOWNLOAD_JAVA="DownLoad";
    final String NOTICEMANAGE_JAVA="NoticeManage";
    final String NOTICE_JAVA="Notice";

    final String LOGIN_PATH="/"+LOGIN_DIR+"/";
    final String PASSED_PATH="/"+PASSED_DIR+"/";
    final String USER_PATH=PASSED_PATH + USER_DIR+"/";
    final String ADMIN_PATH=PASSED_PATH + ADMIN_DIR+"/";
    final String USERMANAGE_PATH=ADMIN_PATH+USERMANAGE_DIR+"/";
    final String BASEINFOUPDATE_PATH=USER_PATH+BASEINFOUPDATE_DIR+"/";
    final String FTPMANAGE_PATH=ADMIN_PATH+FTPMANAGE_DIR+"/";
    final String NOTICEMANAGE_PATH=ADMIN_PATH+NOTICEMANAGE_DIR+"/";
    final String NOTICE_PATH=USER_PATH+NOTICE_DIR+"/";
    final String DOWNLOAD_PATH=USER_PATH+DOWNLOAD_DIR+"/";
    final String MAIL_PATH=USER_PATH+MAIL_DIR+"/";
    final String MAILSYSTEM_PATH=MAIL_PATH+MAILSYSTEM_DIR+"/";

    final String S_INDEX_JSP=USER_PATH+INDEX_JSP;
    final String S_INDEXHEADER_JSP=USER_PATH+INDEXHEADER_JSP;
    final String S_INDEXFOOTER_JSP=USER_PATH+INDEXFOOTER_JSP;
    final String S_INDEXTEXT_JSP=USER_PATH+INDEXTEXT_JSP;
    final String S_MAIL_JSP=MAIL_PATH+MAIL_JSP;
    final String S_MAILMANAGE_JSP=MAILSYSTEM_PATH+MAILMANAGE_JSP;
    final String S_MAILLIST_JSP=MAILSYSTEM_PATH+MAILLIST_JSP;
    final String S_READMAIL_JSP=MAILSYSTEM_PATH+READMAIL_JSP;
    final String S_WRITE_JSP=MAILSYSTEM_PATH+WRITE_JSP;
    final String S_TIP_JSP=MAILSYSTEM_PATH+TIP_JSP;
    final String S_LOGIN_JSP=LOGIN_PATH+LOGIN_JSP;
    final String S_NOTICEADD_JSP=NOTICEMANAGE_PATH+NOTICEADD_JSP;
    final String S_NOTICEQUERY_JSP=NOTICE_PATH+NOTICEQUERY_JSP;
    final String S_NOTICEMORE_JSP=NOTICE_PATH+NOTICEMORE_JSP;
    final String S_UPLOAD_JSP=FTPMANAGE_PATH+UPLOAD_JSP;
    final String S_DOWNLOAD_JSP=DOWNLOAD_PATH+DOWNLOAD_JSP;
    final String S_DOWNLOADMORE_JSP=DOWNLOAD_PATH+DOWNLOADMORE_JSP;
    final String S_USERADD_JSP=USERMANAGE_PATH+USERADD_JSP;
    final String S_BASEINFOUPDATE_JSP=BASEINFOUPDATE_PATH+BASEINFOUPDATE_JSP;
    final String S_USERLIST_JSP=USERMANAGE_PATH+USERLIST_JSP;
    final String S_OPERATETIP_JSP=USERMANAGE_PATH+OPERATETIP_JSP;
    final String S_LOGIN_JAVA=LOGIN_PATH+LOGIN_JAVA;
    final String S_NOTICE_JAVA=NOTICE_PATH+NOTICE_JAVA;
    final String S_EMPLOYEES_JAVA=USERMANAGE_PATH+EMPLOYEES_JAVA;
    final String S_BASEINFOUPDATE_JAVA=BASEINFOUPDATE_PATH+BASEINFOUPDATE_JAVA;
    final String S_NOTICEMANAGE_JAVA=NOTICEMANAGE_PATH+NOTICEMANAGE_JAVA;
    final String S_FTPMANAGE_JAVA=FTPMANAGE_PATH+FTPMANAGE_JAVA;
    final String S_DOWNLOAD_JAVA=DOWNLOAD_PATH+DOWNLOAD_JAVA;

    final String SITE_PATH="/"+SITE_DIR;
    final String C_LOGIN_JSP=SITE_PATH+S_LOGIN_JSP;
    final String C_INDEX_JSP=SITE_PATH+S_INDEX_JSP;
    final String C_INDEXHEADER_JSP=SITE_PATH+S_INDEXHEADER_JSP;
    final String C_INDEXFOOTER_JSP=SITE_PATH+S_INDEXFOOTER_JSP;
    final String C_INDEXTEXT_JSP=SITE_PATH+S_INDEXTEXT_JSP;
    final String C_NOTICEADD_JSP=SITE_PATH+S_NOTICEADD_JSP;
    final String C_NOTICEMORE_JSP=SITE_PATH+S_NOTICEMORE_JSP;
    final String C_NOITCEQUERY_JSP=SITE_PATH+S_NOTICEQUERY_JSP;
    final String C_MAIL_JSP=SITE_PATH+S_MAIL_JSP;
    final String C_MAILMANAGE_JSP=SITE_PATH+S_MAILMANAGE_JSP;
    final String C_MAILLIST_JSP=SITE_PATH+S_MAILLIST_JSP;
    final String C_READMAIL_JSP=SITE_PATH+S_READMAIL_JSP;
    final String C_WRITE_JSP=SITE_PATH+S_WRITE_JSP;
    final String C_TIP_JSP=SITE_PATH+S_TIP_JSP;
    final String C_UPLOAD_JSP=SITE_PATH+S_UPLOAD_JSP;
    final String C_DOWNLOAD_JSP=SITE_PATH+S_DOWNLOAD_JSP;
    final String C_DOWNLOADMORE_JSP=SITE_PATH+S_DOWNLOADMORE_JSP;
    final String C_USERADD_JSP=SITE_PATH+S_USERADD_JSP;
    final String C_BASEINFOUPDATE_JSP=SITE_PATH+S_BASEINFOUPDATE_JSP;
    final String C_USERLIST_JSP=SITE_PATH+S_USERLIST_JSP;
    final String C_OPERATETIP_JSP=SITE_PATH+S_OPERATETIP_JSP;
    final String C_NOTICE_JAVA=SITE_PATH+S_NOTICE_JAVA;
    final String C_EMPLOYEES_JAVA=SITE_PATH+S_EMPLOYEES_JAVA;
    final String C_BASEINFOUPDATE_JAVA=SITE_PATH+S_BASEINFOUPDATE_JAVA;
    final String C_NOTICEMANAGE_JAVA=SITE_PATH+S_NOTICEMANAGE_JAVA;
    final String C_LOGIN_JAVA=SITE_PATH+S_LOGIN_JAVA;
    final String C_FTPMANAGE_JAVA=SITE_PATH+S_FTPMANAGE_JAVA;
    final String C_DOWNLOAD_JAVA=SITE_PATH+S_DOWNLOAD_JAVA;
    }
      

  8.   

    哈哈
    楼主是不是用Tomcat?改用Resin吧。
      

  9.   

    我们不是没有好机会,我们是没有好观念!!! 
    八十年代初,摆个地摊就能发财,可很多人不敢。 
    九十年代初,买支股票就能挣钱,可很多人不信。 
    二十一世纪,开个网站就能赚钱,可很多人不试。 
    加盟网站:http://ycl.cctve.cn/
    有些人面对一个来之不易的良好机会总是拿不定把握,于是去问他 人,而新生事物之所以新就是因为90%以上的人还不知道、不认识 ,等90%的人知道了就不再是新生事物。就拿网上赚钱来说,你问10 个人,很可能10个人都摇头,但再过一段时间,这10个人都点头时 ,我想这个市场就已经开始饱和了! 
    成功只青睐于有胆识的人!难道,一定要等到全国人民告诉你网络真 的可以赚钱你才加入吗?那个时候什么都晚了! 
    记住!网络,带给我们的不只是聊天和游戏而已!它蕴藏着实现梦想 的无限可能! 
    挑战新兴行业 ,领先占领网络商机!!!! 
    轻松在家,每月3000~~5000的收入!! 
    创业网站:http://ycl.cctve.cn/
    或者加我的QQ咨询、了解: 
    QQ:312178002 手机 13956175341   <耐心解答咨询,无意网赚者勿扰>