Struts2框架简介课程目标Struts2框架简介Struts2历史Struts2与MVCStruts2体系介绍Struts2体系架构Struts2工作流程Struts2基本知识点Struts2标签库简介Struts2拦截器默认配置文件struts-default.xml概要说明Struts2核心配置文件Struts.xml详解Struts2的简单开发和配置Struts2历史ApacheStruts2即是大家之前所熟悉的WebWork2.随着各自的发展,WebWork和Struts社区决定将二者合并为Struts2,新版本的Struts与以前版本的一样更易于使用.从某种程度上来讲,Strut2没有继承Struts1的血统,而是继承了WebWork的血统。或者说,WebWork衍生出了Struts2,而不是Struts1衍生了Struts2。因为Struts2是WebWork的升级,而不是一个全新的框架,因此稳定性、性能等各方面都有很好的保证;而且吸收了Struts1和WebWork两者的优势最新版本为2009年11月16日发布的2.1.8.1版本Struts2与MVC概括地说,MVC思想将一个应用分成了Model,View,Control三个部分。三个部分以最少的耦合协同工作,从而提高应用的可扩展性和维护性。MVC具有以下特点:多个视图对应一个模型模型返回的数据与显示逻辑分离三层架构导致的低耦合性和易维护性。控制层概念。MVC更符合软件工程化管理的精神Struts2与MVC在struts2中,Model对应业务逻辑组件,它通常用于实现业务逻辑方法以及以及与底层数据库的交互等;View对应视图组件,通常是指JSP页面,但也适用于其他视图显示技术,如Velocity或者Excel文档;Control对应系统核心控制器和业务逻辑控制器,①系统核心控制器为Struts2框架提供的FilterDispatcher,它根据请求自动调用相应的Action。②而业务逻辑控制器是指开发人员自行定义的一系列Action,在Action中负责调用相应的业务逻辑组件来完成处理。Struts2体系架构Struts2体系架构Struts2框架由3个部分组成:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件核心控制器:FilterDispatcherFilterDispatcher是Struts2框架的核心控制器,该控制器作为一个filter运行在web应用,它负责拦截所有的用户请求,当用户请求到达时,该Filter会过滤用户请求业务控制器业务控制器组件就是用户实现Action类的实例Struts2的模型组件JavaEE应用里的模型组件,通常指系统的业务逻辑组件,而隐藏在系统的业务逻辑组件下面的可能还包含Dao、领域对象等组件Struts2视图组件Struts2能使用JSP、FreeMarker、Velocity等作为视图技术Struts2工作流程Struts2工作流程Struts2框架的大致处理流程如下:1.浏览器发送请求,例如请求/mypage.action、/reports/myreport.pdf等。2.Control中的核心控制器FilterDispatcher根据请求调用相应的业务逻辑控制器(Action)。3.Struts2的拦截器链自动对请求应用通用功能,如数据校验和文件上传等功能。4.回调Action中的execute()方法,并在方法体内调用业务逻辑组件来处理请求(Model)。既可以是将数据保存到数据库,也可以从数据库中检索信息。实际上,因为Action只是一个控制器,它会调用业务逻辑组件来处理用户的请求。5.execute()方法将调用业务逻辑组件(Model)得到的数据返还并更新视图层(View),可以是HTML页面、图像,也可以是PDF文档或者其他文档。此时支持的视图技术非常多,既支持JSP,也支持Velocity、FreeMarker等模板技术。Struts2标签库简介Struts2把所有的标签都定义在URI为“/struts-tags”的空间下,我们可以对Struts2标签进行简单的分类,从最大的范围来分,Struts2可以讲所有标签分成如下三类:1.UI(UserInterface,用户界面)标签:主要用于生成HTML元素的标签。2.非UI标签:主要用于数据访问、逻辑控制等的标签。3.AJAX标签:用于Ajax(AsynchronousJavaScriptAndXML)支持的标签。对于UI标签,则又可分为如下两类:1.表单标签:表单标签主要用于生成HTML页面的form元素.以及普通表单元素的标签。2.非表单标签:非表单标签主要用于生成页面上的树、Tab页等标签。对于非UI标签,页可分为如下两类:1.流程控制标签:只要包含用于实现分支、循环等流程控制的标签。2.数据访问标签:主要包含用户输出ValueStack中的值,完成国际化等功能的标签。Struts2标签库简介Strus2标签库用户界面标签库非用户界面标签库Ajax支持标签库表单标签库非表单标签库控制标签库数据访问标签库Struts2拦截器理解拦截器什么是拦截器拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码拦截器的实现原理Struts2的拦截器实现相对简单。当请求到达Struts2的ServletDispatcher时,Struts2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器拦截器的配置可以至struts2的jar包内的struts-default.xml查看关于默认的拦截器与拦截器链的配置。在struts.xml文件中定义拦截器,拦截器栈使用拦截器一旦定义了拦截器和拦截器栈后,就可以使用这个拦截器或拦截器栈来拦截Action了.拦截器的拦截行为将会在Action的exceute方法执行之前被执行.自定义拦截器struts-default.xml概要说明struts-default.xml文件是struts2框架默认加载的配置文件。它定义struts2一些核心的bean和拦截器。这些拦截器是以key-value对的形式配置在struts-default.xml中,其中name是拦截器名字,就是后面使用该拦截器的引用点,value则指定拦截器的实现类Struts2配置文件Struts.xml详解核心配置文件struts.xml的作用:配置请求和Action之间的对应关系,并匹配逻辑视图(在Action中返回的String值)名和物理视图资源(如自己写的JSP页面等)之间的对应关系.配置常量,导入其它配置文件.Struts2配置文件Struts.xml详解?xmlversion=1.0encoding=UTF-8?!DOCTYPEstrutsPUBLIC-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN=struts.i18n.reloadvalue=false/constantname=struts.devModevalue=true/constantname=struts.configuration.xml.reloadvalue=false/includefile=struts-chat.xml/packagename=skillextends=struts-defaultnamespace=/skillactionname=showcaseresultshowcase.jsp/result/actionactionname=editclass=org.apache.struts2.showcase.action.SkillActionresult/empmanager/editSkill.jsp/result/actionactionname=saveclass=org.apache.struts2.showcase.action.SkillActionmethod=saveresultname=input/empmanager/editSkill.jsp/resultresulttype=redirectedit.action?skillName=${currentSkill.name}/result/action/package/strutsStruts2配置文件Struts.xml详解include加载子配置文件【即多配置文件-include子节点】Struts2框架的核心配置文件就是struts.xml配置文件,该文件主要负责管理Struts2框架的业务控制器Action。在默认情况下,Struts2框架将自动加载放在WEB-INF/classes路径下的struts.xml文件。为了避免随着应用规模的增加,而导致的struts.xml文件过于庞大,臃肿,从而是该文件的可读性下降。我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。!--通过include元素导入其他元素--includefile=example.xml/Package配置【包配置-package子节点】Struts2框架使用包来管理Action和拦截器等。每个包就是多个Action、多个拦截器、多个拦截器引用的集合。使用package可以将逻辑上相关的一组Action,Result,Intercepter等组件分为一组,Package有些像对象,可以继承其他的Package,也可以被其他package继承,甚至可以定义抽象的Package。Package的可以使用的属性:name:必填,指定包的名字,该名字是该包被其他包引用的key。extends:可选,指定该包继承其他包.继承其他包,可以继承其他包中的Action定义、拦截器定义等。namespace:可选,定义该包的命名空间。abstract:可选,它指定该包是否是一个抽象包。抽象包不能包含Action定义。Struts2配置文件Struts.xml详解Namespace配置【命名空间配置】Struts2以命名空间的方式来管理Action,同一个命名空间里不能有同名的Action,不同的命名空间里可以有同名的Action。Struts2不支持为单独的Action设置命名空间,而是通过为包指定namespace属性来为包下面的所有Action指定共同的命名空间。Namespace将action分成逻辑上的不同模块,每一个模块有自己独立的前缀。使用namespace可以有效的避免action重名的冲突,例如每一个package都可以有自己独立的Menu和Helpaction,但是事项方式各有不同。Struts2标签带有namespace选项,可以根据namespace的不同向服务器提交不同的package的action的请求。“/”表示根namespace,所有直接在应用程序上下文环境下的请求(Context)都在这个package中查找。“”表示默认namespace,当所有的namespace中都找不到的时候就在这个namespace中寻找.Constant配置【常量配置-Constant子节点】Constant节点定义了Struts2框架的大量属性,开发者可以通过改变这些属性来满足应用的需求。Constant节点包含了系列的key-value对象,每个key就是一个Struts2属性,该key对应的va