struts乱码解决

    技术2022-05-11  24

    struts乱码解决国庆没地方去所以就学习了一下struts,用struts做了一个新闻管理系统;但插入数据库中的中文总是出现乱码,经过一个上午的努力,终于把乱码问题给解决了,以下就是我查找与解决乱码的过程:1,既然显示在网页那的是乱码,首先得确定在数据库中的内容是否能正确显示,我用的数据库为MYSQL4.1,打开控制台,select * from news;果然,在数据库中所插入的内容都为乱码,然后我试下手动插入中文,出现错误,data too long.......,怎么可能?我用的类型为varchar(100),而插入的数据只为三个中文,不应该会出现数据过长的错误呀,后来想想可能是编码的问题,所以把原来的表删了,重建一个,并设置编码为GB2312CREATE 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.以为应该能正确显示中文了,添加->浏览,还是乱码!  应该是页面编码的确良问题!解决方法:写一个自己的ActionServletMyActionServletpublic 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&characterEncoding=GB2312"/>重启tomcat添加->浏览;哈哈,中文终于能正确显示了!


    最新回复(0)