Struts2中的Wrapper技术:兼容Servlet的秘诀
需积分: 9 29 浏览量
更新于2024-08-18
收藏 369KB PPT 举报
"后台为servlet技术-wrapper在struts2中的应用"
在讨论“Wrapper在struts2中的应用”时,首先需要理解后台从Servlet技术转换到Struts2框架的背景。Servlet是Java Web开发中的基础组件,用于处理HTTP请求和响应,而Struts2是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,它简化了Servlet的使用并提供了更高级的功能。
在升级系统框架时,原有的使用JSP和Servlet的前端代码通常包含大量的JSTL(JavaServer Pages Standard Tag Library)标签和OGNL(Object-Graph Navigation Language)表达式。Struts2框架支持OGNL,它是用于表达和操作对象图的强大的表达式语言,但在转换过程中,可能会遇到如何兼容旧有JSTL标签的问题。
Struts2通过使用包装模式(Wrapper Pattern)解决了这个问题。包装模式允许在不修改原有对象(这里是HttpServletRequest)的基础上,添加新的功能或改变其行为。在Struts2中,它创建了一个名为`StrutsRequestWrapper`的类,该类扩展自`HttpServletRequest`,并覆盖了一些关键方法,如`getAttribute`。
当Struts2接收到请求时,它会使用`Dispatcher`的`wrapRequest`方法将原始的HttpServletRequest包装成`StrutsRequestWrapper`。这样做有几个好处:
1. **增强功能**:`StrutsRequestWrapper`可以添加额外的属性或功能,比如提供对OGNL的支持。即使前端代码仍在使用JSTL表达式,Struts2也能解析并提供数据。
2. **解耦合**:通过包装,Struts2可以独立于底层的HTTP请求处理机制进行工作,使得框架更加灵活,易于维护和扩展。
3. **统一接口**:尽管内部实现了不同的逻辑,但对外仍然保持与HttpServletRequest相同的接口,这降低了对现有代码的改动。
在Struts2针对request的包装中,`StrutsRequestWrapper`对`getAttribute`方法进行了包装,意味着在查找属性时,它首先会尝试从原始的HttpServletRequest中获取,如果找不到,再考虑其他策略。例如,Struts2可能会从ValueStack中查找,这是它处理Action对象和视图数据的地方。如果ValueStack中有匹配的值,JSTL标签仍能正确地显示数据,无需修改前端代码。
此外,`Dispatcher`的`wrapRequest`方法还可能返回`MultiPartRequestWrapper`,这是一个专门处理多部分表单数据(如文件上传)的包装器,确保Struts2能够正确处理这些复杂请求。
Struts2通过包装模式成功地兼容了原有的Servlet应用,减少了升级过程中的工作量,并提供了更高级的特性和控制。这种设计使得开发者能够平滑地过渡到Struts2框架,同时保留了部分原有的JSP和Servlet代码,降低了迁移成本。
340 浏览量
946 浏览量
2021-04-26 上传
2021-06-30 上传
点击了解资源详情
2021-05-04 上传
2021-07-03 上传
2021-03-29 上传
ServeRobotics
- 粉丝: 39
- 资源: 2万+
最新资源
- burj-al-arab
- raytracer.zip_Verilog 跟踪_lpm_divide_verilog跟踪_vhdl
- password-strength-indicator
- 易语言系统进程模块管理
- git_subtree_parent
- lab9:jQuery的
- appMobil
- Waved
- github-slideshow:机器人提供动力的培训资料库
- 易语言系统辅助工具
- Android滴答词典源码.zip
- 在React中开发的应用程序,可模拟CSS Flexbox的使用-JavaScript开发
- Christofides算法
- 钢结构工程设计CAD图纸_单层矩形柱框架结构地下车库结构施工图.zip
- BasicTFGitlabCIDigitalOceanPipeline:基本Terraform,Gitlab CI,Ansible数字海洋部署管道
- 内利斯·Javavontuur