您的位置:首页 > 产品设计 > UI/UE

拦截器利用装饰类的对getParameter()和getParameterValues()方法的重写对中文编码的转换

2016-08-07 00:26 429 查看
效果如下图:



运行如下图所示:



首先在拦截器重写getParameter()和getParametervalues()方法:

package star.july.filter;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class FilterDecorate implements Filter{

public void init(FilterConfig filterConfig) throws ServletException {

}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//对POST方法有用
request.setCharacterEncoding("utf-8");

//用装饰类方法重写getParameter()
//创建装饰类对象
MyRequest myRequest = new MyRequest((HttpServletRequest) request);

chain.doFilter(myRequest, response);

}

public void destroy() {

}

}

//1、继承HttpServletRequest的实现类
class MyRequest extends HttpServletRequestWrapper{
//2、声明一个变量
HttpServletRequest request;

public MyRequest(HttpServletRequest request) {
super(request);
//3、接收被装饰类对象
this.request = request;

}

//4、重写getParameter方法
@Override
public String getParameter(String name) {
try {
//得到原来的参数
String value = request.getParameter(name);
//增强
if("GET".equals(request.getMethod())){
value  = new String(value.getBytes("ISO-8859-1"),"utf-8");
}
//返回增强后的内容
return value;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}

}

//重写getParameterValues方法
@Override
public String[] getParameterValues(String name) {
try {
String[] values = request.getParameterValues(name);
//对GET方法进行转码
if(values !=null && "GET".equals(request.getMethod())){
for(int i = 0 ;i< values.length; i++){
//对每一个元素进行转码
values[i] = new String(values[i].getBytes("ISO-8859-1"),"utf-8");
}
}
//返回增强值
return values;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}

}


然后创建Servlet类接收请求:

package star.july.web;

import java.io.IOException;

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

public class DecorateServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//得到重写后的getParameter方法
String name = request.getParameter("name");
//得到重写后的getParameterValues方法
String[] values = request.getParameterValues("hobby");
//输出重写后的方法
System.out.println(name);
for(int i = 0 ;i<values.length;i++){
System.out.println(values[i]);
}
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}

}


最后是拦截器Filter的xml配置:

<filter>
<filter-name>FilterDecorate</filter-name>
<filter-class>star.july.filter.FilterDecorate</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterDecorate</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: