struts.xml总结

初学struts,还没入门,看了一点,然后理理自己的思绪。不对之处,还请见告,也请原谅。最后附上权威的执行流程

考虑一下MVC模型,

在struts中,

C:FilterDispatcher

V:page

M:action

回想一下这个流程

1、首先是当tomcat收到一个HttpServletReques之后,根据web.xml是否通知struts2

因此自然要看一下web.xml配置文件了,

如果想要struts拦截

那么就需要添加过滤器Filter

  1. <span style="font-size:18px;"><filter>
  2. <filter-name>
  3. struts
  4. </filter-name>
  5. <filter-class>
  6. org.apache.struts.dispatcher.FilterDispatcher
  7. <fileter-class>
  8. </filter>
  9. <filter-mapping>
  10. <filter-name>
  11. struts
  12. </filter-name>
  13. <url-parttern>
  14. /*.action
  15. </url-parttern>
  16. </filter-mapping>
  17. </span>

复制代码

如果添加了上述代码,就会根据设定拦截url

2、struts2拦截到url之后,就会根据struts.xml文件采取相应的action。所以有必要了解struts.xml

关于struts.xml的配置:

1、首先是得写action,让struts2知道怎么采取措施,因此也就有了<action>标签

2、在action之前或之后想要做一些事情,比如检查是否登录客户,是否记录action动作等等,因此就有了<interceptor>

3、action和interceptor都操作完了,我们得返回数据,因此<result>诞生了

struts就像一个控制器一样,决定了系统采取的action和返回给用户的page。

3、了解下struts中的各个标签。

1、<package>

为了更好的管理action,不同的package里可以存在相同名字的action

属性:

name ,比选

namespace:可选,默认是""(空字符串)可与url有关联,比如请求/test/*.action,可以将namespace设置为“/test”

exteds:可选,继承的包,可以写上extends = “struts-default”

abstract:可选,表示该包必须被继承

2、package规划好了之后,各种标签就可以往里面放了,比如<action>

action决定了采用何种动作。

属性:

name   和url中请求的*.action是同名,

class    这个action要调用的类

method      执行class定义的action动作,默认是execute()

3、执行动作之前或之后需要验证一些信息或需要进行一些后续处理,使用拦截器

  1. <span style="font-size:18px;"><intercepters>
  2. <interceptor name="security" class="com.mycompany.security.SecurityInterceptor" />
  3. <interceptor-stack name="defaultComponentStatck">
  4. <interceptor-ref name="component" />
  5. <interceptor-ref name="deaultStack" />
  6. </interceptor-stack>
  7. </intercepters></span>

复制代码

4、action完成之后,所做的改动怎么通知struts2呢?

那就是result的功能了

  1. <span style="font-size:18px;"><action name="VelocityCounter" class="com.opensymphony.webwork.example.counter.SimpleCounter">
  2. <result name="success">...</result>
  3. <interceptor-ref name="defaultComponentStack" />
  4. </action></span>

复制代码

这个流程大致就是这样的了,由于初学,流程总结也只能是自己理解层面的了,是为了方便记忆。

权威的执行流程:

一个请求在Struts2框架中的处理大概分为以下几个步骤:

1、 客户端发送请求;
2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMeshPlugin)
3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action。FilterDispatcher的功能如下:

(1)执行Actions
       (2)清除ActionContext
       (3)维护静态内容
       (4)清除request生命周期内的XWork的interceptors

4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
5、ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类
6、ActionProxy创建一个ActionInvocation的实例。
7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapper

拦截器与过滤器:

1、拦截器是基于java反射机制的,而过滤器是基于函数回调的。

2、过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。
3、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
4、拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。
5、在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。

在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。

Struts2的目标很简单--使Web开发变得更加容易。为了达成这一目标,Struts2中提供了很多新特性,比如智能的默认设置、annotation的使用以及"惯例重于配置"原则的应用,而这一切都大大减少了XML配置。Struts2中的Action都是POJO,这一方面增强了Action本身的可测试性,另一方面也减小了框架内部的耦合度,而HTML表单中的输入项都被转换成了恰当的类型以供action使用。开发人员还可以通过拦截器(可以自定义拦截器或者使用Struts2提供的拦截器)来对请求进行预处理和后处理,这样一来,处理请求就变得更加模块化,从而进一步减小耦合度。模块化是一个通用的主题--可以通过插件机制来对框架进行扩展;开发人员可以使用自定义的实现来替换掉框架的关键类,从而获得框架本身所不具备的功能;可以用标签来渲染多种主题(包括自定义的主题);Action执行完毕以后,可以有多种结果类型--包括渲染JSP页面,Velocity和Freemarker模板,但并不仅限于这些。

时间: 2024-11-09 07:01:02

struts.xml总结的相关文章

struts.xml配置解释

1.struts.xml配置文件中的<package>中的name表示包名,可以看成是一个模块名称, name属性必需,用于被其他的包引用当前包2.extends默认我们会继承struts-default包,它里面默认有写加载器.过滤器之类的配置, 当前包继承哪个包,继承的,即可以继承其中的所有配置,通常情况下继承struts-default 我们可以直接使用,该包在 下的 中 3. 什么是action: 一个struts2的请求就是一个action 4. 看到class.method属性可以

idea+struts2配置struts.xml时struts-default出错

在idea中创建struts2项目时,在配置文件struts.xml的extends="struts-default"中,struts-default一直标红. 解决方法: File -> Project Structure -> Modules -> Web -> Struts2 -> File Sets 在Default File Set中点击"+",将struts.xml和struts-default.xml放在一个组里.

struts2中struts.xml配置文件详解

struts.xml的常用配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts

struts2中配置多个struts.xml配置文件

一般来说我们在做开发的时候,是一个团队,我们可能会按照人来分不同的模块,每个人维护自己不同的struts配置文件,但在最后整合的时候,一定要把各人所用到的配置文件都整合进来,这里有一个方法,用是在你写的主要的配置文件中把别的配置文件导进来. 在struts.xml中加入下面的文字就可以解决了 <include file="struts-default.xml"> < include file="struts_helei.xml" /> <

struts2中struts.xml文件用通配符配置

在使用struts2的时候,能简单快速地连接action和jsp页面.主要是神奇的配置文件:struts.xml 在起作用. 示例: 这是目录结构: 来一份可用的struts.xml的代码: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//

struts2配置文件的加载顺序以及 struts.xml package 的配置说明

查看StrutsPrepareAndExecuteFilter:(核心过滤器)两个功能 :预处理 和 执行 在预处理功能中 init 方法中会有加载配置文件的代码: dispatcher.init(); init_DefaultProperties(); // [1]                  ---- 加载org.apache.struts.default.properties.配置的是struts2的所有常量. init_TraditionalXmlConfigurations();

struts2学习笔记--struts.xml配置文件详解

这一节主要讲解struts2里面的struts.xml的常用标签及作用: 解决乱码问题 <constant name="struts.i18n.encoding" value="utf-8"/> //设置编码格式为utf-8 自定义扩展名 <constant name="struts.action.extension" value="action,,wang"/> //struts默认扩展名是actio

Struts.xml讲解

解决在断网环境下,配置文件无提示的问题我们可以看到Struts.xml在断网的情况下,前面有一个叹号,这时,我们按alt+/ 没有提示,这是因为” http://struts.apache.org/dtds/struts-2.0.dtd”是一个网络地址,如果上网的话,IDE会自动帮我们下载此文件,如果断网就没有办法了,但是我们还是有解决方法的.首先在源码包里找到struts-2.0.dtd这个文件在MyEclipse中菜单栏中选择:windowPreferencesMyEclipseFiles

Struts2 学习笔记——struts.xml文件之Bean的配置

Struts2的大部分核心组件不是以硬编码的形式写在代码中,而是通过自身的IoC容器来管理的. Struts2以可配置的形式来管理核心组件,所以开发者可以很容易的扩展框架的核心组件.当开发者需要扩展或者替换Struts2的核心组件时,只需要提供自己的组件实现类,并部署在Struts2的IoC容器中即可. 我们打开struts2-core-2.2.1.1.jar中的struts-default.xml文件,可以看到大量的Bean的定义.如下代码片段: <struts> <!—- 两个对象工