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
添加->浏览;
哈哈,中文终于能正确显示了!

struts乱码解决

struts乱码解决国庆没地方去所以就学习了一下struts,用struts做了一个新闻管理系统;但插入数据库中的中文总是出现乱码,经过一个上午的努力,终于把乱码问题给解决了,以下就是我查找与解决乱码...
  • sxwailyc
  • sxwailyc
  • 2006年10月28日 09:54
  • 1035

struts乱码解决(利用过滤器)

搞了好久,调试发现乱码主要出现在formbean中,所以写一个类进行转码就行,呵呵写一个类进行转码,如import javax.servlet.http.HttpServlet;import java...
  • fan_zhen_hua
  • fan_zhen_hua
  • 2008年03月18日 19:04
  • 586

struts中文乱码解决

 最简单解决办法:继承ActionServlet类编写自己的MyActionServlet,覆盖process方法    protected void process(HttpServletReque...
  • xjspace
  • xjspace
  • 2008年08月18日 15:42
  • 138

安卓使用Gson转化为Json数据出现中文乱码的解决方式

Gson转化为Json的时候,出现了乱码
  • qq_27274997
  • qq_27274997
  • 2017年10月10日 11:20
  • 204

struts2中文乱码终极解决方案

Struts乱码终极解决方案1、  JSP页面设置:"java" contentType="text/html;charset=utf-8"  pageEncoding="utf-8"%>2、  st...
  • djx123456
  • djx123456
  • 2011年07月14日 11:18
  • 787

有关struts.xml的地址和中文编码乱码问题

关于struts.xml文件地址的查找,默认是放置在src目录下,但是也可以放置在和src同级目录的其他目录下面。这个不需要配置也是可以直接找到的,注意图片中的resources目录是sourceFo...
  • DING135DING
  • DING135DING
  • 2015年07月27日 11:31
  • 1031

java中文乱码解决之道(九)—–总结

乱码,我们前台展示的杀手,可能有些朋友和我的经历一样:遇到乱码先按照自己的经验来解决,如果没有解决就google,运气好一搜就可以解决,运气不好可能够你折腾一番了。LZ之所以写这个系列博客就是因为遇到...
  • chenssy
  • chenssy
  • 2015年01月30日 10:47
  • 10771

springmvc(二) 控制器Controller及乱码问题和日期问题的解决

上一篇文章结尾处点了一下映射器和视图解析器http://blog.csdn.net/hnkuo/article/details/51249411 本篇点一下控制器,直接上码 1) org.sp...
  • Hnkuo
  • Hnkuo
  • 2016年04月26日 14:47
  • 315

SSH+mysql整合乱码问题

今天用spring+hibernate+struts2写了一个简单的示例程序,使用spring来管理hibernate处理数据。在保存过后发现表中的数据为乱码,因为不知道乱码到底是出在何处,于是开始单...
  • qq1145174853
  • qq1145174853
  • 2013年05月30日 19:59
  • 904

html中文乱码解决方案

1、html解决方法: 2、web.config解决方法: 3、C#解决方法: FileStream fs = new FileStream(file, FileMode.C...
  • wangbin1986
  • wangbin1986
  • 2011年11月14日 16:49
  • 910
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:struts乱码解决
举报原因:
原因补充:

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