Struts2的工作机制原理分析及实例

合集下载

structs2

structs2
10
IoC方式
要使用IoC方式,我们首先要告诉IoC容器 (Container)想取得某个对象的意愿,通 过实现相应的接口做到这点
11
Acபைடு நூலகம்ionContext
一次Action调用都会创建一个ActionContext 调用:ActionContext context = ActionContext.getContext() 在structs2中,它通过包装提供了对Servlet的访问:
22
“%”符号
“%”符号的用途是在标志的属性为字符串 类型时,计算OGNL表达式的值。例如在 Ognl.jsp中加入以下代码 "%{#foobar['foo1']}"
23
“$”有两个主要的用途
用于在国际化资源文件中,引用OGNL表达 式 在Struts 2配置文件中,引用OGNL表达式
国际化支持
1 resource bundle per action
pervasive UI support for retrieving messages
8
Action
如果我要取得Servlet API中的一些对象, 如request、response或session等,应该 怎么做?这里的execute不像Struts 1.x的 那样在参数中引入。开发Web应用程序当然 免不了跟这些对象打交道。在Strutx 2.0你 可以有两种方式获得这些对象:非IoC(控 制反转Inversion of Control)方式和IoC 方式
12
二、structs2原理
XWork2的层次:
ActionProxy ActionInvocation Action

Struts2工作原理及配置MyEclips运行第一个Struts2项目

Struts2工作原理及配置MyEclips运行第一个Struts2项目

Struts2工作原理及配置MyEclips运行第一个Struts2项目配置struts2在MyEclipse中的环境:启动MyEclips(本文使用的版本为8.0GA),在启动时设定工作目录名为D:\test,启动后新建一个Web Project,假如取名为struts2,并在J2EE Specification Level选项中选择Java EE 5.0,单击finish。

建好后把事先下载的struts2程序包(本文使用的版本为2.2.1.1)解压后打开可看到该struts2开发包中有4个文件夹:apps是一些实例文件;docs是帮助文档;lib是开发包;src是开源的源代码。

进入lib文件夹中,选择开发struts2须最小配置的几个包:commons-fileupload-1.2.1.jar(处理文件上传的)、commons-io-1.3.2.jar(是commons-fileupload-1.2.1.jar所依赖的)、commons-logging-1.0.4.jar(关于日志处理的)、ognl-3.0.jar(对象图的表达语言)、struts2-core-2.2.1.1.jar(struts2的核心包)、xwork-core-2.2.1.1.jar(基于xwork的内核)、freemarker-2.3.16.jar()把这个7个jar直接拷贝粘贴到刚才新建的web工程中的:struts2/WebRoot/WEB-INF/lib 中,此时MyEclipse会自动新建一个引用库夹Referenced Libraries,所拷贝的几个包自动进入其中。

修改WebRoot/WEB-INF/web.xml的内容为:<?xml version="1.0"encoding="UTF-8"?><web-app version="2.5"xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepare AndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>该文件是在tomcat启动时就会自动解析的,而该配置是把所有请求都交给org.apache.struts2.dispatcher.ng.filter.StrusPrepareAndExecuteFilter类去处理,而此类是strtus2的类,所以也就把web应用纳入了struts2的范围之内了。

struts2的工作原理(官方官方原理图)

struts2的工作原理(官方官方原理图)

Java面试中常常问到的一个重要的理论
1。

struts2工作原理
(a)用户发送http(httpServletRequest)请求,请求web服务器(Tomcat),web服务器加载web部署描述文件(web.xml),执行过滤器
ActionContextCleanUp,Other filters,filterDispatcher等等ActionContextCleanUp:需要与装饰器(siteMesh)插件一起使用,作用:使用装饰器插件,struts2中Action不再管理Action中属性,使用ActionContextCleanUp来清理Action中属性other filters:其他过滤器(siteMesh)filterDispatcher:struts2核心控制器
注意:过滤器执行是有顺序(同图),值栈在filterDispatcher中创建
(b)filterDispatcher询问ActionMapper是否请求Action,如果不请求Action,就不再实行struts2容器,否则filterDispatcher会调用ActionProxy,ActionProxy通过配置文件管理器(Configuraction Manager)加载struts.xml 配置文件,找到相应Action
(c)ActionProxy会创建Action Invocation对象先执行struts2中相应的拦截器,在行所请求Action
(d)Action Invocation执行Result找到分发页面
(e)(反向)执行struts2中拦截器或拦截器栈
(f) 响应(HttpServletResponse)给客户端
struts2优势:
与Servlet API(Servlet容器)解耦。

Struts2的工作机制原理分析及实例

Struts2的工作机制原理分析及实例

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的源代码,访问/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中的习惯。

Struts 2 讲义(2)

Struts 2 讲义(2)

Struts2(2) 工作原理一、Struts2框架结构Struts2框架按照模块来划分,可以分为Servlet Filters、Struts核心模块、拦截器和用户实现部分。

Struts2框架结构图如图4-1所示。

图4-1 Struts 2框架结构图一个请求在Struts2框架中的处理大概分为以下几个步骤。

①客户端提交一个(HttpServletRequest)请求,如上文在浏览器中输入http://localhost: 8080/bookcode/ch2/Reg.action就是提交一个(HttpServletRequest)请求。

②请求被提交到一系列(主要是3层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、FilterDispatcher)。

注意:这里是有顺序的,先ActionContext CleanUp,再其他过滤器(Othter Filters、SiteMesh等),最后到FilterDispatcher。

③FilterDispatcher是控制器的核心,就是MVC的Struts2实现中控制层(Controller)的核心。

④F ilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(HttpServlet Request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy。

⑤ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类。

例如,用户注册示例将找到UserReg类。

⑥ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action。

但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)。

struts2原理

struts2原理

struts2原理suts2并不是一个生疏的web框架,它是以Webwork的设计思想为核心,汲取struts1的优点,可以说struts2是struts1和Webwork结合的产物。

struts2 的工作原理图:一个哀求在Struts2框架中的处理分为以下几个步骤:1.客户端发出一个指向servlet容器的哀求(toat);2.这个哀求会经过图中的几个过滤器,最后会到达FilterDiser过滤器。

3.过滤器FilterDispatcher是struts2框架的心脏,在处理用户哀求时,它和哀求一起互相协作拜访struts2 的底层框架结构。

在web容器启动时,struts2框架会自动加载配置文件里相关参数,并转换成相应的类。

如:ConfigurationManager、ActionMapper和ObjectFactory。

ConfigurationManager 存有配置文件的一些基本信息,ActionMapper存有action的配置信息。

在哀求过程中全部的对象(Action,Relts, Interceptors,等)都是通过ObjectFactory来创建的。

过滤器会通过咨询ActionMapper类来查找哀求中需要用到的Action。

4.假如找到需要调用的Action,过滤器会把哀求的处理交给ActionProxy。

ActionProxy为Action的代理对象。

ActionProxy 通过ConfigurationManager咨询框架的配置文件,找到需要调用的Action类。

5.ActionProxy创建一个ActionInvoion的实例。

ActionInvocation在ActionProxy层之下,它表示了 Action的执行状态,或者说它控制的Action的执行步骤。

它持有Action实例和全部的Interceptor。

6.ActionInvocation实例用法命名模式来调用,1. ActionInvocation初始化时,按照配置,加载Action相关的全部Interceptor。

struts2 的工作原理

struts2 的工作原理

struts2 的工作原理Struts2是一个基于Java的Web应用框架,其核心原理是基于MVC(模型-视图-控制器)模式进行开发。

它的工作原理可以简要概括如下:1. 客户端通过浏览器发送请求至Web服务器,请求的URL映射到Struts2框架的前端控制器(Front Controller)。

2. 前端控制器负责接收请求并进行初步处理,它会根据Struts2配置文件中定义的拦截器(Interceptors)和映射表(Mapping)来确定如何处理请求。

3. 拦截器是Struts2框架中的一个重要组件,用于对请求进行预处理和后处理。

它可以用于验证用户身份、记录日志、数据验证等。

拦截器可以按照一定的顺序链式执行,每个拦截器可以对请求进行修改或决定是否继续执行下一个拦截器。

4. 映射表用于将请求映射到对应的Action(控制器)及其相关方法上。

Struts2框架会根据请求的URL、请求参数等信息进行匹配。

5. Action是Struts2框架中的控制器组件,负责接收请求、处理业务逻辑并生成响应。

在执行Action方法之前,Struts2框架会将请求参数绑定到Action对象的对应属性上。

6. Action执行后,会返回一个结果视图(View)路径或逻辑名。

Struts2框架会根据配置文件中的Result定义,将该结果视图转发或重定向给客户端。

7. 结果视图可以是一个JSP页面、一个HTML文件、一个JSON数据等。

客户端浏览器会接收到结果视图并进行展示。

总的来说,Struts2的工作原理是通过前端控制器接收请求,经过拦截器的预处理和后处理,根据映射表将请求转发给对应的Action进行处理,最后将处理结果返回给客户端浏览器展示。

这种基于MVC模式的设计能够有效地将业务逻辑与用户界面分离,提高了代码的可维护性和可重用性。

struts2框架的原理和应用

struts2框架的原理和应用

Struts2框架的原理和应用1. 什么是Struts2框架Struts2是一个基于Java EE的开源Web应用框架,是Struts框架的升级版。

它通过MVC设计模式实现了Web应用开发的分层,将业务逻辑、数据模型和用户界面分离,使得代码更加清晰、易于维护。

2. Struts2框架的原理Struts2框架的原理主要包括以下几个关键点:MVC设计模式Struts2采用了MVC(Model-View-Controller)设计模式,其中:•模型(Model):负责管理应用程序的数据和业务逻辑。

•视图(View):负责显示数据给用户。

•控制器(Controller):负责处理用户输入、调用模型和视图等。

核心组件Struts2框架包含以下核心组件:•拦截器(Interceptor):负责在请求前后进行统一处理,可以用来进行身份验证、日志记录等操作。

•动作(Action):负责处理用户请求,包括接收请求参数、调用业务逻辑方法等。

•结果(Result):负责生成并返回视图,可以是JSP、Freemarker、JSON等。

•值栈(ValueStack):用于存储Action处理过程中的数据,支持OGNL表达式读取和赋值操作。

•配置文件(struts.xml):用于配置拦截器、动作、结果等,实现URL与处理类之间的映射关系。

工作流程Struts2框架的工作流程如下:1.客户端发送请求到Struts2框架的前端控制器(例如:DispatcherFilter)。

2.前端控制器根据请求的URL找到对应的处理类(Action)。

3.前端控制器将请求参数、上下文信息等传递给Action,同时执行拦截器的前置处理逻辑。

4.Action处理用户请求,并根据业务逻辑生成相应的结果。

5.前端控制器将结果传递给结果组件,选择合适的视图进行渲染。

6.前端控制器将渲染后的视图返回给客户端。

3. Struts2框架的应用Struts2框架在Web应用开发中具有广泛的应用,以下是一些主要的应用场景:1. 构建Web应用程序Struts2框架提供了许多构建Web应用程序的工具和技术,包括表单验证、国际化、文件上传等功能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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的源代码,访问/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中的习惯。

以下是对各包的简要说明:包名说明org.apache.struts2. components 该包封装视图组件,Struts2在视图组件上有了很大加强,不仅增加了组件的属性个数,更新增了几个非常有用的组件,如updownselect、doubleselect、datetimepicker、token、tree等。

另外,Struts2可视化视图组件开始支持主题(theme),缺省情况下,使用自带的缺省主题,如果要自定义页面效果,需要将组件的theme属性设置为simple。

org.apache.struts2. config 该包定义与配置相关的接口和类。

实际上,工程中的xml和properties文件的读取和解析都是由WebWork完成的,Struts只做了少量的工作。

org.apache.struts2.dispatcher Struts2的核心包,最重要的类都放在该包中。

org.apache.struts2.impl 该包只定义了3个类,他们是StrutsActionProxy、StrutsActionProxyFactory、StrutsObjectFactory,这三个类都是对xwork的扩展。

org.apache.struts2.interceptor 定义内置的截拦器。

org.apache.struts2.util 实用包。

org.apache.struts2.validators 只定义了一个类:DWRValidator。

org.apache.struts2.views 提供freemarker、jsp、velocity等不同类型的页面呈现。

下表是对一些重要类的说明:类名说明org.apache.struts2.dispatcher. Dispatcher 该类有两个作用:1、初始化2、调用指定的Action的execute()方法。

org.apache.struts2.dispatcher. FilterDispatcher 这是一个过滤器。

文档中已明确说明,如果没有经验,配置时请将url-pattern的值设成/*。

该类有四个作用:1、执行Action2、清理ActionContext,避免内存泄漏3、处理静态内容(Serving static content)4、为请求启动xwo rk’s的截拦器链。

com.opensymphony.xwork2. ActionProxy Action的代理接口。

com.opensymphony.xwork2. ctionProxyFactory 生产ActionProxy的工厂。

com.opensymphony.xwork2.ActionInvocation 负责调用Action和截拦器。

负责Struts2的配置文件的解析。

com.opensymphony.xwork2.config.providers.XmlConfigurationProvider三、 Struts2的工作机制3.1 Struts2体系结构图Strut2的体系结构如图15所示:(图15)3.2 Struts2的工作机制从图15可以看出,一个请求在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的实例。

7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。

返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。

在表示的过程中可以使用Struts2 框架中继承的标签。

在这个过程中需要涉及到ActionMapper。

注:以上步骤参考至网上,具体网址已忘记。

在此表示感谢!3.3 Struts2源代码分析和Struts1.x不同,Struts2的启动是通过FilterDispatcher过滤器实现的。

下面是该过滤器在web.xml文件中的配置:代码清单6:web.xml(截取)<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>Struts2建议,在对Struts2的配置尚不熟悉的情况下,将url-pattern配置为/*,这样该过滤器将截拦所有请求。

实际上,FilterDispatcher除了实现Filter接口以外,还实现了StrutsStatics接口,继承代码如下:代码清单7:FilterDispatcher结构publicclass FilterDispatcher implements StrutsStatics, Filter {}StrutsStatics并没有定义业务方法,只定义了若干个常量。

Struts2对常用的接口进行了重新封装,比如HttpServletRequest、HttpServletResponse、HttpServletContext等。

以下是StrutsStatics的定义:代码清单8:StrutsStatics.javapublicinterface StrutsStatics {/*** Constant for the HTTP request object.*/publicstaticfinal String HTTP_REQUEST = "com.opensymphony.xwork2.dispatcher.HttpServletRequest";/*** Constant for the HTTP response object.*/publicstaticfinal String HTTP_RESPONSE = "com.opensymphony.xwork2.dispatcher.HttpServletResponse";/*** Constant for an HTTP request dispatcher}.*/publicstaticfinal String SERVLET_DISPATCHER = "com.opensymphony.xwork2.dispatcher.ServletDispatcher";/*** Constant for the servlet context} object.*/publicstaticfinal String SERVLET_CONTEXT = "com.opensymphony.xwork2.dispatcher.ServletContext";/*** Constant for the JSP page context}.*/publicstaticfinal String PAGE_CONTEXT = "com.opensymphony.xwork2.dispatcher.PageContext";/** Constant for the PortletContext object */publicstaticfinal String STRUTS_PORTLET_CONTEXT = "struts.portlet.context";}容器启动后,FilterDispatcher被实例化,调用init(FilterConfig filterConfig)方法。

相关文档
最新文档