1.Struts 2基本流程

Struts 2框架本身可以大致分3部分:核心控制器FilterDispatcher、业务总监Action与用户实现企业业务逻辑组件。

核心控制器FilterDispatcher是Struts 2框架的基础。包括了框架内部的控制流程和处理机制。业务控制器Action和业务逻辑组件是须要用户来自己实现的。用户在开发Action和业务逻辑组件的同一时候,还须要编写相关的配置文件,供核心控制器FilterDispatcher来使用。 Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本同样,所以说Struts 2是WebWork的升级版本号。

基本简要流程例如以下:

1、client浏览器发出HTTP请求。

2、依据web.xml配置,该请求被FilterDispatcher接收。

3、依据struts.xml配置。找到须要调用的Action类和方法,并通过IoC方式。将值注入给Aciton。

4、Action调用业务逻辑组件处理业务逻辑,这一步包括表单验证。

5、Action运行完成,依据struts.xml中的配置找到相应的返回结果result,并跳转到相应页面。

6、返回HTTP响应到client浏览器。

2.核心控制器:FilterDispatcher

FilterDispatcher是Struts 2框架的核心控制器。该控制器作为一个Filter执行在Web应用中,它负责拦截全部的用户请求。当用户请求到达时,该Filter会过滤用户请求。

假设用户请求以action结尾,该请求将被转入Struts 2框架处理。

Struts 2框架获得了*.action请求后,将依据*.action请求的前面部分决定调用哪个业务逻辑组件,比如。对于login.action请求。Struts 2调用名为login的Action来处理该请求。

Struts 2应用中的Action都被定义在struts.xml文件里。在该文件里定义Action时,定义了该Action的name属性和class属性。当中name属性决定了该Action处理哪个用户请求,而class属性决定了该Action的实现类。

Struts 2用于处理用户请求的Action实例,并非用户实现的业务控制器。而是Action代理——由于用户实现的业务控制器并没有与Servlet API耦合,显然无法处理用户请求。

而Struts 2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求參数解析出来,传入到Action中,并回调Action 的execute方法来处理用户请求。

显然。上面的处理过程是典型的AOP(面向切面编程)处理方式。

用户实现的Action类不过Struts 2的Action代理的代理目标。

用户实现的业务控制器(Action)则包括了对用户请求的处理。用户的请求数据包括在 HttpServletRequest对象里,而用户的Action类无需訪问HttpServletRequest对象。

拦截器负责将 HttpServletRequest里的请求数据解析出来。并传给业务逻辑组件Action实例。

3.业务控制器

业务控制器组件就是用户实现Action类的实例。Action类里通常包括了一个execute方法,该方法返回一个字符串——该字符串就是一个逻辑视图名。当业务控制器处理完用户请求后,依据处理结果不同。execute方法返回不同字符串   ——每一个字符串相应一个视图名。

程序猿开发出系统所须要的业务控制器后,还须要配置Struts 2的Action。即须要配置Action的例如以下三个部分定义:

—  Action所处理的URL。

—  Action组件所相应的实现类。

—  Action里包括的逻辑视图和物理资源之间的相应关系。

每一个Action都要处理一个用户请求。而用户请求总是包括了指定URL。当Filter Dispatcher拦截到用户请求后,依据请求的URL和Action处理URL之间的相应关系来处理转发。

4.Struts 2的模型组件

实际上,模型组件已经超出了MVC框架的覆盖范围。

对于Struts2框架而言,通常没有为模型组件的实现提供太多的帮助。

通常指系统的业务逻辑组件。而隐藏在系统的业务逻辑组件以下的,可能还包括了DAO、领域对象等组件。

通常,MVC框架里的业务控制器会调用模型组件的方法来处理用户请求。

也就是说。业务逻辑控制器不会对用户请求进行不论什么实际处理。用户请求终于由模型组件负责处理。业务控制器仅仅是中间负责调度的调度器。这也是称Action为控制器的原因。

当控制器须要获得业务逻辑组件实例时。通常并不会直接获取业务逻辑组件实例。而是通过工厂模式来获得业务逻辑组件的实例。或者利用其它IoC容器(如Spring容器)来管理业务逻辑组件的实例。

5.Struts 2的视图组件

Struts 2已经改变了Struts 1仅仅能使用JSP作为视图技术的现状,Struts 2同意使用其它的模板技术,如FreeMarker、Velocity作为视图技术。

当Struts 2的控制器返回逻辑视图名时。逻辑视图并未与不论什么的视图技术关联,不过返回一个字符串。该字符串作为逻辑视图名。

当我们在struts.xml文件里配置 Action时。不仅须要指定Action的name属性和class属性,还要为Action元素指定系列result子元素,每一个result子元素定义一个逻辑视图和物理视图之间的映射。前面所介绍的应用都使用了JSP技术作为视图。故配置result子元素时没有指定type属性。默认使用JSP 作为视图资源。

假设须要在Struts 2中使用其它视图技术,则能够在配置result子元素时,指定对应的type属性就可以。

比如,假设须要使用FreeMarker,则为result指定值为freemarker的type属性;假设想使用Velocity模板技术作为视图资源。则为result指定值为velocity的type属性……

6.Struts 2的执行流程

经过上面介绍。我们发现Struts2框架的执行流程很类似于WebWork框架的流程。

提示  在Struts 2的官方网站,我们能够找到例如以下说法:Essentially,Struts 2.0 is the technical equivalent of WebWork 2.3。Aside fromthe package and property renaming。it isn't much different than,say,migratingfrom WebWork 2.1 to 2.2——意思是说:Struts 2.0技术等同于WebWork 2.3框架,除了包和属性被改名外。从WebWork 2.2迁移到Struts 2不会比从WebWork 2.1迁移到WebWork 2.2更复杂。

这里我们能够看到,Struts 2事实上就是WebWork 2.2的升级版。这也就不难理解:为什么WebWork和Struts 2如此相似!

Struts Struts仅仅是一个MVC框架(Framework),用于高速开发JavaWeb应用。Struts实现的重点在C(Controller)。包含ActionServlet/RequestProcessor和我们定制的Action,也为V(View)提供了一系列定制标签(CustomTag)。但Struts差点儿没有涉及M(Model),所以Struts能够採用JAVA实现的不论什么形式的商业逻辑。 Spring Spring是一个轻型容器(light-weight container)。其核心是Bean工厂(BeanFactory)。用以构造我们所须要的M(Model)。在此基础之上,

Spring提供了AOP(Aspect-OrientedProgramming, 面向层面的编程)的实现,用它来提供非管理环境下申明方式的事务、安全等服务。对Bean工厂的扩展ApplicationContext更加方便我们实现J2EE的应用;DAO/ORM的实现方便我们进行数据库的开发;Web MVC和Spring Web提供了Java Web应用的框架或与其它流行的Web框架进行集成。就是说可将两者一起使用,达到将两者自身的特点进行互补。

Hibernate Hibernate是一个免费的开源Java包,它使得与关系数据库

打交道变得十分轻松。就像您的数据库中包括每天使用的普通Java对象一样,同一时候不必考虑怎样把它们从神奇的数据库表中取出(或放回到数据库表中)。

它解放了您。使您能够专注于应用程序的对象和功能,而不必操心怎样保存它们或稍后怎样找到它们。 EJB 一个技术规范:EJB 从技术上而言不是一种"产品" EJB 是一种标准描写叙述了构建应用组件要解决的: 可扩展 (Scalable) 分布式 (Distributed) 事务处理 (Transactional) 数据存储 (Persistent) 安全性 (Secure) ANT -. Ant简单介绍

Ant是一个类似make的工具,用来编译/执行/測试java程序。 构建、包装和公布过程中差点儿每一件事都能够由Ant的任务来处理. 二.Ant的安装及配置 你能够从Jakata站点下载预编译的ANT,解压至任一文件夹; 设置自己的环境变量。即ANT_HOME,指向解压文件夹; 设置JAVA_HOME环境变量,指向jdk的根文件夹; 三:用ant管理项目 Ant一启动就会自己主动地载入一个叫做Build.xml的项目配置文件。假设想给这个项目配置文件取别的名字。你能够使用buildfile标记来执行ant,就像以下这样: ant -buildfile Project_configuration.xml 主要特点: 使用xml文件作为配置文件,即build.xml; 可与junit作无缝整合,达到系统測试、编译到公布的功能。 强大、具体的报表功能; 控制灵活。可自己定义要运行的任务组合。

7 struts2实现MVC

Struts採用jsp作为MVC的视图,由ActionServlet详细指定的action动作类作为控制器即MVC中的C,负责视图与模型之间的交互。控制器的每一个入口点都由名为struts-config.xml的配置文件设置。该文件把来自视图的请求映射为特定的JAVA类以进行对应的处理。控制器还指定下一个视图的位置。

Struts中的模型主要指的就是javabean。它是模型的代表,主要封装数据和业务逻辑。

8 Struts1的处理流程:

控制器进行初始化工作,读取配置文件,为不同的Struts模块初始化相应的ModuleConfig对象。控制器接收Http请求,并从ActionConfig中找出相应于该请求的Action子类,假设没有相应的Action,控制器直接将请求转发给JSP或者静态页面,否则控制器将请求分发至详细的Action类进行处理。在控制器调用详细的Action的Execute方法之前,ActionForm对象将利用Http请求中的參数来填充自已。还能够在 ActionForm类中调用Validate方法来检查请求參数的合法性。而且能够返回一个包括全部错误信息的ActionErrors对象。运行详细的的Execute的方法。它负责运行相应的业务逻辑。

运行完后。返回一个ActionForward对象,控制器通过该 ActionForward对象来进行转发工作。也能够把Action要处理的业务逻辑封装在JavaBean中,假设系统中还有EJB,那么通过 JavaBean调用EJB以完毕业务处理。假设没有EJB,那么就直接在JavaBean数据库连接,数据库相关的操作。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

struts2和struts1认识相关推荐

  1. Struts2与Struts1的对比

    Struts2与Struts1的对比 Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口. • Struts 2 Acti ...

  2. Struts2和Struts1.x的全面比较

    Struts2和Struts1.x的全面比较 为了对Struts2和Strtus1.x进行全面的比较,让读者了解这两种框架各自的优缺点,以便于在自己的项目中,根据实际情况,选择合适的框架,对它们两者进 ...

  3. Struts2与Struts1的对比学习(一)

    写在前面: Struts1官方已经停止更新,现在用的也比较少,但是了解Struts1可以帮助我们更好的理解Struts2. 我们不能简单的把Struts2理解为Struts1的升级,甚至可以说这样理解 ...

  4. Struts2和Struts1.x的全面比较一

    转载自:http://www.blogjava.net/sterning/archive/2007/07/17/130892.html 特性 Struts1.x Struts2 Action类 Str ...

  5. Struts2和Struts1的不同

    转载(没看懂) Action 类 ◆Struts1要求Action类继承一个抽象基类org.apache.struts.action.Action.Struts1的一个普遍问题是使用抽象类编程而不是接 ...

  6. struts2与struts1整合,java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

    原因:我往项目的WEB-INF/lib中导入了struts2基本的包,还有struts1的core包,以及struts2-strut1-plugin的包,但是没有导入commons-loggin-1. ...

  7. Struts2与Struts1的区别

    Struts2是基于WebWork的一个全新框架. 不过有了Struts1的基础,学Struts2更方便. Struts2主要改进是取代了Struts1的Servlet和Action. Struts2 ...

  8. Struts2前身Struts1是如何转起来的呢

    Struts1运行原理: 在启动时通过前端总控制器ActionServlet加载struts-config.xml并进行解析当用户在jsp页面发送请求被struts1的核心控制器ActionServl ...

  9. Struts1和Struts2对照

    最近学习Struts1和Struts2.好多人.提到非常多的信息. Struts2不从Struts1进化. Struts2的前身WebWork. 呢,看了一些资料,下边就来比較比較. 一.架构分析 S ...

最新文章

  1. 1分钟搭建极简mock server
  2. .gitignore 无效及解决办法
  3. Unable to instantiate Action, MenuAction, defined for 'QueryMenuAll' in namespace '/'MenuAction
  4. 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---20
  5. Oracle常用操作之登录名和密码大小写问题
  6. 在CentOS 6.3中安装与配置JDK-7
  7. Spring MVC + Thymeleaf
  8. 下坠的小鸟(flappy bird)速算版
  9. mpvue 从零开始 女友的衣装 1 pages
  10. linux 针对目录空间配额,linux磁盘配额quota
  11. Spring Boot文件上传示例
  12. mysql 5.6 之 GTID 复制介绍
  13. linux git编译安装目录,Linux(centos) 环境下如何源码编译安装git
  14. 两张表合并加标识根据ID
  15. WINDOWS蓝屏照片
  16. linux部署k8s教程
  17. 基于OMAPL138的Linux字符驱动_GPIO驱动AD9833(一)之miscdevice和ioctl
  18. 【HAVENT原创】修改 CentOS 服务器名称
  19. 数据看板是什么,怎么做?
  20. [zz] 导致你创业失败的18个错误 [2007-05-03]

热门文章

  1. 面向对象(OOP)一
  2. Convert.ToDateTime(值),方法可以把一个值转化成DateTime类型。
  3. Javascript模拟c#中arraylist操作(学习分享)
  4. [原创]红马版验证码实现(中文+变形+噪点)
  5. 4种不同类别的机器学习概述
  6. 崩溃!新浪程序员加班错失 77 万年会大奖
  7. linux宝塔登录不上去怎么回事,宝塔面板点击登陆没有用怎么办
  8. 使用各类BeanUtils的时候,切记注意这个坑!
  9. Erik Dietrich:二十年的编程,教会我的五件事!
  10. 微信第一个“小程序”亮相:不是APP胜似APP!