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数据库连接,数据库相关的操作。