`
Jellen129
  • 浏览: 61998 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

struts2中配置篇值请求处理元素

阅读更多

对请求进行处理的元素主要有interceptors、Action以及Result。下面分别对其进行讲述。

1.拦截器配置(interceptors)

  通过使用拦截器,我们可以在action中的方法执行之前先执行一些我们事先定义好了的方法,也可以在action中的方法执行之后立即执行一些我们 事先定义好了的方法。在开发的过程中,拦截器将是一个强有力的工具。拦截器有很多很多的功能,如校验、属性封装、安全、日志等等,如下所示:

校验(validation): 检查输入是否正确

属性封装(property population): 将输入传输和转化为对象的属性

日志(logging): 记录关于每个action的详细信息

切面(profiling): 记录action的吞吐量,寻找性能瓶颈(不是很懂)

  我们可以将多个拦截器链接在一起形成一个拦截器栈。比方说一个action不仅要对客户端的资格进行审查,还要记录它自己的行为,那么我们可以将实现这两个功能的拦截器放在一起,形成一个拦截器栈 (interceptor stack)。拦截器是以java类的形式实现的,因此每一个拦截器都有一个唯一的类名。为了让对拦截器的参考更加容易,我们可以在框架中为每个拦截器注册一个更简单的名字。下面给出了一个注册拦截器的例子:

< interceptors >

    
< interceptor name = " security "   class = " com.company.security.SecurityInterceptor " />

    
< interceptor - stack name = " secureStack " >
            
< interceptor - ref name = " security " />
            
< interceptor - ref name = " defaultStack " />
    
</ interceptor - stack >
</ interceptors >

 

 在定义一个拦截器栈的时候,单个的拦截器和拦截器栈可以以任意的顺序混合在一起,struts框架将会按照拦截器在栈里面的顺序调用它们。大多数应用程 序都会定义一个默认的拦截器栈,如:<default-interceptor-ref name="defaultStack"/>,默认的拦截器栈会作用于package中的每个action上。当然action还可以定义它自己的本地 (局部)栈,如下面例子所示:

< action name = " VelocityCounter "   class = " org.apache.struts2.example.counter.SimpleCounter " >
    
    
< result name = " success " >             </ result >
    
    
< interceptor - ref name = " defaultComponentStack " />
</ action >

 

2.Action配置

  action mappings是框架中的基本工作单元,框架通过对请求的request路径进行映射来决定由哪个action来处理请求。action mappings能指定一系列的result、异常处理器以及拦截器。action元素的所有属性中只有name属性是必须的,其它属性都是可选的。关于 如何从请求路径映射到action在namespace那节中已经说过了,这里就不说了。尽管对于action的命名很灵活,但是action的名字中最 好不要出现斜线(/)、点号(.)、破折号(/),以免出现一些不可预知的错误。

  在Action接口中定义了action默认的方法入口,它就是execute方法。但是并不是每个action类都必须实现这个接口,如果 action类没有实现这个接口的话,框架将使用反射来寻找一个execute方法。有时候我们的action中可能会包括多个方法入口,并且不同的情况 下方法入口不同,例如执行修改操作时我们想进入action的mofify方法,执行增加操作时进入action的add方法,这个时候怎么办呢?我们可 以通过指定action元素的method属性来实现,如下所示:

<action name="modify" class="example.CrudAction" method="modify">

  如果在action类中没有execute方法,也没有在配置文件中指定其它的方法,框架会抛出异常。

  很多时候,多个action mapping会共享一个相同的模式,这个时候我们可以使用通配符方法。还是举例来说,如下所示。

<action name=”editCrud” class=”example.CrudAction” method=”edit”/>

<action name=”deleteCrud” class=” example.CrudAction” method=” delete”/>

  上述两个action mapping调用的是同一个action类,只是执行的方法不同而已,并且所执行的方法名都是action mapping名字的开头部分,而且action mapping的名字除去方法名之后剩下的部分是一样的。这种情况下我们可以使用一个action mapping来代替上面两个action mapping:

<action name=”*Crud” class=”example.CrudAction” method=”{1}”>

  匹配过程是这样的 (以请求的action mapping的名字是editCrud为例) :

  ● *可以表示任何内容,因此任何以Crud结尾的action mapping都会匹配上

  ● 当editCrud匹配上后,*的内容此时就是edit

  ● 调用名字为第一个*号的内容的方法,此时仅有一个*号,并且此时它的内容为edit,因此action类的edit方法被调用了

  ● 同理,如果请求的action是deleteCrud,匹配成功后*的内容就是delete,调用的方法就是delete了。

  使用通配符匹配方法可以让我们减少配置文件的内容,是配置更加简洁。

  如果我们没有给action元素指定class属性的话,框架会默认它的class属性为 com.opensymphony.xwork.ActionSupport,如果想指定别的类作为默认的Action类,可以通过package的 default-action-ref属性来设置。在设置了default-action-ref之后,如果我们在package中没有匹配到所请求的 action,那么这个默认的action就会被调用。一般一个命名空间下最好只定义一个默认的action。

  3.Result元素配置

  action类处理完一个请求后会返回一个字符串,这个字符串将被用来选择一个result元素。通常一个action mapping会有多个result,代表各个可能不同的结果。ActionSupport中定义了几个标准的result token,如下所示:

String SUCCESS = "success";
String NONE = "none";
String ERROR = "error";
String INPUT = "input";
String LOGIN = "login";

  通常我们都会自定义一些result token类匹配特定的情况。

  result元素负责完成两个工作:1.提供一个逻辑名用于与action类的返回字符串进行匹配;2.提供一个返回类型(Result Type)。尽管大多数的result只是简单的转向一个页面或模板,但是我们还可以利用其它的返回类型(Result Type)做其它的一些事情。我们可以为每个包设置默认的返回类型(Result Type),如果一个包继承了另外一个包,它可以选择设置自己的默认返回类型或者直接使用父包的。设置默认返回类型的方式如下:

<result-types>
<result-type name="dispatcher" default="true"
class="org.apache.struts2.dispatcher.ServletDispatcherResult"/>
</result-types>
Result元素有两个属性:name和type,它们都是可选的,name属性的默认值是“success”,type的属性为我们所设置的默认返回类型,如上例中即为dispatcher。

  定义在action元素里面的result我们可以称之为局部result,除此之外我们可以还可以全局的result,这些result会被多个 action所共享。框架会首先寻找嵌套在action元素中的result,如果没有匹配的就去全局result中去寻找。一个全局result的例子 如下:

<global-results>
<result name="error">/Error.jsp</result>
<result name="invalid.token">/Error.jsp</result>
<result name="login" type="redirect-action">Logon!input</result>
</global-results>

  有时候我们的result在运行前可能是未知的。比方说,一个result它所跳转的页面取决于它所在action类的运行结果或者客户端的输入等 等,这时候我们可以使用动态的result,也就是说result的值可以使用表达式语言(EL)来表示,这个表达式的值是动态的,取决于action的 运行时状况,下面是一个例子:

private String nextAction;
public String getNextAction() {
return nextAction;
}
……………………………………………………………………………………
<action name="fragment" class="FragmentAction">
<result name="next" type="redirect-action">${nextAction}</result>
</action>

  在上例中result的值将是它所在action的nextAction的属性值,nextAction属性的值不同,当action的方法返回”next”时所跳向的url也不同。

 

 

 

 

分享到:
评论

相关推荐

    struts2一个action处理多个请求 struts2实例

    在Struts2框架中,Action类是业务逻辑处理的核心组件,它负责接收并处理来自用户的请求。本实例探讨了如何让一个Action类处理多个请求,这在开发中常见于需要集中处理相似请求的情况,可以提高代码复用性和结构的...

    struts2核心配置文件

    在Struts2框架中,有两个核心配置文件特别重要:`struts.xml` 和 `struts.properties`。这两个文件共同决定了Struts2框架的行为特征和应用的运行逻辑。 #### 二、struts.xml 文件详解 `struts.xml` 文件是Struts2的...

    ·Struts2配置文件介绍 超级详细

    - **Interceptor**:在`package`元素内部,可以定义拦截器或引用拦截器堆栈,拦截器是Struts2中非常重要的组件,用于在Action执行前后进行一系列的前置和后置处理操作,比如登录验证、数据校验等。 - **Result ...

    struts2配置过滤器

    通过以上分析可以看出,在Struts2项目中配置过滤器是一种非常实用的方法,可以有效地实现对用户请求的预处理工作。需要注意的是,在实际应用中还应考虑更多细节问题,比如如何处理不同环境下的配置差异、如何更灵活...

    struts2配置文件

    Struts2是一个流行的Java ...总的来说,配置Struts2框架涉及导入必要的库文件,设置`web.xml`中的过滤器,以及编写`struts2.xml`来定义应用的行为和动作映射。理解这些配置对于有效地开发和维护Struts2应用至关重要。

    struts2的属性配置

    在Struts2中,Action类扮演了控制器的角色,它接收请求,执行相关逻辑,并返回一个表示结果的字符串,这个字符串被用来决定显示哪个视图。 **Struts2框架的执行流程**: 1. 用户发送HTTP请求到服务器。 2. `web.xml...

    Struts2的配置文件的详细说明

    在Struts2中,`package`元素是核心组件,用于组织Action、拦截器等。一个包可以看作是一个模块,其中包含多个Action和拦截器。`package`元素具有以下重要的属性: 1. **name**:这是必填属性,用于为包设置唯一的...

    struts2配置文件传值中文乱码

    在Tomcat的`server.xml`文件中,修改`Connector`元素的`URIEncoding`属性,确保其值与Struts2设置的编码一致。 ```xml connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/&gt; ``` 同时,还...

    Struts2的配置文件DTD解析

    配置文件在Struts2中起着至关重要的作用,因为它定义了框架的行为和组件之间的交互方式。本文将深入探讨Struts2配置文件的DTD(文档类型定义),以及如何使用这些配置元素。 首先,Struts2的配置文件基于DTD来解析...

    struts2基本配置

    - **Action配置**:Action是Struts2中处理用户请求的核心组件,通常对应于Java类中的一个具体方法。配置示例: ```xml &lt;package name="default" namespace="/" extends="struts-default"&gt; ...

    徒手配置Struts2

    ### 徒手配置Struts2的关键知识点 #### 一、徒手配置Struts2环境时需注意的关键事项 ...此外,通过深入理解配置文件的每一个元素,可以帮助开发者更好地掌握Struts2的工作原理,从而提高应用程序的开发效率和质量。

    Struts2中访问web元素的例子

    本篇文章将详细介绍Struts2中四种访问web元素的方法。 1. **Action上下文(ActionContext)** ActionContext是Struts2的核心组件之一,它封装了请求、响应以及session等信息。我们可以通过ActionContext获取到...

    struts2配置文件详细说明

    配置文件在Struts2中起着至关重要的作用,它定义了框架的行为、动作映射、拦截器和其他关键设置。以下是Struts2配置文件的一些核心元素和属性的详细说明: 1. **配置文件结构**: Struts2的配置通常存储在一个名为...

    Struts-_1.2.x_请求处理流程图

    2. **配置解析**: ActionServlet首先会解析`struts-config.xml`配置文件,这个文件定义了应用中的各个Action、ActionForm、Forward等元素,以及它们之间的映射关系。 3. **请求映射**: 接着,ActionServlet根据请求...

    struts2之配置实用案例struts001

    5. **过滤器配置**:在Web应用的`web.xml`文件中,你需要配置Struts2的Filter,使得框架能拦截和处理请求: ```xml &lt;filter-name&gt;struts2 &lt;filter-class&gt;org.apache.struts2.dispatcher.filter....

    一个简单的struts2的手动配置

    为了使Struts2能够处理HTTP请求,我们需要在web.xml中配置过滤器。Struts2的过滤器名为`org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter`,我们需要设置其初始化参数和映射路径: ```xml ...

    struts2配置文件以及代码示例

    在Struts2中,配置文件扮演着至关重要的角色,它定义了应用的行为、组件之间的交互逻辑以及各种资源的映射关系。 #### 二、Struts2配置文件详解 **配置文件格式:** Struts2配置文件通常以`struts.xml`命名,采用...

Global site tag (gtag.js) - Google Analytics