struts乱码解决

转载 2007年05月10日 11:43:00
 

struts乱码解决
国庆没地方去所以就学习了一下struts,用struts做了一个新闻管理系统;
但插入数据库中的中文总是出现乱码,经过一个上午的努力,终于把乱码问题给解决了,以下就是我查找与解决乱码的过程:
1,既然显示在网页那的是乱码,首先得确定在数据库中的内容是否能正确显示,我用的数据库为MYSQL4.1,
打开控制台,select * from news;果然,在数据库中所插入的内容都为乱码,然后我试下手动插入中文,
出现错误,data too long.......,怎么可能?我用的类型为varchar(100),而插入的数据只为三个中文,不应该会出现数据过长的错误呀,
后来想想可能是编码的问题,所以把原来的表删了,重建一个,并设置编码为GB2312
CREATE TABLE NEWS(
ID INT PRIMARY KEY,
TITLE   VARCHAR(100) NOT NULL,
CONTENT VARCHAR(400) NOT NULL,
AUTHOR  VARCHAR(40) NOT NULL,
TIME    DATE           NOT NULL,
KEYWORD VARCHAR(20) NOT NULL,
TYPE    INT        NOT NULL
)CHARSET=GB2312;
然后重新插入,OK可以正确的插入中文了,数据库方面的问题解决;
2.然后在网页那重新插入中文,同样还是乱码!!
以下是我的添加新闻的类:
package newsBean;

import java.util.Vector;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.sql.DataSource;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.validator.DynaValidatorForm;

/**
 * @author sxwailyc
 *
 * TODO 要更改此生成的类型注释的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public class NewsAddAction extends Action {

 /* (非 Javadoc)
  * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
  */
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) throws Exception {
  // TODO 自动生成方法存根
  DynaValidatorForm newsForm =(DynaValidatorForm)form;
  String title=(String)newsForm.get("title");
  System.out.println(title);  
  String content=(String)newsForm.get("content");
  String author =(String)newsForm.get("author");
  String keyword =(String)newsForm.get("keyword");
  Integer newsType= (Integer)newsForm.get("newsType");
  HttpSession session=request.getSession();
  Vector newsList=new Vector();
  ServletContext context=servlet.getServletContext();
  DataSource dataSource=(DataSource)context.getAttribute(Constants.DATASOURCE_KEY);
  DB db=new DB(dataSource);
  String PageForward=null;
  News news=new News();
  news.setTitle(title);
  news.setContent(content);
  news.setAuthor(author);
  news.setKeyword(keyword);
  news.setType(newsType.intValue());
  ActionMessages errors = new ActionMessages();
  if(news.Insert(db)){
   newsList =News.SearchNewsTitle(db);
   session.setAttribute(Constants.NEWS_LIST_KEY,newsList);
   PageForward="toAdminMain";
  }
  else{
   errors.add(ActionMessages.GLOBAL_MESSAGE,new ActionMessage("errors.insertFail"));
   if(!errors.isEmpty()){
    saveErrors(request,errors);
   }
   PageForward="toWrong";
  }
  db.close();
  return mapping.findForward(PageForward);
  
}
}
首先考虑到在从提交表单的页面传递过来的数据是否是乱码呢?
在这里加了一句String title=(String)newsForm.get("title");System.out.println(title);
果然,在这里打印出来的title居然是乱码!!!!!苦恼!就是这个问题,弄了一个多钟,
最后重新检查一下提表单的JSP页面,原来在表单那的<form method="post"> 少写了post!!!
导制表单递数据时出现乱码,添加method="post";重新system.out.println("title");
中文正确显示!!
3.以为应该能正确显示中文了,添加->浏览,还是乱码! 
应该是页面编码的确良问题!
解决方法:
写一个自己的ActionServlet
MyActionServlet
public class MyActionServlet extends ActionServlet {

 /* (非 Javadoc)
  * @see org.apache.struts.action.ActionServlet#process(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
  */
 protected void process(HttpServletRequest request, HttpServletResponse response)
   throws IOException, ServletException {
  // TODO 自动生成方法存根
  request.setCharacterEncoding("GB2312");//设置编码为GB2312
  response.setCharacterEncoding("GB2312");
  System.out.println("设置成功");
  super.process(request, response);
 }
}
在web.xml中配置一下
        <servlet>
  <servlet-name>actionServlet</servlet-name>
  <servlet-class>newsBean.MyActionServlet</servlet-class>
 </servlet>
4.这下应试没问题了吧,添加->浏览.又是乱码,再重新检查一遍,都没问题呀!!
最后想想,会不会是数据源那的编码问题,在struts_config.xml那设置数据库编码
<set-property property="url"
value="jdbc:mysql://localhost:3306/sample?useUnicode=true&amp;characterEncoding=GB2312"/>
重启tomcat
添加->浏览;
哈哈,中文终于能正确显示了!

相关文章推荐

如何解决struts2中烦人乱码

  • 2013年03月25日 22:38
  • 1KB
  • 下载

struts 2. 5.2解决中文乱码

  • 2016年09月27日 14:13
  • 26.42MB
  • 下载

解决struts2以GET方式提交表单中文乱码问题

之前用POST方式提交表单一直没有遇到中文乱码的方式,最近使用GET方式提交,发现中文乱码。 检测了struts.xml和web.xml等地方读配置好了 struts.xml web.x...

struts乱码解决方案

  • 2010年11月23日 09:14
  • 1KB
  • 下载

struts,ajax乱码解决方案

  • 2007年09月04日 09:43
  • 78KB
  • 下载

struts2中文乱码解决方法

struts2中文乱码解决方法 终于在自己的项目中引入struts2了,但一上来就来一个中文乱码的问题。google了半天找了几个不痛不痒的结果,很是不满意。又调试了半天,终于解决了中文乱码的问...

struts2.1.6解决乱码 补充

  • 2009年04月22日 14:57
  • 2KB
  • 下载

struts,ajax乱码解决方案

乱码问题好像跟我们中国程序员特别有缘,一直困扰着我们,从开始的JSP乱码问题,STRUTS乱码问题,到现在的AJAX乱码问题,无一不是搞得许多程序员焦头烂额的,整天骂XXX产品对中文支持不了,UTF-...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:struts乱码解决
举报原因:
原因补充:

(最多只允许输入30个字)