小结

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);

}

/**

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

* @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

serverlet 原理_serverlet_servlet工作原理面试题_serverlet和jsp(3)相关推荐

  1. serverlet 原理_serverlet_servlet工作原理面试题_serverlet和jsp

    Servlet规范中所引入的filter令人心动不已,因为它引入了一个功能强大的拦截模式.Filter是这样一种Java对象,它能在request到达servlet的服务方法之前拦截HttpServl ...

  2. kafka分区与分组原理_Kafka工作原理

    Kafka工作原理 Kafka工作原理 4.1. topic和消息 4.2. Producer 4.3. Consumer 4.4. Kafka核心特性 4.5. consumer.consumer ...

  3. bootloader功能介绍/时钟初始化设置/串口工作原理/内存工作原理/NandFlash工作原理...

    bootloader功能介绍 初始化开发板上主要硬件(时钟,内存,硬盘), 把操作系统从硬盘拷贝到内存,然后让cpu跳转到内存中执行操作系统. boot阶段 1.关闭影响CPU正常执行的外设 -关闭看 ...

  4. 冯诺依曼原理计算机称为,冯·诺依曼提出的计算机工作原理又称为 工作原理。...

    冯·诺依曼提出的计算机工作原理又称为 工作原理. 更多相关问题 Y211是一种靠液压动力坐封的封隔器,而Y441或Y445是一种靠机械坐封的封隔器. 美容心理诊断对美容医学的意义 肾功能不全的老年患者 ...

  5. 太阳能电池板原理及工作原理

    本文转载于: http://www.go-gddq.com/html/NYLiYHeHuiShou/2013-04/1117691.htm 太阳能电池板原理及工作原理 随着全球能源日趋紧张,太阳能成为 ...

  6. 电热水器工作过程 c语言,电热水器工作原理—电热水器工作原理及使用注意事项介绍...

    电热水器现在已经成为了一种最为受到消费者喜爱的热水设备,而在我们大家购买电热水器的时候,并不是很了解电热水器,所以今天小编就来为大家介绍一下电热水器的一些工作原理及一些使用中的注意事项,希望可以帮助大 ...

  7. 电子邮件服务器的工作原理,电子邮件工作原理 电子邮件有什么特点呢

    电子邮件是交流信息的一种通信方式,可以用来传输文件和图片,还是非常方便的.很多人对电子邮件的工作原理感到好奇,电子邮件工作原理是怎样的?电子邮件有什么特点呢? 电子邮件工作原理 电子邮件工作原理 电子 ...

  8. [JavaScript][AJAX]onreadystatechange事件;AJAX含义及组成部分;AJAX工作原理/HTTP工作原理;一个页面从输入url到呈现网页过程;FormData对象;防抖

    目录 onreadystatechange事件 AJAX含义及组成部分 AJAX工作原理/HTTP工作原理 一个页面从输入url到呈现网页过程 TCP三次握手图示 渲染引擎渲染网页流程图 ​编辑 Fo ...

  9. 了解WiFi的原理、工作原理以及相关的标准。

    Wi-Fi 是 Wireless Fidelity 的缩写,是无线局域网 (WLAN) 的一种常用技术.它使用频率为 2.4GHz 和 5GHz 的高频电波传送数据. Wi-Fi 工作原理: 发送端: ...

最新文章

  1. 第二周期的第一次站立会议
  2. Android各种报错问题汇总
  3. 在Win10下安装python+tensorflow-gpu-2.4 虚拟环境
  4. matlab hist函数_算法工匠MATLAB专训营:Matlab绘图,小试牛刀
  5. 摆脱“空”检查的盛宴:使用JSON Patch正确执行PATCH
  6. react+redux+node报错Tapable.plugin is deprecated. Use new API on `.h ooks` instead
  7. 《学习之道》第六章习惯的部分-反应程序
  8. 阿里云HBase全新发布X-Pack 赋能轻量级大数据平台
  9. 08. 切勿创建包含auto_ptr的容器
  10. 拓端tecdat|R语言计算资本资产定价模型(CAPM)中的Beta值和可视化
  11. VC如何打开代码对应的界面编辑窗口
  12. java实验小狗状态_Java第6章-接口与多态实验2(小狗的状态)
  13. SumatraPDF安装包
  14. 数据库设计(有实例)
  15. vscode 搭建C语言开发环境
  16. 宠物王国6java变态版,宠物王国bt版修改器下载
  17. LeetCode知识点总结 - 1179
  18. 解决“: no such file or directory, scandir ‘..\node_modules\node-sass\vendor“
  19. unity3d 本地化数据PlayerPrefs详解
  20. mvn No proxies configured downloading directly

热门文章

  1. 计算机组成原理(详细)
  2. 基于Springboot的书籍学习平台
  3. 杨超越杯编程大赛登上 GitHub,程序员为追星都开发了什么?
  4. 卡在Successfully installed Python 2.7
  5. 自动化运行JMeter下的所有脚本
  6. Stata做空间杜宾模型、莫兰指数等操作
  7. python 发送数据到Blynk服务器
  8. Qbao Network 一周项目进展(10.31 - 11.7)
  9. 不用密码解密压缩文件(CRC32算法)
  10. 测控技术与仪器应该学计算机哪些,测控技术与仪器专业学什么