关于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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值