struts2 | 基本原理
Posted 数据与共享
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2 | 基本原理相关的知识,希望对你有一定的参考价值。
“Apache Struts is a free, open-source, MVC framework for creating elegant, modern Java web applications. It favors convention over configuration, is extensible using a plugin architecture, and ships with plugins to support REST, AJAX and JSON.”
上述文字来源与Struts的官网首页。即:Apache Struts是一个免费的开源MVC框架,用于创建优雅的现代Java Web应用程序。 它支持约定优于配置,可以使用插件体系结构进行扩展,并附带支持REST,AJAX和JSON的插件。
01
—
什么是MVC框架?
1.MVC是项目的分层或者设计思想,是一种软件设计典范。MVC(Model View Controller 模型-视图-控制器)。
Model:表示应用程序核心(比如数据库记录列表)。
View:显示数据(数据库记录)。
Controller:处理输入(写入数据库记录)。
2.MVC模式的某种框架,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。最典型的MVC就是JSP + servlet + javabean的模式。
02
—
Struts2的原理?
Struts2的工作原理图如下:
1.FilterDispatcher
客户端向服务端发出请求。请求提交的过程要经过一系列的Servlet过滤器过滤。过滤器有图中三种。其中:FilterDispatcher,是Struts2中的核心,是必须使用的过滤器,在Struts2的API中已经定义,必须在web.xml中进行配置,如下图:
2.ActionMapper
FilterDispatcher调用ActionMapper,ActionMapper判断该请求是否需要调用某个Action。并反馈结果给FilterDispatcher。
3.ActionProxy
FilterDispatcher发命令给ActionProxy,ActionProxy通过Configuration Manager解析框架的配置文件struts.xml,找到需要调用的Action类。
4. ActionProxy创建一个ActionInvocation实例。
5.ActionInvocation实例使用命令模式回调Action中的execute方法,Action调用业务逻辑完成业务逻辑。在调用Action的前后,将调用该Action涉及的相关拦截器。
6.Action执行完毕,根据Struts.xml中的配置文件找到对应的Result,跳转到对应的页面。例如:jsp ,FreeMarker。
03
—
Struts2的优点?
1.Struts2基于MVC架构,框架结构清晰。
2.struts2使用JSTL,也支持更灵活的OGNL(对象图形符号语言)。
3.struts1的核心是个servlet ,与servlet API严重耦合,难于测试,而且还是单例,就造成了一定的限制。资源必须为线程安全或者同步。而struts2的核心是个过滤器,为每一个请求实例化一个对象,所以没有线程安全的问题。
4.Result 方式的页面导航,通过 Result 标签很方便的实现重定向和页面跳转;
5.拦截器强大,采用面向切面的编程思想,易于扩展。
6.拥有简单的插件,只需要放入响应的 jar 包,任何人都可以扩展 Struts2 框架,比如: 自定义拦截器、自定义结果类型、自定义标签等,为 Struts2 定制需要的功能,不需要什么特殊的配置,并且可以发布给其他人使用。
04
—
Struts2和SpringMVC对比?
这是我很早之前画的SpringMVC实现原理图:
1.拦截级别:
Struts2是类级别的拦截, 一个类对应一个request上下文。
SpringMVC是方法级别的拦截,一个方法对应一个request上下文。
2.内存占用:
由于Struts2需要针对每个request进行封装,把request,session等servlet生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全,所以在原则上,是比较耗费内存的。
3.配置文件:
Struts2有以自己的interceptor机制。SpringMVC用的是独立的AOP方式,这样导致Struts2的配置文件量还是比SpringMVC大。
4.ajax
SpringMVC集成了Ajax,使用非常方便,只需一个注解@ResponseBody就可以实现,然后直接返回响应文本即可,而Struts2拦截器集成了Ajax,在Action中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便。
5.验证
SpringMVC验证支持JSR303,处理起来相对更加灵活方便,而Struts2验证比较繁琐,感觉太烦乱。
6.与Spring配套使用
Spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高(当然Struts2也可以通过不同的目录结构和相关配置做到SpringMVC一样的效果,但是需要xml配置的地方不少)。
7.设计思想
Struts2更加符合OOP的编程思想, SpringMVC就比较谨慎,在servlet上扩展。
8.开发效率
SpringMVC开发效率和性能高于Struts2。
9.SpringMVC可以认为已经100%零配置。
说明:本篇文章的内容来源于书籍和百度。而且对有些内容我也没有亲自验证,大家有什么问题,可以随时留言,我们一起探讨。
以上是关于struts2 | 基本原理的主要内容,如果未能解决你的问题,请参考以下文章
《Java从入门到放弃》入门篇:Struts2的基本访问方式