看了很多也找了很多struts中文乱码问题的帖子和Blog,但是都是很繁琐的介绍和解决乱码问题!最终经过自己研究,得出一套简单而有效的解决方案,分析如下:
分析原理:
Struts的核心是将所有的Servlet提交到一个ActionServlet中进行处理,所以,如果ActionServlet中的乱码问题解决,那么整个项目的乱码问题将得以解决!我们都知道,在Servlet中解决乱码问题时,是设置response和request的字符集,那么我们在Struts中,也设置它的字符集,将其字符集转换为中文字符集,那么问题可以得到解决,而在Struts中不可以直接设置response和request。由此可见,我们可以重写ActionServlet类,来解决这个问题!
开始解决问题:
相关引包:
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionServlet;
我们新建一个类,并继承ActionServlet,并设置response和request的字符集为中文字符集
public class Zh extends ActionServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException
{
request.setCharacterEncoding("GBk");
response.setContentType("text/html;charset=gbk");
super.doGet(request, response);
}
public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException
{
request.setCharacterEncoding("GBk");
response.setContentType("text/html;charset=gbk");
super.doPost(request, response);
}
}
这样,我们就重写了ActionServlet类中的doGet和doPost方法,由于是继承ActionServlet类所以原有的功能不变。下面我们用写好的新ActionServlet类替换掉原有的ActionServlet类,让所有的提交都提交到我们的新ActionServlet类上来,修改web.xml配置文件,如下:
修改<servlet>标签中的
<servlet-name>action</servlet-name>
<servlet-class>com.hy.bean.Zh</servlet-class>
其中,“com.hy.bean.Zh”是我们写好的新ActionServlet类的位置,把原有的ActionServlet替换掉!
这样,所有提交到Struts的文件都会提交到我们这个已经设置了response和request中文字符的新ActionServlet类上来,这样就解决了Struts中文乱码的问题!
技术探讨Email:jki555@163.com