Struts2框架小知识
Struts2 是 Apache 软件组织推出的一个相当强大的 Java Web 开源框架,本质上相当于一个 servlet。Struts2 基于 MVC 架构,框架结构清晰。通常作为控制器(Controller)来建立模型与视图的数据交互,用于创建企业级 Java web 应用程序
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。大家可以看看之前分享过的一篇介绍什么是MVC:https://bbs.huaweicloud.com/blogs/243367
历史背景
Struts2最初被称为WebWork 2,是在Struts1和WebWork技术的基础上合并而成的全新框架。它以WebWork为核心,结合了Struts1的部分优点,旨在简化Web应用程序的开发过程。
主要特点
- 简洁可扩展:Struts2提供了一个简洁且可扩展的架构,使开发者能够轻松创建和维护复杂的Web应用程序。
- 支持多种视图技术:它支持多种视图技术,包括JSP、FreeMarker等,提供了更大的灵活性。
- 强大的标签库:Struts2提供了丰富的标签库,能够有效减少页面代码,提高开发效率。
- 良好的Ajax支持:框架对Ajax有良好的支持,便于实现异步数据交互。
- 智能的默认设置:Struts2拥有智能的默认设置,不需要进行繁琐的配置即可完成大多数项目的开发。
核心功能
- 请求数据自动封装:Struts2能够自动将请求数据封装到JavaBean中,方便数据处理。
- 文件上传功能:框架提供了方便的文件上传功能,支持多种文件上传方式。
- 国际化功能简化:Struts2简化了国际化功能的实现,便于开发多语言应用程序。
- 数据校验功能:它提供了强大的验证框架,能够在服务器端对用户输入进行验证。
执行流程
- 服务器启动阶段:加载web.xml文件,初始化StrutsPrepareAndExecuteFilter,加载struts.xml和struts-default.xml等配置文件。
- 访问阶段:创建配置的Action对象,执行默认拦截器栈中的拦截器,最后执行Action的业务方法。
开发步骤
- 引入jar文件:导入Struts2开发所需的jar包,如struts2-core、xwork-core等。
- 配置web.xml:在web.xml中配置Struts2的核心过滤器StrutsPrepareAndExecuteFilter。
- 开发Action:创建继承自ActionSupport的Action类,实现业务逻辑。
- 配置struts.xml:在struts.xml中配置Action与请求路径的映射关系,以及结果视图的跳转等信息。
应用场景
Struts2适用于开发各种规模的Java Web应用程序,特别是对于需要快速开发和易于维护的项目。它在企业级应用开发中被广泛使用,能够提高开发效率和代码质量。
Struts2详细工作流程?
a.浏览器发出welcome.action请求
b.请求到达Struts的Filter控制器(由于web.xml配置)
c.Struts控制器判断请求类型,如果是/welcome.action或/welcome格式请求,将调用struts.xml配置,寻找对应的Action组件
d.调用Action组件的execute方法处理请求,最后返回一个String视图标识
e.Struts控制器根据视图标识寻找相应的JSP(struts.xml中result配置)
f.调用JSP视图生成响应界面给浏览器显示。
Struts2控制流程?
1)请求到来
2)创建ValueStack(Action放栈顶),进行初始化
3)调用拦截器Interceptor,在拦截器中是可以访问ValueStack的
4)调用Action,执行execute()方法
5)调用Result,Result负责把数据显示给用户
6)最后到页面,通过标记库(Taglib)取出数据
Struts2中常用的集中Result组件?
1)JSP响应
dispatcher :采用请求转发方式调用JSP组件响应。
redirect:采用请求重定向方式调用JSP组件响应。(在重定向后,原request和action都被销毁掉,因此在JSP获取不到值)
2)Action响应
redirectAction:采用重定向方式发出一个*.action请求
chain:采用转发方式发出一个*.action请求
3)流响应
典型功能:验证码和下载。
stream:可以将Action中的一个InputStream类型属性以流方式响应输出。
4)JSON响应
负责对Ajax请求进行数据响应。
json:可以将Action中的一个属性或多个属性以json格式响应输出
(注意:使用前需要引入struts-json-plugin.jar,然后将<package>元素的extends设置成"json-default")
Struts2是一个基于MVC模式的轻量级Web框架,以下是它的优缺点:
优点
- 实现MVC模式:Struts2实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现。
- 丰富的标签库:Struts2提供了丰富的标签库,大大提高了开发的效率。
- 强大的拦截器:Struts2提供了丰富的拦截器实现,能够在请求处理的前后进行各种操作。
- 易于配置和维护:通过简单、集中的配置来调度业务类,使得配置和修改都非常容易。
- 提供Exception处理机制:Struts2提供了强大的异常处理机制,能够在配置文件中配置异常的映射,方便对异常做相应的处理。
- 支持插件扩展:Struts2具有良好的可扩展性,支持插件开发,用户可以通过简单的配置将自己开发的插件与Struts2框架融合。
- 良好的Ajax支持:Struts2提供了良好的Ajax支持,方便进行异步数据交互。
- 智能的默认设置:Struts2拥有智能的默认设置,不需要另外进行繁琐的设置,使用默认设置就可以完成大多数项目程序开发所需要的功能。
缺点
- 前后端不分离:Struts2中bean与前端jsp高度绑定,在项目较大、逻辑复杂、人员分工细化时,不利于前后端的独立开发和维护。
- 参数获取和处理繁琐:Struts2中Action获取从jsp传来的参数时较为麻烦,当请求参数较多时,Action类会因表单属性过多而显得臃肿、杂乱。
- 校验机制不够灵活:Struts2的校验功能相对繁琐,对于多个字段出错时返回到不同画面等复杂校验需求,实现起来较为困难。
- 存在安全隐患:Struts2曾曝出多个高危安全漏洞,如远程代码执行漏洞和开放式重定向漏洞等,安全性有待提高。
- 对Servlet依赖性强:Struts2处理Action时依赖于ServletRequest和ServletResponse,无法摆脱Servlet容器。
- 前端表达式语言处理能力有限:Struts2集成的JSTL表达式语言在处理Collection和索引属性方面较弱。
- 对Action执行控制困难:在Struts2中创建Action后,控制其执行顺序较为困难,甚至可能需要重新编写Servlet来实现特定的执行顺序需求。
- 学习曲线较陡:使用Struts2需要熟悉JSP、Servlet APIs标准以及其自身的复杂框架,学习成本相对较高。
- 文档不够完善:相比于Servlet和JSP APIs标准,Struts2的文档相对缺乏,可能会给开发者在学习和使用过程中带来一定的困难。
- 点赞
- 收藏
- 关注作者
评论(0)