struts2拦截器解决请求乱码和输出乱码

很久没用struts2了,感觉很多知识有些模糊了。复习的时候碰到这个的问题,觉得有必要写篇文档记录下。
import java.io.UnsupportedEncodingException;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.StrutsStatics;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class EncodingIntereptor extends AbstractInterceptor {

	private static final long serialVersionUID = 6826256332417695666L;

	@Override
	public String intercept(ActionInvocation invo) throws Exception {
		ActionContext  actionContext = invo.getInvocationContext();
		HttpServletRequest request= (HttpServletRequest) actionContext.get(StrutsStatics.HTTP_REQUEST);
		HttpServletResponse response= (HttpServletResponse) actionContext.get(StrutsStatics.HTTP_RESPONSE);
		 if( request.getMethod().compareToIgnoreCase("post")>=0){  
		      try {  
		    	  	  request.setCharacterEncoding("utf-8"); 
			      } catch (UnsupportedEncodingException e) {  
			    	  e.printStackTrace();  
			      }  
		   }else{  
		      Iterator<String[]> iterval=request.getParameterMap().values().iterator();  
		      while(iterval.hasNext()){  
		    	  String[] parames = iterval.next();  
			       for (int i = 0; i < parames.length; i++) {  
			        try {  
			        	    parames[i]=new String(parames[i].getBytes("iso8859-1"),"utf-8");
			        	} catch (UnsupportedEncodingException e) {   
			        	    e.printStackTrace();  
			        	}  
			       }     
		      	}     
		   	}  
			response.setContentType("text/html;charset=UTF-8"); 
			response.setHeader("Cache-Control", "no-cache");  
			return invo.invoke();  
	}

}
按照这样写后就已经解决乱码问题了,但我在action里想获取拦截器里修正后的数据时,发现struts的拦截器和是servlet里的过滤器不同。
servlet的过滤器能够通过把装饰后的request传递给servlet,这样servlet通过request获取的参数就是修正后的。

但是struts的action获取到HttpServletRequest,因为只有一个参数要获取,就直接用
request.getParameter("username")来获取参数,结果获取到的还是乱码,这个地方让我纠结了很久,一直不知道是什么原因,百度也找不到答案。

经过一段思考,我想到了struts2里的request是以map形式存在的,那么我获取参数集合试试,
结果通过Map<String, String[]>  map = request.getParameterMap(); map.get("username");这样获取到的参数就是修正后的参数了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值