struts2和struts1认识
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认识的更多相关文章
- struts2与struts1整合,java.lang.InstantiationException, Exception occurred during processing request: null
做了2个action,其中一个运行没有问题,另一个报错,看下面的报错信息,再看了看struts.xml,因为没有给GetBooks这个action配置actionform,所以就导致报null.下面是 ...
- Struts2和Struts1的主要区别(完整版)
Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Act ...
- struts2与struts1的比较
struts2相对于struts1来说简单了很多,并且功能强大了很多,我们可以从几个方面来看: 从体系结构来看:struts2大量使用拦截器来出来请求,从而允许与业务逻辑控制器 与 servlet-a ...
- Struts2与Struts1的区别
Struts2是基于WebWork的一个全新框架.不过有了Struts1的基础,学Struts2更方便.Struts2主要改进是取代了Struts1的Servlet和Action.Struts2的核心 ...
- struts2与struts1整合,java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
原因:我往项目的WEB-INF/lib中导入了struts2基本的包,还有struts1的core包,以及struts2-strut1-plugin的包,但是没有导入commons-loggin-1. ...
- struts2与struts1整合,Unable to load configuration. - interceptor-ref ... struts.xml
struts.xml中为了与struts1的MVC模式整合,需要类似如下的拦截器的引用 <interceptor-stack name="integration"> & ...
- Struts2和Struts1的不同
转载(没看懂) Action 类 ◆Struts1要求Action类继承一个抽象基类org.apache.struts.action.Action.Struts1的一个普遍问题是使用抽象类编程而不是接 ...
- 小学生之浅谈Struts2与struts1的运行机制
Struts1工作原理图: 1.初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(s ...
- Struts2重新学习2之struts2和struts1的区别
1) 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类:Struts 1的一个具体问题是使用抽象类编程而不是接口.Struts 2 Action类可以实现一个Acti ...
随机推荐
- Learning Cocos2d-x for WP8(5)——详解Menu菜单
原文:Learning Cocos2d-x for WP8(5)--详解Menu菜单 C#(wp7)兄弟篇Learning Cocos2d-x for XNA(5)——详解Menu菜单 菜单是游戏必不 ...
- •当对自己的技术足够自信的时候,拼的就是RP和面试技巧了(转)
前言 三月真是一个忙碌的季节,刚刚开学就需要准备各种面试和笔试(鄙视).幸运的是,在长达一个月的面试内推季之后,终于同时拿到了阿里和腾讯的offer,还是挺开心的.突而想起久未更新的博客,就冒昧学一学 ...
- PV FV PMT
- Oracle基础(五)pl/sql进阶(分页过程)
编写分页过程 通过pl/sql实现分页过程,再该过程中由简单到难一步步深入,目的在于通过该案例熟悉pl/sql的各种存储过程,包,游标.怎样在java中调用等内容的学习. 1.无返回值 ...
- Nagios+pnp4nagios+rrdtool 安装配置nagios(一)
基于的软件版本 Apache-2.0.63 php-5.3.2 nagios-3.2.3 nagios-plugins-1.4.15 rrdtool-1.4.5 nrpe-2.12 pnp4na ...
- C++头文件保护符和变量的声明定义
1.#ifndef #define #endif头文件保护符 在编译的过程中,每个.cpp文件被看成一个单独的文件来编译成单独的编译单元,#ifndef 保证类的头文件在同一个.cpp文件里被多次引用 ...
- spring整合flex
在常规的开发中只是用flex二不和后台交互是不可能的,为此flex也提供了和后台交互的2种解决方案一种是Data Services另一种是BlazeDs,本篇博客是用的是后一种,我的开发步骤如下: 1 ...
- Swing界面刷新问题(转)
在Java Swing编程中,往往会遇到需要动态刷新界面的时候,例如动态刷新JLabel的文本,JTextField里的文本等等.但是往往却没有达到我们预期的效果,我相信很多朋友都遇到过本文将要说的这 ...
- Andriod开发之浏览器开发(WebView)
1.创建一个WebView在XML文件 <WebView android:id="@+id/webView" android:layout_width="match ...
- 样品GA的良好理解
遗传算法演示样本手册模拟 为了更好地理解遗传算法的计算过程,法的各 个主要运行步骤. 例:求下述二元函数的最大值: (1) 个体编码 遗传算法的运算对象是表示个体 ...