Struts2 第二章 Struts2 核心API
第二章Struts2 核心API
1.回顾
1)Java EE的架构体系、分层结构,Struts2 MVC框架的理解
2)Struts2环境搭建
2.目标和重点
1)Struts2 Action接口ActionSupport类(核心类和接口)
2)接收用户输入数据的方法
3)访问HttpServletRequest和HttServletResponse对象
3.难点
1)掌握ActionSupport核心类和Action接口
2)掌握Struts控制器Action接收用户输入数据的三种方式
3)掌握在Struts2控制器Action中使用ServletAPI
4.知识点内容讲解
4.1 控制器
上一次我们搭建了自己的Struts2的环境,用户发出请求到控制器,控制器处理业务逻辑,在转发到视图jsp,整个流程中,掌握了MVC框架中各组件的作用,在Struts2中控制器Action类可以是一个普通的javaBean,所有的Action、jsp都可以理解为工程中的一个组件,通过struts.xml文件关联装配。
这里要讲的是我们的控制器Action可以继承Struts2为我们提供的ActionSupport类,因为ActionSupport类已经具有很多默认的功能,比如国际化、文件上传下载等,通常情况下我们会继承ActionSupport类来编写自己的控制器。
ActionSupport类实现了Action接口,这个接口定义了5个转发常量和execute方法,Action接口制定了控制器的规范,而ActionSupport类已经实现了这个接口,我们继承ActionSupport类需要重新execute方法。
4.2接收用户输入数据的方法
Web应用的第一步就是接收用户的请求,在servlet中是用request对象来获得用户输入表单域的值,而在Struts2中,这些繁琐的操作都由框架自动完成,并且还提供了多种接收用户数据的方法:
1)最常用的,直接通过类的成员变量的set方法
2)领域模型对象
3)模型驱动的方式
4.2.1 直接通过Action控制器类成员变量的的set方法类完成。
Struts2是通过拦截器来完成,后续的章节我们会学习拦截器,这种方式我们在搭建基本的struts2环境时已经用过,我们可以很方便的接收用户数据。
获取用户输入数据的过程是这样,首先取得表单域的名称,在讲首字母转大写,前面加set组成一个set方法,再通过反射来设置对象的值,所以如果表单域的名称和类里成员变量名不一致也没关系,最主要的是表单域的名称加set后的set方法必须存在。
另外在接收数据的过程中Struts还帮助我们完成了数据的类型转换。
演示。。。。
4.2.2领域模型对象接收数据
Struts2还支持对象领域模型方式接收数据
用户的表单域可以是“对象.属性名方式”,在Action控制器类的成员变量可以是一个模型,Struts2在接收数据时自动收集表达域的值,按照对象.属性的关系,去设置构建模型对象,使开发者在使用Struts2时以完全面向对象的方式去思考。
演示。。。。。。。。
4.2.3模型驱动方式
第三种方式是控制器类实现Struts2提供的ModelDriver接口,他允许用户以更灵活的操作模型对象,前面二种方式对象数据从表单收集数据到对象都是由Struts2自动完成的,而模型驱动实现ModelDriver接口需要自己去new一个模型对象,并实现getModel ()方法。
和领域模型一样,类的成员变量时一个模型,但是在表单域不需要“对象.属性”的方式。
演示。。。。。。
小结:需要注意这三种方式的区别和使用上的要点。
4.3访问ServletAPI
我们做的是web应用,到目前为止所写的代码中一个ServletAPI都没看见,难道不需要吗?答案是不可能不要,最起码用户登录少不了SESSION对象,那么ServletAPI对象在哪里咧?
Struts2为我们提供了二种方式,一种是解耦方式,一种是耦合方式。
4.3.1解耦方式访问ServletAPI
Struts2提供了一个ActionContext对象,我们可以通过这个对象获得session、request、response对象,先ActionContext context=ActionContext.getContext()就可以,需要注意的是获得的session、request、response对象都是Map的数据类型。
演示。。。。。
4.3.2耦合的方式访问ServletAPI
另外Struts2还提供了ServletActionContext对象,我们可以直接获得session、servletContext、request、response对象,他们都是完全的ServletAPI的对象,使用的方式是setAttribute、getAttribute,我们还可以按原来的习惯去使用这些对象。
演示。。。
4.3.3还有另一种解耦方式访问ServletAPI
Struts2还允许我们直接实现接口,框架提供了三个特定接口,SessionAware,requestAware,responseAware,实现这些接口同样可以获得ServletAPI对象,对象是Map的数据类型。
演示。。。
小结:作为web应用程序,必然需要ServletAPI,采用解耦的方式使用serveltAPI更符合软件设计的需要。最佳的方式是可以是实现特定接口来使用这些对象。
总结:今天介绍了很多Struts2的API
有AtionSupport类,我们继承他可以拥有Struts2提供的默认功能
有接受用户输入的几种方式,可以使用常用的,领域模型方式或者是实现ModelDriver接口还有是用ServletAPI上面可以采用解耦或耦合的方式
解耦的方式可以使用ActionServlet对象或者Action类实现SessionAware、requestAware、responseAware接口
耦合的方式可以使用ServletActionServlet对象直接获得我们习惯的ServletAPI对象
5.作业
1)书上的上机练习题,第41面~46面所以上机练习题,按照书上的要求,先完成第
一阶段,再完成第二阶段的习题,下次课之前必须完成。
DAO层可以只做一遍,Web层Struts多做几遍
Struts2框架工作原理及应用体会
2012年第11卷第6期 产业与科技论坛2012.(11).6 Industrial &Science Tribune Struts2框架工作原理及应用体会 □宋 君 张家爱 【摘要】通过针对特定用户的分析,搭建以Struts2为技术核心的旅行社管理系统。本文简单的介绍了MVC 、 Struts2的工作原理,同时总结了在项目制作过程中所得到的心得。 【关键词】 Struts2;MVC ;FilterDispatcher ;Action 【基金项目】本文为大学生科技创新院级基金项目(编号:2011070)成果 【作者单位】宋君,吉林农业科技学院信息工程学院;张家爱,吉林农业科技学院信息工程学院教师 本着锻炼自我与积极参与到实用性技术的目标,以发掘自身创新意识为前提。利用空闲时间,在老师的指导下,进行了一次大学生创新项目的实践性活动。本着实用原则,以某中小旅行社为客户(根据用户需求,匿名),以Struts2框架为基点,进行了一次旅行社管理系统的开发。在项目结束之余, 特将在项目过程中经历的种种认识进行了简单的总结,希望让阅读本文的朋友们,更多的参与到此类活动中。 一、基础思想— ——MVC 简述作为时下经典框架之一, MVC 具有其独特的价值。MVC 框架简单的说,就是将数据模型与用户视图进行分离。通过控制器进行协调处理的一种结构是框架。同时,也是本文中要讨论的Sturts2框架的基础思想。 M 是指模型层(Model ),V 是指用户视图(View ),C 则是指控制器 (Controller )。这种划分方式是以将模型层与视图层进行代码分离,从而降低两者之间的耦合性,使同一程序可以使用不同形式进行表现。不同层之间的修改不会或尽量少的印象到其他层功能的史前为前提。有效的提高的代码的维护性和设计难度。 图1 二、 Struts2工作原理(一)Struts2框架组成。Struts2框架由三个主要部分组成:核心控制器、业务控制器,以及由用户实现的业务逻辑组件。这里我们将侧重于核心控制器与业务控制器的理解与说明。 (二)核心控制器:FilterDispatcher 。FilterDispatcher 是Struts2框架的核心控制器,在此,我们可以将FilterDispatcher 看作一个类似于过滤网的过滤器。当用户发出请求,并到达Web 硬哟那种时,该过滤器会过滤用户请求。如果用户请求的结尾为action ,则将该请求转入Struts2框架进行处理。当Struts2框架获得了*.actio 请求后,会根据请求前面“*”的那部分内容,决定调用哪个业务逻辑组件作为响应单位。这里需要说明的是Struts2用来处理用户请求的Action 实例并不是业务控制器,而是作为Action 的代理———正因为Struts2的一大特点,与Servlet API 的非耦合性,使得用户实现的业务控制器无法直接处理用户请求。有效的提高了后期调试维护的效率。而Struts2框架再次提供了了一系列的拦截器。这些拦截器负责将HttpServletRequest 请求的参数解析出来,传入Action 中,并毁掉Action 的Execute 方法来处理用户请求。用户实现的Action 类仅作为Struts2的Action 代理的代理目标。用户实现的业务控制器则包含了对用户请求的处理。用户的请求数据包含在HttpServletRequest 对象中,而用户的Action 类无需访问HttpServletRequest 对象。拦截器负责将HttpServletRequest 里的请求数据解析出来,并传给业务逻辑组件Action 实例。 (三)业务控制器。业务控制器就是前文提到的用来实现用户Action 的实力,这里的每个Action 类通常包含有一个execute 方法,当业务控制器处理完用户的请求后,该方法将会针对此次处理返回一个字符串— ——该字符串就是一个逻辑树图名。当程序开发人员开发出系统所需要的业务控制器后,还需要针对性的配置Struts2的Action ,即需要配置Ac- tion 的以下三个部分:(1)Action 所处理的URl 。(2)Action 组件所对应的实现类。(3)Action 里包含的逻辑试图和物理资源之间的对应关系。每个Action 都要处理一个用户请求,而用户请求则总是包含有指定的URL 。当核心控制器过滤用户请求,并调用后,根据请求的URL 和Action 处理URL 之间的对应关系来处理转发。 · 342·
struts2验证框架
Struts2Validator Struts2验证框架 Updated Jun 18, 2010 by cm2...@https://www.360docs.net/doc/1214971881.html, Action配置中一定要设置input返回页面 添加验证只要创建验证的xml文件 1.创建xml文件名 验证Action中全部方法 在Action同包下,创建:Action类名-validation.xml 如:ValidateAction创建ValidateAction-validation.xml 验证Action中单个方法 Struts2复习题 1.以下属于struts2的控制器组件是: A.Action B.ActionForm C.ActionServlet D.dispatchAction 2.以下属于struts2的体系结构的是:(多选) A.struts2控制器组件 B.struts2配置文件 C.FilterDispathcer D.Action 3.以下属于struts2配置文件中的配置元素是:(多选) A. Struts2原理 上图来源于Struts2官方站点,是Struts 2 的整体结构。 Struts2框架由3个部分组成:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。在这3个部分里,Struts 2框架提供了核心控制器FilterDispatcher,而用户需要实现业务控制器和业务逻辑组件。 (1)核心控制器:FilterDispatcher FilterDispatcher是Struts2框架的核心控制器,该控制器作为一个Filter运行在Web应用中,它负责拦截所有的用户请求,当用户请求到达时,该Filter 会过滤用户请求。如果用户请求以action结尾,该请求将被转入Struts2框架处理。 Struts2框架获得了*.action请求后,将根据*.action请求的前面部分决定调用哪个业务逻辑组件,例如,对于login.action请求,Struts2调用名为login的Action来处理该请求。 Struts2应用中的Action都被定义在struts.xml文件中,在该文件中定义Action 时,定义了该Action的name属性和class属性,其中name属性决定了该Action 处理哪个用户请求,而class属性决定了该Action的实现类。 Struts2用于处理用户请求的Action实例,并不是用户实现的业务控制器,而是Action代理——因为用户实现的业务控制器并没有与Servlet API耦合,显然无法处理用户请求。而Struts2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并回调Action 的execute方法来处理用户请求。 (2)一个请求在Struts2框架中的处理大概分为以下几个步骤 1 .客户端初始化一个指向Servlet容器(例如Tomcat)的请求,即HttpServletRequest请求。 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的工作机制分析及实例 一、概述 本章讲述Struts2的工作原理。 读者如果曾经学习过Struts1.x或者有过Struts1.x的开发经验,那么千万不要想当然地以为这一章可以跳过。实际上Struts1.x 与Struts2并无我们想象的血缘关系。虽然Struts2的开发小组极力保留Struts1.x的习惯,但因为Struts2的核心设计完全改变,从思想到设计到工作流程,都有了很大的不同。 Struts2是Struts社区和WebWork社区的共同成果,我们甚至可以说,Struts2是WebWork的升级版,他采用的正是WebWork 的核心,所以,Struts2并不是一个不成熟的产品,相反,构建在WebWork基础之上的Struts2是一个运行稳定、性能优异、设计成熟的WEB框架。 本章主要对Struts的源代码进行分析,因为Struts2与WebWork的关系如此密不可分,因此,读者需要下载xwork的源代码,访问https://www.360docs.net/doc/1214971881.html,/xwork/download.action即可自行下载。 下载的Struts2源代码文件是一个名叫struts-2.1.0-src.zip的压缩包,里面的目录和文件非常多,读者可以定位到 struts-2.1.0-src\struts-2.0.10\src\core\src\main\java目录下查看Struts2的源文件,如图14所示。 (图14) 二、主要的包和类 Struts2框架的正常运行,除了占核心地位的xwork的支持以外,Struts2本身也提供了许多类,这些类被分门别类组织到不同的包中。从源代码中发现,基本上每一个Struts2类都访问了WebWork提供的功能,从而也可以看出Struts2与WebWork千丝万缕的联系。但无论如何,Struts2的核心功能比如将请求委托给哪个Action处理都是由xwork完成的,Struts2只是在WebWork 的基础上做了适当的简化、加强和封装,并少量保留Struts1.x中的习惯。 第一章Struts2的起源和发展 说到网络应用很难让人不联想到网络信息的浏览,自从Internet进入民用领域之后,上网成为了越来越多的人闲暇时光的消磨手法。于是网络系统的开发也变得越来越总要。 1.1 Web技术的发展 随着Internet技术的大面积应用和发展,传统的静态HTML页面由于缺乏足够的用户交互能力已经无法满足日益膨胀的网络需求。人们希望Web应用中能够包含更多的动态交互功能,于是为了应对拥有更广泛用户群的动态Web开发,软件开发商分别推出的ASP和JSP两款动态网站开发解决方案。但是当时的JSP 开发并没有很科学的层次设计,最初的JSP开发中逻辑代码和前端代码杂合在一起。虽然在最初开发时这样的做法使得开发非常的容易,然而随着Web系统的使用越来越广泛,应用规模的日益增长,如果继续使用传统的简单的JSP + Servlet 结构进行Web系统的开发,则会由于系统层次混乱而导致系统的开发难度和维护成本越来越大,最终使开发过程陷入困境。 1.2 MVC思想进入Web系统开发 面对开发过程中所出现的困难,开发者们试图寻找一种能够使得开发结构更加具有条理性的开发模式。根据以往面向对象系统设计的经验,开发者开始将MVC开发模式引入Web系统的开发。MVC模式将一个应用分为三个基本部分:Model(模型)、View(视图)、Controller(控制器)。在此模式中触发事件由控制器捕获,并根据事件的类型来改变模型和视图。这样既可将系统模型与视图分离,从而使各部分能够工作在最小的耦合状态下协同工作,从来提高系统的扩展性和可维护性。将其引入Web系统开发后,系统模式由传统的JSP完成用户请求和响应改变为由控制器捕获用户请求,JavaBean完成模型操作,而JSP专门负责响应用户需求。老一代的开发框架Struts1便是这时的产物。 把这张图放在这里,我是想说SpringMVC和Struts2真的是不一样的,虽然在都有着核心分发器等相同的功能组件(这些由MVC模式本身决定的)。 为什么SpringMVC会赢得最后的胜利呢?谈几点我自己的看法: 第一、MVC框架的出现是为了将URL从HTTP的世界中映射到JAVA世界中,这是MVC 框架的核心功能。而在URL这一点SpringMVC无疑更加优雅。 第二、从设计实现角度来说,我觉得SpringMVC更加清晰。即使我们去对比Struts2的原理图和SpringMVC的类图,它依然很让人困惑,远没有SpringMVC更加直观: SpringMVC设计思路:将整个处理流程规范化,并把每一个处理步骤分派到不同的组件中进行处理。 这个方案实际上涉及到两个方面: l 处理流程规范化——将处理流程划分为若干个步骤(任务),并使用一条明确的逻辑主线将所有的步骤串联起来 l 处理流程组件化——将处理流程中的每一个步骤(任务)都定义为接口,并为每个接口赋予不同的实现模式 处理流程规范化是目的,对于处理过程的步骤划分和流程定义则是手段。因而处理流程规范化的首要内容就是考虑一个通用的Servlet响应程序大致应该包含的逻辑步骤: l 步骤1——对Http请求进行初步处理,查找与之对应的Controller处理类(方法)——HandlerMapping l 步骤2——调用相应的Controller处理类(方法)完成业务逻 辑——HandlerAdapter l 步骤3——对Controller处理类(方法)调用时可能发生的异常进行处理——HandlerExceptionResolver 这章适合做参考,如果你那里不清楚,可上这里查技术资料 二.Struts框架 struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVC的web应用程序的开发。 本章详细讨论struts架构。我们将看到struts是如何清晰地区分控制,事务逻辑和外观,从而简化了开发应用程序过程的。我们还将介绍struts提供的类如何使得开发工作更加简单,这些类包括: ●控制程序流程的类 ●实现和执行程序事务逻辑的类 ●自定义的标记库使得创建和验证HTML表单更加容易 1.Struts压缩包内容 文件夹jakarta-struts-1.0.2包含两个目录,lib和webapps。在lib目录中有使用struts创建 在webapps目录下有如下文件: 让我们从MVC角度观察struts框架中的组件 框架中三个部分:模型,视窗和控制器。 模型 在struts框架中,模型分为两个部分: ●系统的内部状态 ●可以改变状态的操作(事务逻辑) 内部状态通常由一组ActinForm JavaBean表示。根据设计或应用程序复杂度的不同,这些Bean可以是自包含的并具有持续的状态,或只在需要时才获得数据(从某个数据库)。 大型应用程序通常在方法内部封装事务逻辑(操作),这些方法可以被拥有状态信息的bean 调用。比如购物车bean,它拥有用户购买商品的信息,可能还有checkOut()方法用来检查用户的信用卡,并向仓库发定货信息。 小型程序中,操作可能会被内嵌在Action类,它是struts框架中控制器角色的一部分。当逻辑简单时这个方法很适合。 建议用户将事务逻辑(要做什么)与Action类所扮演的角色(决定做什么)分开。 视窗 由JSP建立,struts包含扩展的自定义标签库,可以简化创建完全国际化用户界面的过程。控制器 struts中,基本的控制器组件是ActionServlet类中的实例servelt,实际使用的servlet在配置文件中由一组映射(由ActionMapping类进行描述)进行定义。 2.Struts框架中的组件 (由于ROSE工具还未能下载,只能找来这幅图,它说明了一定问题,特别是ActionErrors,但它并没有将ActionMapping,JSP和Tag Library包含进来,有时间作完替换) struts2并不是一个陌生的web框架,它是以Webwork的设计思想为核心,吸收struts1的优点,可以说 struts2是struts1和Webwork结合的产物。 struts2 的工作原理图: 一个请求在Struts2框架中的处理分为以下几个步骤: 1.客户端发出一个指向servlet容器的请求(tomcat); 2.这个请求会经过图中的几个过滤器,最后会到达FilterDispatcher过滤器。 3.过滤器FilterDispatcher是struts2框架的心脏,在处理用户请求时,它和请求一起相互配合访问struts2 的底层框架结构。在web容器启动时,struts2框架会自动加载配置文件里相关参数,并转换成相应的类。 如:ConfigurationManager、ActionMapper和ObjectFactory。ConfigurationManager 存有配置文件的一 些基本信息,ActionMapper存有action的配置信息。在请求过程中所有的对象(Action,Results, Interceptors,等)都是通过ObjectFactory来创建的。过滤器会通过询问ActionMapper 类来查找请求中 需要用到的Action。 4.如果找到需要调用的Action,过滤器会把请求的处理交给ActionProxy。ActionProxy为Action的代理对象 。ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action 类。 5.ActionProxy创建一个ActionInvocation的实例。ActionInvocation在ActionProxy层之下,它表示了 Action的执行状态,或者说它控制的Action的执行步骤。它持有Action实例和所有的Interceptor。 6.ActionInvocation实例使用命名模式来调用,1. ActionInvocation初始化时,根据配置,加载Action相 关的所有Interceptor。2. 通过ActionInvocation.invoke方法调用Action实现时,执行Interceptor。在 调用Action的过程前后,涉及到相关拦截器(intercepetor)的调用。 7. 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果 通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表 示的过程中可以使用Struts2 框架中继承的标签。 Struts2教程1:第一个Struts2程序 在本系列教程中我们将学习到Struts2的各种技术。在本教程中使用的工具和程序库的版本如下: 开发工具:MyEclipse6 Web服务器:Tomcat6 Struts版本:Struts2.0.11.1 JDK版本:JDK1.5.0_12 J2EE版本:Java EE5.0 在本系列教程中Web工程的上下文路径都是struts2,如果在Web根目录有一个index.jsp文件,则访问路径如下: http://localhost:8080/struts2/index.jsp 由于MyEclipse6目前并不支持Struts2,所以我们需要到https://www.360docs.net/doc/1214971881.html,去下载Struts2安装包。要想正常使用Struts2,至少需要如下五个包(可能会因为Struts2的版本不同,包名略有差异,但包名的前半部是一样的)。 struts2-core-2.0.11.1.jar xwork-2.0.4.jar commons-logging-1.0.4.jar freemarker-2.3.8.jar ognl-2.6.11.jar Struts2虽然在大版本号上是第二个版本,但基本上在配置和使用上已经完全颠覆了Struts1.x的方式(当然,Struts2仍然是基于MVC模式的,也是动作驱动的,可能这是唯一没变的东西)。Struts2实际上是在Webwork基础上构建起来的MVC框架。我们从Struts2的源代码中可以看到,有很多都是直接使用的xwork(Webwork的核心技术)的包。既然从技术上来说Struts2是全新的框架,那么就让我们来学习一下这个新的框架的使用方法。 本章讲述Struts2的工作原理。 读者如果曾经学习过Struts1.x或者有过Struts1.x的开发经验,那么千万不要想当然地以为这一章可以跳过。实际上Struts1.x与Struts2并无我们想象的血缘关系。虽然Struts2的开发小组极力保留S truts1.x的习惯,但因为Struts2的核心设计完全改变,从思想到设计到工作流程,都有了很大的不同。 Struts2是Struts社区和WebWork社区的共同成果,我们甚至可以说,Struts2是WebWork的升级版,他采用的正是WebWork的核心,所以,Struts2并不是一个不成熟的产品,相反,构建在We bWork基础之上的Struts2是一个运行稳定、性能优异、设计成熟的WEB框架。 本章主要对Struts的源代码进行分析,因为Struts2与WebWork的关系如此密不可分,因此,读者需要下载xwork的源代码,访问https://www.360docs.net/doc/1214971881.html,/xwork/download.action即可自行下载。 下载的Struts2源代码文件是一个名叫struts-2.1.0-src.zip的压缩包,里面的目录和文件非常多,读者可以定位到struts-2.1.0-src"struts-2.0.10"src"core"src"main"java目录下查看Struts2的源文件,如图14所示。 (图14) 主要的包和类 Struts2框架的正常运行,除了占核心地位的xwork的支持以外,Struts2本身也提供了许多类,这些类被分门别类组织到不同的包中。从源代码中发现,基本上每一个Struts2类都访问了WebWork提供的功能,从而也可以看出Struts2与WebWork千丝万缕的联系。但无论如何,Struts2的核心功能比如将请求委托给哪个Action处理都是由xwork完成的,Struts2只是在WebWork的基础上做了适当的简化、加强和封装,并少量保留Struts1.x中的习惯。 以下是对各包的简要说明: 包名说明 Java项目(struts2框架) 工具/原料: Eclipse,struts 方法: 1. 打开eclipse新建java项目File-->New-->other; 2. 导入jar包,项目名称上右键-->Build Path--> Configure Build Path...; 红框内就是我们所导入的jar包了; 3. 接下来,配置struts2,首先需要导入struts2的jar包,方法如(2.); 新建一个XML来配置struts2,一般情况下为struts.xml,也可以自定义名称; 工作流程 一个请求在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的实例。 和"struts2工作流程" 有关的java编程小帖士: strong>Locale.setNegativeNumberMode方法的参数。 字段 7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action 链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。 Struts2的目标很简单--使Web开发变得更加容易。为了达成这一目标,Struts2 中提供了很多新特性,比如智能的默认设置、annotation的使用以及"惯例重于配置"原则的应用,而这一切都大大减少了XML配置。Struts2中的Action都是POJO,这一方面增强了Action本身的可测试性,另一方面也减小了框架内部的耦合度,而HTML表单中的输入项都被转换成了恰当的类型以供action使用。开发人员还可以通过拦截器(可以自定义拦截器或者使用Struts2提供的拦截器)来对请求进行预处理和后处理,这样一来,处理请求就变得更加模块化,从而进一步减小耦合度。模块化是一个通用的主题--可以通过插件机制来对框架进行扩展;开发人员可以使用自定义的实现来替换掉框架的关键类,从而获得框架本身所不具备的功能;可以用标签来渲染多种主题(包括自定义的主题);Action执行完毕以后,可以有多种结果类型--包括渲染JSP页面,Velocity和Freemarker 模板,但并不仅限于这些。最后,依赖注入也成了Struts2王国中的一等公民,这项功能是通过Spring框架的插件和Plexus共同提供的,与PicoContainer的结合工作还正在进行中 Struts框架技术课程教学大纲 软件工程和软件日强(Java方向) 课程名称:Struts框架技术 预备基础:Java,HTML,Web基础,SQL,UML,J2EE 课程简介: 本课程介绍了当今在Java Web开发中特别流行的MVC模式的Struts2的架构技术。阐述了Struts2如何简化和加快Web的开发速度,提高了Java Web系统的可扩充性,可维护性。讲述了Struts2框架的基本结构,各个组成部件的功能;Struts2框架的配置;Struts2国际化的信息资源,Struts2与Tiles2的融合。 课程管理: 大连理工大学城市学院计算机工程学院。 教学目标: ●熟悉Struts2架构的组成部分。 ●熟悉企业级应用的分层概念和MVC模式,JSPModel1和Model2模型。。 ●Struts2的Web项目的初始配置。 ●Struts2项目开发的基本流程。 ●Action的开发,部署,配置和与Model层的协作。 ●Action的结果和页面跳转的配置和编程。 ●熟练使用Struts2拦截器进行应用的扩展。 ●熟练使用Struts2的OGNL和类型转换。 ●熟练Struts2中文件的上传和下载功能。 ●熟练使用Struts2的标记完成页面的设计和展示。 ●熟练使用Struts2整合Tiles2框架进行页面模版配置和组装。 ●熟练使用Struts2Validator框架进行数据验证 授课计划(Weekly Schedule): -Struts2处理结果的改进。 -Struts2支持的结果的类型和应用。-结果的配置。 -常见结果的使用。 -动态结果。 -请求参数决定结果。 -全局结果。1.实现各种结果的配置。2.编写Action实现到各种结果的处理。 4主题:Struts2配置 -Bean配置 -包配置。 -常量配置。 -命名空间配置。 -包含配置。 -拦截器配置。试验04: 1.编写Action。 2.配置Action。 3.配置常量 4.配置全局结果。 5.配置Action的命名空间。 5主题:拦截器 -拦截器基本概念。 -AOP编程思想。 -拦截器配置语法。 -Struts2内置的拦截器类型和职责。 -自定义拦截器的编程和配置。 -拦截器应用案例。试验05: 1.了解内置拦截器的使用。2.配置不同拦截器,测试Struts2的运行。 3.编写登录验证的拦截器,如果没有登录则到登录页面。 6主题:文件上传和下载 -文件上传的基本思想。 -文件下载的基本思想。 -编写实现文件上传的Action -配置文件上传的Action。 -使用Struts2控制文件下载。 -实现文件下载的Action。 -文件下载的权限控制。试验06: 1.编写实现文件上传的Action。 2.配置此Action。 3.将上传文件写入数据库。4.将数据库文件读出并实现文件的下载。 7主题:OGNL和类型转换 -什么是OGNL。 -OGNL与EL的区别。 -OGNL的基本语法。 -访问不同Scope中数据的OGNL语法。 -Struts2支持的自动类型转换。 -类型转换过程中的错误处理。试验07: 1.编写Action和Struts2页面读取SCOPE中保存的数 据。 2.完成表单提交中的数据类型转换。 3.编程和配置处理类型转换过程中出现的错误。 8主题:Struts2标记库(1)-FORM标记-Struts2内置的FORM表单元素标记。 -表单标记的通用属性。 -表单元素的name和value属性。 -checkboxlist标记。试验08: 1.使用Struts2的表单标记完成复杂表单页面的设计。2.Action中与页面表单标记的属性的设计和实现。 Struts2工作原理和框架扩展点 2011-11-13 00:18 by 颜超敏, 820 visits, 收藏, 编辑 框架主要涉及技术:Spring + Struts2 + Hibernate + Freemarker 我们先看看Struts2 工作原理图,这样才方便考虑在设计开发框架时有那些扩展点: 1.ActionFilter和其它过滤器 在web.xml配置这些Filter在Struts自身的Filter之前。包括全局缺省的Ac tionFilter、语言编码LocaleFilter、重定向UrlRewriteFilter等等。 2.StrutsPrepareFilter Struts的Action预处理过滤器。我的做法是写一个子类继承它,如CoreStrut sPrepareFilter,这样我可以在子类中实现诸如 动态加载struts.xml和指定目录指定规则的struts-xxx.xml等。 3.StrutsExecuteFilter 同样是使用写子类继承它,如CoreStrutsExecuteFilter,写根据条件(如Stru ts相关的配置文件改动了)重新生成ExecuteOperations (即Dispatcher的高级封装)。 4.Interceptor 拦截器是Struts2的精华。在这里处理包括异常统一处理、权限控制、参数设置、访问历史和某些特定功能的拦截式保存等处理。 5.Action 放置若干处理请求的指定包路径的方法,我设计了BaseAction和GenericActi on,BaseAction处理全局的Action公共处理,包括继承ActionSupport, 实现InitializingBean、ModelDriven(这样可以做一些初始化操作以及得到St ruts2模型驱动的相关功能)。 GenericAction是基于泛型来写的,实现了增删改查之类的公共方法。还有其它若干的项目相关的公共XXXAction,则根据需要设计。 6.Manager 在Action的Method中,可以调用若干个Manager方法来实现相关业务,事务是写在Manager层的,用的Spring的声明式事务。 填空: 1.Struts 2以__过滤器__为核心,采用__拦截器__的机制来处理用户的请求。 2.构建Struts 2应用的最基础的几个类库是_struts2-core__、_commons-logging_、_xwork-core_、__freamarker___以及_ognl_。 3.Struts 2中的控制器类是一个普通的_POJO_。 4.如果要在JSP页面中使用Struts 2提供的标签库,首先必须在页面中使用taglib编译指令导入标签库,其中taglib编译指令为_____<%@ taglib prefix=”s” uri=”strut-tags”%>______。5.在Struts 2表单标签库中,表单标签为_____struts2复习题(含答案)
structs2知识点
Struts2的工作机制原理分析及实例
基于Struts2框架的信息发布系统的设计与初步实现
struts2和springMVC的比较(超详细)
struts框架介绍
Struts2工作原理
Struts2框架搭建教程
struts2源代码分析(个人觉得非常经典)
Java项目(struts2框架)
struts2工作流程详解
Struts2框架技术教学大纲
Struts2工作原理和框架扩展点
struts2复习模拟题