关于Struts的中文乱码问题完美解决方案

 看了很多也找了很多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

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页