b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

serverlet_servlet工作原理面试题_serverlet和jsp(3)

电脑杂谈  发布时间:2017-01-11 08:04:35  来源:网络整理

小结

Servlet filter可以在调用一个servlet的服务方法后,拦载或加工HTTP请求。尽管这非常诱人,但其实际使用却有所限制,因为你不能改变HttpServletRequest对象。serverlet

这时候装饰模式派上了用场。本文演示了如何通过应用装饰模式来“修改”HttpServletRequest对象,从而使你的servlet filter更加有用。在上面filter例子中,filter改了request参数中的用户输入,而这一点,如果没有装饰request对象,你是无论如何也不可能做到的。

---------------------------------------------------------

package wrapper;

import java.io.UnsupportedEncodingException;

import java.net.URLDecoder;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletRequestWrapper;

public class GetHttpServletRequestWrapper extends HttpServletRequestWrapper {

private String charset = "UTF-8";

public GetHttpServletRequestWrapper(HttpServletRequest request) {

super(request);

}

/**

serverlet_servlet工作原理面试题_serverlet和jsp

* 获得被装饰对象的引用和采用的字符编码

* @param request

* @param charset

*/

public GetHttpServletRequestWrapper(HttpServletRequest request,

String charset) {

super(request);

this.charset = charset;

}

/**

* 实际上就是调用被包装的请求对象的getParameter方法获得参数,然后再进行编码转换

*/

public String getParameter(String name) {

String value = super.getParameter(name);

value = value == null ? null : convert(value);

return value;

}

public String convert(String target) {

System.out.println("编码转换之前:" + target);

try {

return new String(target.trim().getBytes("ISO-8859-1"), charset);

} catch (UnsupportedEncodingException e) {

return target;

}

}

}

------------

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

//设置请求响应字符编码

request.setCharacterEncoding(charset);

response.setCharacterEncoding(charset);

//新增加的代码

HttpServletRequest req = (HttpServletRequest)request;

if(req.getMethod().equalsIgnoreCase("get"))

{

req = new GetHttpServletRequestWrapper(req,charset);

}

System.out.println("----请求被"+config.getFilterName()+"过滤");

//传递给目标servlet或jsp的实际上时包装器对象的引用,而不是原始的HttpServletRequest对象

chain.doFilter(req, response);

System.out.println("----响应被"+config.getFilterName()+"过滤");

}


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-25526-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...