(一)Struts2是什么?

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。

Struts2 是一个相当强大的Java Web开源框架,是一个基于POJO的Action的MVC Web框架。它基于当年的Webwork和XWork框架,继承其优点,同时做了相当的改进。Struts2现在在Java Web开发界的地位可以说是大红大紫,从开发人员的角度来分析,Struts2之所以能够如此的深入开发人员之心,与其优良的设计是分不开的。

(二)Struts2的工作原理

(三)Struts2的工作机制

1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求;

2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin);

3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action;

4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;

5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类;

6、ActionProxy创建一个ActionInvocation的实例。

7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper。

(四)Struts2的优点

1.Struts2基于MVC架构,框架结构清晰,开发流程一目了然,开发人员可以很好的掌控开发的过程。OGNL提供了在Struts2里访问各种作用域中的数据的简单方式,你可以方便的获取Request,Attribute,Application,Session,Parameters中的数据。大大简化了开发人员在获取这些数据时的代码量。

2.使用OGNL进行参数传递。

3.Struts拥有强大的拦截器。Struts2 的拦截器是一个Action级别的AOP,Struts2中的许多特性都是通过拦截器来实现的,例如异常处理,文件上传,验证等。拦截器是可配置与重用的,可以将一些通用的功能如:登录验证,权限验证等置于拦截器中以完成一些Java Web项目中比较通用的功能。在我实现的的一Web项目中,就是使用Struts2的拦截器来完成了系统中的权限验证功能。

4.便于测试。Struts2的Action都是简单的POJO(Plain Ordinary Java Object-简单的java对象),这样可以方便的对Struts2的Action编写测试用例,大大方便了Java Web项目的测试。

5.易于扩展的插件机制 。在Struts2添加扩展是一件愉快而轻松的事情,只需要将所需要的Jar包放到WEB-INF/lib文件夹中,在struts.xml中作一些简单的设置就可以实现扩展。

6.模块化 。Struts2已经把模块化作为了体系架构中的基本思想,可以通过三种方法来将应用程序模块化:

将配置信息拆分成多个文件

把自包含的应用模块创建为插件

创建新的框架特性,即将与特定应用无关的新功能组织成插件,以添加到多个应用中去。

7.全局结果与声明式异常 。为应用程序添加全局的Result,和在配置文件中对异常进行处理,这样当处理过程中出现指定异常时,可以跳转到特定页面,这一功能十分实用。

8.丰富的标签库,大大提高了开发效率

转载于:https://www.cnblogs.com/DoubleEggs/p/5837462.html

【SSH】 之 Struts2相关推荐

  1. 基于SSH(Spring+Struts2+Hibernate)开发健身俱乐部会员管理系统

    你知道的越多,你不知道的越多 点赞再看,养成习惯 如果您有疑问或者见解,或者需要毕业设计项目,大作业指导,购买付费源码等,欢迎指教: 企鹅:869192208 文章目录 一.开发背景 二. 需求分析 ...

  2. maven hibernat mysql_手把手教你用 maven 搭建 SSH (struts2 +hibernate5 + spring5) 项目

    手把手教你搭建 SSH 环境 一.项目环境搭建 1.1 配置 Spring 坐标依赖 1.2 配置 hibernate 坐标依赖 1.3 配置 struts2 坐标依赖 1.4 配置Java EE 坐 ...

  3. java刘保_[SSH] Eclipse+Struts2的简单应用

    终于要开始研究框架了,没有大神的指导,只能自己上网摸索着来,没有唯一对的方案,只能找到最适合自己的就可以了. 首先整理一下,代码是参考别人的代码,按照别人的版本有问题,大概整理了一下,自己重新弄了一个 ...

  4. MyEclipse搭建SSH(Struts2+Spring2+Hibernate3)框架项目教程

    对Struts.spring.hibernate大体上了解一遍后,就是针对这个几个框架的整合了. 怎样整合,请看以下: 第一:Struts2的jar和xml配置文件: jar包: commons-fi ...

  5. Eclipse上搭建SSH(struts-2.2.3 + spring-2.5.6 + hibernate-3.6.8)框架-附源码

    创建Struts项目 整合步骤: 1,在Eclipse中创建一个DynamicWeb Project,本文项目名称为SSH. 2&#

  6. 【SSH】——Struts2中的动态方法调用(一)

    首先我们来看一个简单的调用: 1.在web.xml中配置拦截器StrutsPrepareAndExecuteFilter.StrutsPrepareAndExecuteFilter实现了filter接 ...

  7. java项目ssh中文乱码_【SSH】Struts2处理中文乱码问题总结

    学了很久的java,接触SSH也有一段时间了,写成博文总是有点懒,最近在整理一些思绪,把SSH一点一滴放进博客里,以备以后改进,再学习.以我自己的了解,在进行struts开发的过程中,总也是出现很多的 ...

  8. ssh(1)struts2

    1.b/s框架 browser-servlet请求-响应的处理过程的集合体 2.MVC模式(持久层,表示层,业务逻辑层) M 数据模型(模型):作为程序的核心载体,用于传输数据(bean  hiber ...

  9. SSH笔记-Struts2的通配符

    1.一个 Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系 (就是一个action类里面包含多个能被不同act ...

  10. SSH笔记-Struts2的语言国际化

    1.配置国际化资源文件 四种方法 1.action范围资源文件:在action类所在路径建立 actionname_language_country.properties,适用于指定action类 如 ...

最新文章

  1. simulink传递函数_又见Simulink库模型之(6):查找表
  2. C#实现身份证号码验证的方法
  3. Swift之String的简单实用
  4. LINGO 12安装教程
  5. 马踏棋盘算法(骑士周游)
  6. 开源个小工具simple-repo
  7. 已经连接到空闲例程的解决方法
  8. 如何把catia完全卸载干净_catia软件无法卸载怎么办?彻底删除catia等三维软件的方法...
  9. 文本数据抽取经验总结
  10. Windows Server 2008 使用蓝牙的问题
  11. 配置Maven环境变量
  12. 详解vue中数据传递(父传子、子传父、兄弟之间以及vuex)代码附上
  13. [ZZ]通过修改键盘映射替代损坏按键
  14. 跳转第三方App或网页进行导航
  15. Linux2.6--中断机制中的 ksoftirqd
  16. flex布局(弹性盒子三)
  17. SECS/GEM/GEM300/EAP 讲解(三)半导体协议
  18. 盘点大数据开发常用的四种编程语言
  19. C++学习系列---读取文件名存入txt和从txt读取每行信息
  20. ECPP——利用有限域上的椭圆曲线,精确判定素数的算法

热门文章

  1. CSS的概念及优势(简单介绍)
  2. 计算机组成原理—存储系统总结
  3. Unity3D基础18:物体查找与控制
  4. Codeforces Round #466 (Div. 2): E. Cashback(单调队列+DP)
  5. bzoj 2502: 清理雪道(有下界的最小流)
  6. python学习之文件处理
  7. opencv 图像轮廓特征 图像面积,轮廓周长,外接矩形、最小外接矩形、最小外接圆、拟合椭圆
  8. 改变灰度图像直方图的均值和标准差
  9. python实现一个简单的【图像中物体坐标】标注小工具
  10. 贺利坚老师汇编课程36笔记:[BX+SI+IDATA]和[BX+DI+IDATA]寻址