02-Struts2的工作流程及配置文件
2struts2中常用的配置文件及result返回类型
1.web.xml文件主要完成对StrutsPrepareAndExecuteFilter的配置(在以前的版本中是对FilterDispatcher配置,新版本同样支持用FilterDispatcher配置),它的实质是一个过滤器,它负责初始化整个Struts框架并且处理所有的请求。
这个过滤器可以包括一些初始化参数,有的参数指定了要加载哪些额外的xml 配置文件,还有的会影响struts框架的行为。
除了StrutsPrepareAndExecuteFilter外,Struts还提供了一个ActionContexCleanUp类,它的主要任务是当有其它一些过滤器要访问一个初始化好了的struts框架的时候,负责处理一些特殊的清除任务。
2.struts.xml文件框架的核心配置文件就是这个默认的struts.xml文件,在这个默认的配置文件里面我们可以根据需要再包括其它一些配置文件。
在通常的应用开发中,我们可能想为每个不同的模块单独配置一个struts.xml文件,这样也利于管理和维护。
这也是我们要配置的主要文件3.struts.properties(参default.properties)在Struts框架使用了很多属性,我们可以通过改变这些属性来满足我们的需求。
要改变这些属性,只需在struts.properties文件中指定属性的key和value即可。
属性文件可以放在任何一个包含在classpath中的路径上,但是通常我们都把它放在/WEB-INF/classes目录下面。
我们可以在struts-default.properties文件中找到一个属性的列表。
4.struts-default.xml此文件是struts2框架默认加载的配置文件,它定义了struts2一些核心bean和拦截器,它会自动包含(included)到struts.xml文件中(实质是通过<package extends="struts-default">),并为我们提供了一些标准的配置。
struts2工作流程详解
工作流程一个请求在Struts2框架中的处理大概分为以下几个步骤:1客户端初始化一个指向Servlet容器(例如Tomcat)的请求;2这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)3接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action4如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy5ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类6ActionProxy创建一个ActionInvocation的实例。
和"struts2工作流程"有关的java编程小帖士:strong>Locale.setNegativeNumberMode方法的参数。
字段7ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
返回结果通常是(但不总是,也可能是另外的一个Action 链)一个需要被表示的JSP或者FreeMarker的模版。
在表示的过程中可以使用Struts2框架中继承的标签。
在这个过程中需要涉及到ActionMapper在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。
Struts2的目标很简单--使Web开发变得更加容易。
02_Struts2
struts-test2.xml 被包含的strtus-test2.xml必须是 标准的Struts2配置文件,一样 包含了DTD信息、struts根元素 等信息。
2.5 struts.xml之interceptors
Interceptor允许在Action处理之前或者之后插入自定义的代码。 使用interceptor可以完成如下操作:进行权限控制、跟踪日志、事务管理等。 可以将多个interceptor组合在一起形成一个interceptor stack。 Interceptor配置示例: struts-default.xml片段 片段
struts.xml
显示效果
2.14 动态结果 、全局结果
动态结果
全局结果的作用范围是 当前package下所有的 Action有效。
2.15 模型驱动
在Action中把用户请求数据封装成模型对象,Action需要实现 ModelDriven接口,并实现Object getModel()方法
UserAction.java
2.12 默认Action
用户请求非常简单,不需要系统过多的处理或者只是一个简单的转发,可以通过定义 name为*的Action(该Action应该放在最后定义)实现。
无class属性时默认 class为ActionSupport
Struts2还允许在容器中定义一个默认的Action,当用户请求的URL在容器中找不到 时,系统将使用此Action处理用户请求。
User.java
2.16 异常机制
任何成熟的MVC框架都提供成熟的异常处理机制,当然也可在方法中手动捕获,但这种处理方 式比较繁琐,需要书写当量的catch块,最大的缺点还在于异常处理与代码耦合,一旦需要改变异 常处理方式必须得修改代码。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配置文件加载顺序一、Struts2配置文件加载顺序通过查看StrutsPrepareAndExecuteFilter源码可以得到答案!此处,我们以及清晰了看到了该类加载配置文件的顺序,我们依次围绕标号查看对应方法产生的文件即可。
对应产生文件依次如下:. init_DefaultProperties(); // [1]---- org/apache/struts2/default.properties.. init_TraditionalXmlConfigurations(); // [2] --- struts-default.xml,struts-plugin.xml,struts.xml.. init_LegacyStrutsProperties(); // [3] --- 自定义struts.properties.. init_CustomConfigurationProviders(); // [5] ----- 自定义配置提供.. init_FilterInitParameters() ; // [6] ----- web.xml.. init_AliasStandardObjects() ; // [7] ---- Bean加载结论:【前三个是默认的,不用关注,后面三个需要注意】①default.properties该文件保存在struts2-core-2.3.7.jar 中org.apache.struts2包里面(常量的默认值)②struts-default.xml 该文件保存在struts2-core-2.3.7.jar (Bean、拦截器、结果类型)③struts-plugin.xml该文件保存在struts-Xxx-2.3.7.jar (在插件包中存在,配置插件信息)struts-config-browser-plugin-2.3.7.jar里面有④struts.xml该文件是web应用默认的struts配置文件(实际开发中,通常写struts.xml )⑤struts.properties该文件是Struts的默认配置文件(配置常量)⑥web.xml该文件是Web应用的配置文件(配置常量)后加载配置文件中修改的常量的值会覆盖前面配置文件修改的常量的值!二、Struts2运行流程详解1.Struts2的架构图请求首先通过Filter chain,Filter主要包括ActionContextCleanUp,它主要清理当前线程的ActionContext和Dispatcher;FilterDispatcher主要通过AcionMapper来决定需要调用哪个Action。
02Struts2配置详解
Struts 2 Action 2-2
/user!register.action /user!login.action
动态方法调用
作用:减少Action数量 public class UserAction implements Action { 调用UserAction的register()方法 调用UserAction的login()方法 … 使用:actionName!methodName.action public String login() { … 禁用:将属性strutsenableDynamicMethodInvocation设臵为 } false public String register() { … } <action name="user" class="erAction"> } <result name="login">/page/manage.jsp</result> <result name="register">/page/success.jsp</result> <result name="login_input">/page/login.jsp</result> <result name="register_input">/page/register.jsp</result> <result name="error">/page/error.jsp</result> </action> 演示示例:动态方法调用
第二章
Struts2框架的执行流程
Struts2框架的执⾏流程Struts2是⼀个基于MVC设计模式的Web应⽤框架,它本质上相当于⼀个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建⽴模型与视图的数据交互。
⼀.Struts2执⾏流程介绍1.通过浏览器发送⼀个请求2.会被StrutsPrepareAndExecuteFilter拦截(struts2的拦截器作⽤)3.会调⽤strust2框架默认的拦截器(interceptor)完成部分功能4.在执⾏Action中操作5.根据Action中⽅法的执⾏结果来选择来跳转页⾯Result视图⼀般我们将StrutsPrepareAndExecuteFilter 叫做前端控制器(核⼼控制器),只有在web.xml⽂件中配置了这个filter我们的strtus2框架才能使⽤。
<!-- 声明StrutsPrepareAndExecuteFilter --><filter> <filter-name>struts2Filter</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><!-- 拦截访问路径 --><filter-mapping><filter-name>struts2Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping>Strtus2的默认拦截器(interceptor),它们是在struts-default.xml⽂件中配置。
struts2核心工作流程与原理
struts2核心工作流程与原理做为一名技术人员,听到太多关于.net和java的比较的话题。
我想对那些技术人员说,请先了解一下什么是java(或者.net)吧,其实你根本不了解。
这是Struts2官方站点提供的Struts 2 的整体结构。
一个请求在Struts2框架中的处理大概分为以下几个步骤1.客户端提起一个(HttpServletRequest)请求,如上文在浏览器中输入”http://localhost:8080/TestMvc/add.action”就是提起一个(HttpServletRequest)请求。
2.请求被提交到一系列(主要是三层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、 FilterDispatcher)。
注意这里是有顺序的,先ActionContextCleanUp,再其他过滤器(SiteMesh等)、最后到 FilterDispatcher。
3.FilterDispatcher是控制器的核心,就是mvc中c控制层的核心。
下面粗略的分析下我理解的FilterDispatcher工作流程和原理:FilterDispatcher进行初始化并启用核心doFilter其代码如下:public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain ) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) req;HttpServletResponse response = (HttpServletResponse) res;ServletContext servletContext = filterConfig.getServletContext();// 在这里处理了HttpServletRequest和HttpServletResponse。
struts2工作流程
struts2工作流程Struts2工作流程摘要:Struts2是一个基于MVC(Model-View-Controller)设计模式的web应用程序开发框架。
本文将介绍Struts2的工作流程,包括请求的处理过程、核心组件的作用以及如何扩展和定制框架。
引言:在web应用程序开发过程中,使用一个成熟的框架可以大大提高开发效率和代码质量。
Struts2是一个功能强大、易于使用的开源框架,已经被广泛应用于Java EE开发领域。
了解Struts2的工作流程能够帮助开发者更好地理解框架的运作原理,从而更好地设计和开发web应用程序。
一、请求的处理过程当客户端发起一个请求时,Struts2框架会按照特定的流程来处理请求并生成相应的响应。
下面是Struts2请求处理过程的简要说明:1. 客户端发送请求。
2. 服务器接收请求并将其传递给Servlet容器。
3. Servlet容器(如Tomcat)将请求交给Struts2的过滤器(StrutsPrepareAndExecuteFilter)进行处理。
4. 过滤器通过解析请求的URL来确定该由哪一个Action类来处理请求。
5. 过滤器创建一个ActionInvocation对象,将该对象传递给Struts2的核心控制器(ActionProxy)。
6. 核心控制器根据Action类的配置信息和请求参数来调用对应的Action类的方法。
7. Action类的方法执行相应的业务逻辑,并返回一个结果(Result)对象。
8. 核心控制器将结果传递给结果视图(Result View),最终生成响应。
9. 响应返回给Servlet容器,然后传递给客户端。
二、核心组件的作用Struts2框架中有几个核心组件,这些组件共同协作来处理请求并返回响应。
下面我们来看一下它们的作用:1. 过滤器(StrutsPrepareAndExecuteFilter):负责处理所有传入请求并将其交给适当的Action类进行处理。
struts2配置文件
struts.xml
命名空间
在web中如果有需要多个同名的action,可以通过 <package>元素的namespace属性指定命名空间来管 理action。
<package name="test" extends="struts-default"> ,如果未指 定命名空间,则命名空间默认为 “ namespace="" ”。
<package name="get" extends="struts-default" namespace="/apple">
<action name="getUsers" class="org.GetUsersAction"> http://localhost:8080/web应用名/apple/getUsers.action
struts.xml
<action>标签
<action name=""> <result>.</result> </action> 该action定义可以列出web应用根路径下的所有 页面
9
struts.xml
<result>标签
name---指定需要映射的逻辑视图名
默认为success 默认为dispatcher,转发,用于与jsp整合的结果类 型
配置struts.properties
Struts2配置文件详解--精品版
7. struts.xml
struts.xml 文件中包含的是我们开发的 Action 的配置。如前面登录例子中的配置:
4. struts.properties 文件
这个文件提供了一种更改框架默认行为方式的机制。在一般情况下,如果不是打算让 调试更加方便的话,我们没有必要更改这个文件。哪么这些默认的属性在哪里存放呢? 在项目的 src 目录中可以自己编写一个名称为 struts.properties 文件, 编译以后就放 到了/WEB-INF/classes 中,Struts2 框架在启动的时候,会自动读取这个文件,但是在读 取这个文件之前,会先到 struts2-core-xxx.jar 包中加载名为 default.properties 文件, 这个文件中定义了默认的配置,所以我们可以在 strtus.properties 中定义一些配置覆盖 default.properties 中的配置,如果没有 struts.properties 文件,则采用默认配置。 打开 default.properties 文件我们会看到如下部分类容:
/
Copyright©2010 吴青版权所有
吴老师教学讲义
4
打开该文件, 可以看到一些全局的配置选项, 在这些选项中, 我们发现了有一些这样的配置, 其中 struts.action.extension 配置的就是 Struts 默认的请求后缀名。 关于更多的配置的含义, 后面用到了再讲解,现在暂时不必理会这些配置的含义.
### Used by the DefaultActionMapper ### You may provide a comma separated list, e.g. struts.action.extension=action,jnlp,do ### The blank extension allows you to match directory listings as well as pure action names ### without interfering with static resources. struts.action.extension=action,, ### This can be used to set your default locale and encoding scheme # struts.locale=en_US struts.i18n.encoding=UTF-8
struts2流程
struts2流程Struts2是一种基于Java的Web应用程序框架,它是在Servlet、JSP、JavaBean等技术的基础上开发的,目的是为了简化Web应用程序的开发和维护过程。
Struts2框架采用MVC(模型-视图-控制器)的架构模式,通过将用户请求分发给相应的控制器,然后根据控制器的指令进行处理,再将结果返回给用户进行展示。
下面我们将详细介绍Struts2的工作流程。
Struts2的工作流程可以分为以下几个步骤:1. 客户端发送请求:当用户通过浏览器访问某个URL地址时,客户端会生成一个HTTP请求,该请求会发送给服务器。
2. DispatcherServlet拦截请求:服务器接收到请求后,DispatcherServlet作为Struts2的核心控制器将拦截该请求。
3. 根据请求寻找相应的Action:DispatcherServlet会根据请求的URL地址和配置文件中的映射规则,找到匹配的Action类。
4. 创建Action实例:一旦找到了匹配的Action类,Struts2会创建该Action类的一个实例。
5. 封装请求参数:Struts2框架会自动将请求中的参数封装到Action实例中的属性中,以便在后续的处理中使用。
6. 调用Action方法:一旦请求参数被封装好,Struts2框架会调用对应Action类中的相应方法来处理该请求。
在Action方法中,可以进行一些业务逻辑的处理,并返回相应的结果。
7. 响应结果处理:Action方法的执行结果会被封装到一个Result对象中,该对象包含了结果的类型和数据。
Struts2框架会从配置文件中查找对应的结果视图,并将结果数据传递给视图进行展示。
8. 渲染视图:Struts2会将结果视图进行渲染,然后将渲染后的内容发送给客户端的浏览器。
9. 响应结果发送给客户端:服务器会将渲染后的内容作为HTTP响应发送给客户端的浏览器,浏览器接收后进行展示。
struts2工作流程解析
struts2工作流程解析1. 初始的哀求通过一条标准的过滤器链,到达 servlet 容器 ( 比如toat 容器,WebSphere 容器 )。
2. 过滤器链包括可选的ActionConttCleanUp 过滤器,用于系统整合技术,如 SiteMesh 插件。
3. 接着调用 FilterDiser(或者SutsPrepareAndExeeFilter),FilterDispatcher 查找 ActionMapper,以确定这个哀求是否需要调用某个 Action。
4. 假如 ActionMapper 确定需要调用某个 Action,FilterDispatcher 将控制权交给 ActionProxy。
5. ActionProxy 依照框架的配置文件(struts.xml),找到需要调用的 Action 类。
6.ActionProxy 创建一个 ActionInvoion 的实例。
ActionInvocation 先调用相关的拦截器(Action 调用之前的部分),最后调用 Action。
7.一旦 Action 调用返回结果,ActionInvocation 按照 struts.xml 配置文件,查找对应的转发路径。
返回结果通常是(但不总是,也可能是另外的一个 Action 链)JSP 技术或者 FreeMarker 的模版技术的网页展现。
Struts2 的标签和其他视图层组件,协助展现我们所需要的显示结果。
在此,我想说清晰一些,终于的显示结果一定是 HTML 标签。
标签库技术和其他视图层技术只是为了动态生成 HTML 标签。
8. 接着根据相反次序执行拦截器链 ( 执行 Action 调用之后的部分 )。
最后,响应通过滤器链返回(过滤器技术执行流程与拦截器一样,都是先执行前面部分,后执行后面部)。
假如过滤器链中存在ActionContextCleanUp,FilterDispatcher 不会清理线程局部的ActionContext。
2.Struts2配置文件
2.Struts2配置⽂件1.配置⽂件的加载顺序0. 需要掌握* 加载了哪些个配置⽂件(重点的)* 配置⽂件的名称是什么* 配置⽂件的位置* 配置⽂件的作⽤1. Struts2框架的核⼼是StrutsPrepareAndExecuteFilter过滤器,该过滤器有两个功能* Prepare -- 预处理,加载核⼼的配置⽂件* Execute -- 执⾏,让部分拦截器执⾏2. StrutsPrepareAndExecuteFilter过滤器会加载哪些配置⽂件呢?* 通过源代码可以看到具体加载的配置⽂件和加载配置⽂件的顺序* init_DefaultProperties(); -- 加载org/apache/struts2/default.properties* init_TraditionalXmlConfigurations(); -- 加载struts-default.xml,struts-plugin.xml,struts.xml* init_LegacyStrutsProperties(); -- 加载⾃定义的struts.properties.* init_CustomConfigurationProviders(); -- 加载⽤户⾃定义配置提供者* init_FilterInitParameters() ; -- 加载web.xml3. 重点了解的配置⽂件* default.properties -- 在org/apache/struts2/⽬录下,代表的是配置的是Struts2的常量的值* struts-default.xml -- 在Struts2的核⼼包下,代表的是Struts2核⼼功能的配置(Bean、拦截器、结果类型等)* struts.xml -- 重点中的重点配置,代表WEB应⽤的默认配置,在⼯作中,基本就配置它就可以了!!(可以配置常量)* web.xml -- 配置前端控制器(可以配置常量)* 注意:* 前3个配置⽂件是struts2框架的默认配置⽂件,基本不⽤修改。
struts2流程和配置步骤
Struts2执行流程2009-12-16 12:19Struts2执行流程1. web.xml 部署描述符2. FilterDispatcher 实现StrutsStatics, Filter接口(1)Filter:一个filter是一个对象用于执行过滤任务为每个请求资源(一个servlet或静态内容),或响应一个资源,或两者.过滤器执行过滤是在doFilter方法中.每个过滤器访问一个FilterC onfig对象从中获取初始化参数,一个引用到ServletContext可以被使用,例如,在过滤器任务需要时装载资源.过滤器的配置在Web应用程序的部署描述符中.init()-初始化过滤器,它的输入参数javax.servlet.FilterConfig的一个实例,可以这里初始化过滤要使用到的FilterConfig。
这个方法由Web容器自动调用。
doFilter()-进行具体的过滤操作,这个方法以javax.servlet.ServletRequest请求信息,jav ax.servlet.ServletResponse响应信息,javax.servlet.FilterChain过滤链。
过滤链,在Web 应用程序中所有的过滤器会构成一个链状,符合过滤条件的程序将会根据定义的顺序执行所有链中的过滤器。
在这个方法中调用FilterChain的doFilter(javax.servlet.ServletReque st, javax.servlet.SerletResponse)方法就可以传递到链中的下一个过滤器。
destory()-销毁过滤器,可以在这里释放使用完的资源,例如设置过滤器中FilterConfig为n ull。
(2)StrutsStatics: 定义Struts中使用的常量,常量用来获取和设置Action上下文以外的对象或其它集合.可以使用如下方式获取这些对象ActionContext context = ActionContext.getContext();HttpServletRequest request = (HttpServletRequest)context.get(HTTP_REQUEST);(3) FilterConfig接口:一个过滤器配置对象,用于Servlet容器传递信息到过滤器在初始化期间.BeanSelectionProvider类:选择框架实现的关键扩展点,用于装载属性常量.选择的实现是从container builder使用的名字定义关联属性,默认名为”struts”例如:获取requestActionContext.getContext().put(HTTP_REQUEST, request)执行流程:※init(FilterConfig filterConfig)初始化过滤器->createDispatcher(filterConfig); 创建调度器,返回带有过滤器参数Dispatcher ->执行Dispatcher的init方法,首先创建configurationManager,如果为null使用Bean SelectionProvider. DEFAULT_BEAN_NAME参数创建.-> 配置的初始化//加载org/apache/struts2/default.properties文件init_DefaultProperties(); // [1]//加载格式相同的struts-default.xml,struts-plugin.xml,struts.xmlinit_TraditionalXmlConfigurations(); // [2]//可读取public static final String STRUTS_LOCALE = "struts.locale";配置init_LegacyStrutsProperties(); // [3]//加载Web.xml中的actionPackages配置init_ZeroConfiguration(); // [4]//读取configProviders参数,配置用户定义的providerinit_CustomConfigurationProviders(); // [5]//Struts2.0.9中为空init_MethodConfigurationProvider();//初始化Filter中的config参数中指定的配置文件, initParams参数的获取是在Dispatch er创建时init_FilterInitParameters() ; // [6]//在BeanSelectionProvider中注册别名init_AliasStandardObjects() ; // [7]//读取public static final String STRUTS_I18N_RELOAD = "struts.i18n.reload";参数, Container container = init_PreloadConfiguration();//读取public static final String STRUTS_CONFIGURATION_XML_RELOAD = "struts.c onfiguration.xml.reload";init_CheckConfigurationReloading(container);//初始化weblogic相关配置init_CheckWebLogicWorkaround(container);-> String param = filterConfig.getInitParameter("packages");String packages = "org.apache.struts2.static template org.apache.struts2.inte rceptor.debugging";设置静态资源Prefixes※->doFilter处理一个Action和它请求的静态资源,过滤器尝试配置请求到一个Action mapping.如果mapping找到了,Action的处理在dispatcher的serviceAction方法.如果Action处理失败,d oFilter将会尝试去创建一个错误页面通过dispatcher.另外请求一个静态资源,资源将直接C opy到响应,使用适当的caching头设置.如果请求没有匹配一个Action mapping或一个静态资源页,那么将通过.(1) getServletContextServlet2.3规范中Servlet Context可以从Session中从新获取。
struts2框架的6个配置文件
Struts2的6个配置文件,分别是struts-default.xml,default.properties,struts-plugin.xml,struts.xml,struts.properties,web.xml1、struts-default.xml,里面放置的是struts2框架的核心东西,如bean类,package包,result type,interceptor拦截器等2、default.properties,properties类型的文件里面放置的是键值对,key和value,主要是对一些常量进行设定。
3、struts-plugin.xml,与第三方插件进行整合时需要使用的配置文件。
如我们和spring进行整合时,就需要使用到struts-spring-plugin.xml这个配置文件4、struts.xml,需要我们程序员在src目录下手动创建,在这个里面也可以对常量进行设定,使用的是constant标签,包含name和value属性。
5、struts.properties,这里也是对常量进行设定6、web.xml,这里设定struts2的启动项,使用的是filter和filter-mapping标签,也可以进行常量的设定,在filter标签里使用init-param标签。
但是我们一般不再这里设定。
这里有4个配置文件,可以对常量进行设定。
分别是default.properties,struts.xml,struts.properties,web.xml。
他们的优先级顺序是web.xml 优先级最高,其次是struts.properties,struts.xml,最后是default.properties。
我们最主要进行学习的就是struts.xml,其他的作为了解内容就可以了。
简单说struts2框架运行流程
简单说struts2框架运⾏流程(1)提交请求客户端通过HttpServletRequest向servlet容器(即tomcat)提交⼀个请求。
请求经过⼀系列的过滤器,例如图中的ActionContextCleanUp和Other filter(SlterMesh,etc)等,最后被struts的核⼼过滤器FilterDispatcher控制到。
注:核⼼控制器2.1.3版本之后,struts的filterDispatcher核⼼控制器变成了StrutsPrepareAndExecuteFilte被核⼼控制器控制到之后才会访问Actionmapper来决定是否调⽤某个action(即⽤户是否要请求某个action)。
如果是其他资源请求例如jsp页⾯,不会⽤到action。
(2)移交控制权如果要⽤到action,核⼼控制器将控制权交给ActionProxy(即是action的代理)。
ActionProxy获得控制权之后通过ConfigurationManager对象加载核⼼配置⽂件struts.xml。
Struts的action在这个配置⽂件进⾏配置,所以要加载它。
(3)创建ActionInvocation的实例如果在struts.xml找到需要调⽤的action, ActionProxy会创建⼀个ActionInvocation的实例。
(4)调⽤action前的拦截器拦截器是struts2⾮常重要的概念,是核⼼功能实现。
Struts中的⼤部分功能通过拦截器实现。
Actioninvocation包括创建的action实例,同时包括另外⾮常重要的⼀部分------拦截器。
调⽤action前后还会调⽤很多的拦截器。
在调⽤action之前会依次调⽤⽤户所定义的拦截器。
(5)调⽤action的业务⽅法进⾏业务处理当把action前的拦截器执⾏完之后才会调⽤action的业务⽅法进⾏业务处理,然后返回⼀个Result(业务⽅法对应String类型的返回值,即是字符串,例如SUCCESS,INPUT,ERROR,NONE,LOGIN和⽤户⾃⼰在struts对应定义result标签name属性的值)(6)匹配result然后根据返回的字符串来调度我们的视图来匹配我们的struts.xml中对应action标签中的result标签。
struts2工作流程
struts2工作流程Struts2工作流程。
Struts2是一个基于MVC设计模式的开源Web应用框架,它是Struts1的升级版本。
它的工作流程包括请求的接收、处理和响应,下面我们来详细了解一下Struts2的工作流程。
1. 拦截器的拦截。
在Struts2中,请求首先会经过一系列的拦截器。
拦截器是Struts2框架的核心组件,它负责拦截请求并在请求的处理过程中执行一些特定的任务,比如验证用户身份、处理异常等。
在拦截器的拦截下,请求会被传递给Action类进行处理。
2. Action类的执行。
Action类是Struts2框架中用于处理请求的核心组件,它包含了请求的处理逻辑。
当请求经过拦截器后,会被传递给相应的Action类进行处理。
在Action类中,我们可以编写业务逻辑代码,比如从数据库中获取数据、处理用户提交的表单数据等。
3. 结果的返回。
在Action类处理完请求后,会返回一个结果。
结果可以是一个JSP页面、一个JSON数据,甚至是一个文件流。
Struts2框架会根据Action类返回的结果类型,选择合适的结果视图进行展示。
这样,用户就能够看到请求处理的结果了。
4. 结果的展示。
最后,Struts2框架会将处理完的结果展示给用户。
如果是一个JSP页面,框架会将页面渲染出来;如果是一个JSON数据,框架会将数据返回给前端;如果是一个文件流,框架会将文件发送给用户。
这样,用户就能够看到请求处理的结果了。
总结。
综上所述,Struts2的工作流程包括拦截器的拦截、Action类的执行、结果的返回和结果的展示。
通过这样的流程,Struts2能够很好地处理用户的请求,并将处理结果展示给用户。
希望通过本文的介绍,能够让大家对Struts2的工作流程有一个更加清晰的认识。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Struts2的工作流程及配置文件--- ---Struts2.0的流程图从图中看到Struts2的工作流程如下:1.服务器接收到的请求首先经过一组过滤器链(实际中的其他过滤器可能还包括诸如Spring 的字符过滤器CharactorEncodingFilter、V elocity的过滤器等,一般FilterDispatcher位于过滤器的最后一个执行),过滤器链按照你在web.xml中的配置顺序在接收客户请求时顺序执行,在向客户发送响应时反序执行,Struts2的核心FilterDispatcher在web.xml中的配置如下:<filter><filter-name>setCharactor</filter-name><!-- 配置字符过滤--><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter><filter-name>struts2</filter-name><!-- 配置Struts2过滤器--><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter><filter-mapping><filter-name>setCharactor</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>注意:如果你使用的是W ebLogic6.1作为应用服务器,需要使用FilterDispatcherCompatW eblogic61替代FilterDispatcher。
2.请求被送到FilterDispatcher之后,FilterDispatcher会通过其私有静态的属性ActionMapper 询问这个请求是否需要调用Action处理,如果需要调用Action,FilterDispatcher会把请求委托给ActionProxy,ActionProxy调用ActionInvocation查找配置文件中该Action的所有信息,并以这个Action为目标创建代理对象(因为Struts2中的Action由于XWork的设计理念,并没有与Servlet的API被调用,所以如果直接调用Action的实例,那么显然基于HTTP 的请求都将无法传入Action。
Struts2通过创建Action的代理对象,并使用拦截器将HTTP 的请求信息传入代理对象,这是典型的AOP处理方式,这也实现了控制器与Servlet的API 的分离,这是Struts1.x所欠缺的优秀的设计方式),然后执行该Action之前的所配置的所有拦截器,与过滤器相同,在接受请求时,会顺序执行你在配置文件中为该Action配置的拦截器顺序;3.在穿越拦截器之后,就会执行Action,当Action执行完毕,ActionInvocation就要使用result加载结果(可以是JSP、PDF、XML、V elocity、EXCEL、Action等,Struts2为我们提供了丰富的视图模板可以调用),加载完结果之后会再次反向穿越拦截器和过滤器链,将响应结果发送给客户;从上面不难看出,拦截器(Interceptor)是Struts2中非常重要的组成部分,在Struts2中绝大多数功能都是通过配置拦截器实现的,例如防止表单的重复提交、文件上传等等。
在上图中的action与Struts1有很大的不同,Struts1在接收到第一个请求时,会创建Action 实例,将其放到HashMap中,以后的请求会直接返回这个实例,也就是说一个Action的实例是多线程共享的,这样虽然节省了资源,但在Action中应谨慎使用全局变量,因为全局变量是多线程共享的,所以Struts1+Hibernate3+Spring2整合的时候,其中一种方式是把Struts1的Action交给Spring容器管理,我们在Spring的XML文件中用<bean>元素配置Action的时候,Spring建议我们设置singleton=”false”(Spring2.0之后改为scope=”prototype”),也就是一个请求产生一个Action实例!在Struts2中的Action是线程安全的,因为Struts2会为每个请求创建一个Action实例,所以我们可以大胆的使用全局变量。
另外,Struts2的POJO并不要求继承任何类或实现任何接口,Action也不要求继承任何类或实现任何接口,不像Struts1那样要求POJO继承ActionForm或其子类,Action要求继承Action 或其子类。
Struts2都是通过配置文件和拦截器与POJO、Action建立关联,实现了非侵入性,这是优越于Struts1的重要优势!另外要注意的是,最好对Action中的POJO进行初始化,防止空指针异常。
但实际上Struts2建议取消类似于FormBean这样的累赘对象,主张使用POJO代替Action和FormBean,这点和JSF是一致的,在JSF中也是用一个普通的POJO 完成接受表单数据并处理请求的目的。
_______________________________________________________________________________ Struts2的API为两个部分:Struts2 core和Xwork,两个部分分工协作。
Struts2在接受到用户请求时会遍历HttpSession等对象,将所有值装入Action Context Map对象(请求参数会装入值栈ValueStack中的根对象),在Xwork中(也就是Action)操作经过包装的对象,而不是直接操作Servlet的API,这实现了Xwork与Servlet API的分离,大大降低了系统的耦合度,使得逻辑层不依赖于表现层(Web层),因为XWork并不是专为Servlet容器设计的。
注意:关于OGNL的具体部分请参看本教程第四篇的内容。
XWork的API提供了两种访问Servlet的API的方式供我们选择:1.IOC方式,也就是通过setXXX()方法进行依赖注入,这要求我们的Action实现ServletRequestAware、SerlvetResponseAware、SessionAware接口,通过实现接口中的setXXX()方法传递Servlet的API,这是由struts-default.xml的默认拦截器栈中的”servlet-config”拦截器提供的,如下图所示:Struts2默认地会为每个Action配置defaultSatck(因为我们自己定义的package一般都会使用extends=”struts-default”继承struts-default.xml中的name属性为”struts-default”的<package>,这个文件在struts-core-2.0.6,jar的根目录中,大家可以参看API很好的了解这个文件里的东东都是做什么的。
),这是Struts2的默认拦截器栈,里面包含了一组拦截器,通常我们不需要再为Action配置拦截器,因为这些默认的已经足够了!2.非IOC方式,因为每个请求都有一个Action的上下文,所以我们可以使用com.opensymphony.xwork2.ActionContext访问session对象,方法:ActionContext.getContext.getSession().put(“”,””),或者使用ActionContext的子类org.apache.struts2.ServletActionContext的静态方法访问请求、响应等对象,方法:ServletActionContext.getRequest()、ServletActionContext.getResponse()、ServletActionContext.getPageContext(),但一般建议能使用ActionContext完成的功能,尽量不要使用ServlvetActionContext,从包名上就能看出来,ActionContext是XWork是的API,使用装饰过后的Map对象,而ServletActionContext是Struts2的API,使用ServletActionContext无疑是把Servlet的API引入了XWork中。
有人可能会问,那ActionContext使用请求和响应对象不是很方便哦,这很简单,因为你在实际开发中很少在Action中使用request和response对象,使用response无非是利用它的重定向功能,但这个功能使用<result name=”success” type=”redirect”>JSP文件</result>就可以解决了;使用request无非是在请求中设置参数,利用request.setAttribute(“”,””),这个功能完全可以交给POJO哦!你可以在POJO中定义一个变量,向里面传递值,JSP页面上直接取POJO的值就可以了。
3.Struts2的Action是控制器,并不是标准的Servlet,如果我们想在Action结束的时候向客户端输出,我们可以获取HttpServletResponse对象,调用其输出字符流或者字节流的方法,最后加上return null;即可完成。
你也可以使用result的type=stream向客户端写入流,这个会在文件上传和下载中看到!4.当然,我们也可以完全不接触Servlet的API进行操作,而是直接利用ActionContext对象,例如:在JSP中我们可以利用EL表达式进行输出这些值,如下图所示:从上面的图我们可以看出EL表达式可以独立使用,也可以配合JSTL的c:out标签进行输出。