其实中文问题挺好解决的,关键的就两个地方设置对了就ok了。
方法一:
添加一个新类,其继承ActionServlet,并加入request.setCharacterEncoding("latin1");
其中字符集应该和数据库所使用的字符一致
修改连接字符串
方法二:
添加一个新类,其继承RequestProcessor
方法一:1、struts+jdbc情况下:
EncodeActionServlet继承ActionServlet
package classmate;
import org.apache.struts.action.*;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
public class EncodeActionServlet extends ActionServlet
{
protected void process(
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
HttpSession session = request.getSession(true);
if (session.isNew())//session超时{
response.sendRedirect("/logout.jsp");
return;
}request.setCharacterEncoding("latin1");//进行统一的中文转码latin1<1>super.process(request, response);
}
}
EncodeActionServlet在web.xml完成部署
actionServlet
classmate.EncodeActionServlet
1
actionServlet
*.do
还有一个关键的部分是在struts-config.xml中的数据库连接部分如下:
<2>
2、如果是struts+hiberante就在hibernate.cfg.xml的配置的数据库连接部分如下:<?xml version="1.0"encoding="GB2312"?>
org.gjt.mm.mysql.Driver
jdbc:mysql://localhost/struts?useUnicode=true&characterEncoding=latin1 <3>
root
123456
true
net.sf.hibernate.dialect.MySQLDialect
方法二、还是在struts+jdbc下用自己的RequestProcessor去控制。MyRequestProcessor.java
package StudyNews;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.RequestProcessor;
import org.apache.struts.config.ForwardConfig;
import org.apache.commons.logging.Log;
public class MyRequestProcessor extends RequestProcessor {
public MyRequestProcessor() {}
protected boolean processPreprocess( HttpServletRequest request,
HttpServletResponse response ){
try{
request.setCharacterEncoding("latin1");//此处为自己用的数据库的字符集 <4>}
catch(Exception ex){
System.out.println("字符集设置失败");
}
return true;
}
}
它在struts-config.xml中配置如下:
数据库连接方面和上面一样。
总结:关键是<1><2><3><4>处的字符集设置要与自己数据库用的字符集一致。以前在struts
框架下往数据库插入中文失败的原因在于只设置了<1>处而没设置<2>处。