1. 增强HttpServletResponse对象
1. 实现一个增强的HttpServletResponse类,需要继承
javax.servlet.http.HttpServletRequestWrapper类,通过重写自己需要增强的方法来实现(这种模式就叫做装饰者模式),使用该增强类在加上过滤器就可以实现无编码转换处理代码。
public class MyRequest extends HttpServletRequestWrapper{
private HttpServletRequest req;
public MyRequest(HttpServletRequest request) {
super(request);
req=request;
}
@Override
public String getParameter(String name) {
//解决编码问题,无论是post还是get请求,都不需要在业务代码中对编码再处理
String method=req.getMethod();
if("get".equalsIgnoreCase(method)){
try {
String str=req.getParameter(name);
byte[] b=str.getBytes("iso8859-1");
String newStr=new String(b, "utf-8");
return newStr;
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else if("post".equalsIgnoreCase(method)){
try {
req.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//绝对不能删除此行代码,因为此行代码返回的就是编码之后的数据
return super.getParameter(name);
}
}
在过滤器中应用
public class FilterTest4 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//生成增强的HttpServletRequest对象
HttpServletRequest req=(HttpServletRequest) request;
MyRequest myReq=new MyRequest(req);
//将增强的HttpServletRequest对象传入过滤器执行链中,在后面传入的request对象都会是增强的HttpServletRequest对象
chain.doFilter(myReq, response);
}
@Override
public void destroy() {}
}
2. 文件上传原理过程
1. JavaWeb中实现文件上传:
客户端:HTML页面需要一个
本文由网上采集发布,不代表我们立场,转载联系作者并注明出处:http://www.yujujie.cn/shbk/39366.html
