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页面需要一个
其后世界各国相继认同。把全世界自东到西划分为24 个时区。以伦敦附近的格林威治天文台为零度,通过零度的这条线叫子午线 (meridian),由它把地球分为东西两个半球。全世界自东到西划分为24 个时区,没区经度15 度,与邻区的时差为一小时。这就是地区时差。镂通表镂通表(Skeletonwatch)虽然本身不属于复杂功能表一类,但作为一种装饰技巧,有时也被;列为复杂功能。英文名称“Skeleton”较恐 怖,本身含有“骸骨”之意,即是说这种表只剩下骸骨——各种机件像穿透视装那样,暴露无疑。诸如摆轮的来回摆动、擒纵器的一擒一纵、过轮的加速作用等,都可以看得一清二楚。