`
一日一博
  • 浏览: 229997 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Struts2配置精要之Result Types(Struts2.3.4)

阅读更多
struts2.3.4的Predefined Result Types,比struts2.2.3要多出一种:
Chain                 Used for Action Chaining
Dispatcher         Used for web resource integration, including JSP integration
FreeMarker         Used for FreeMarker integration
HttpHeader         Used to control special HTTP behaviors
Redirect         Used to redirect to another URL (web resource)
RedirectAction         Used to redirect to another action mapping
Stream                  Used to stream an InputStream back to the browser(usually for file downloads)
Velocity         Used for Velocity integration
XSL                 Used for XML/XSLT integration
PlainText         Used to display the raw content of a particular page(i.e jsp, HTML)
Tiles                 Used to provide Tiles integration

文档中对这些Result Types是这样定义的:
1.chain
这个结果调用其他action,完成它自己定义的拦截器堆栈和结果。只能请求action,如果请求视图资源会报错。需要注意的就是与redirect的区别,请求转发是还在当前请求,而redirect会响应一次浏览器然后浏览器再根据响应请求重定向的资源,注意看url的变化就明白了!
<package name="public" extends="struts-default">
    <!-- Chain creatAccount to login, using the default parameter -->
    <action name="createAccount" class="...">
        <result type="chain">login</result>
    </action>

    <action name="login" class="...">
        <!-- Chain to another namespace -->
        <result type="chain">
            <param name="actionName">dashboard</param>
            <param name="namespace">/secure</param>
        </result>
    </action>
</package>

<package name="secure" extends="struts-default" namespace="/secure">
    <action name="dashboard" class="...">
        <result>dashboard.jsp</result>
    </action>
</package>


2.redirectAction
重定向至Action,完成与它自己的拦截器堆栈和结果。相对于redirect来说,redirectAction只能请求action,如果请求视图资源会报错,然后还有个小区别就是redirectAction会为url添加.action后缀而redirect不会,但是两者都可以通过url传参
<package name="passingRequestParameters" extends="struts-default" namespace="/passingRequestParameters">
   <!-- Pass parameters (reportType, width and height) -->
   <!--
   The redirectAction url generated will be :
   /genReport/generateReport.action?reportType=pie&width=100&height=100#summary
   -->
   <action name="gatherReportInfo" class="...">
      <result name="showReportResult" type="redirectAction">
         <param name="actionName">generateReport</param>
         <param name="namespace">/genReport</param>
         <param name="reportType">pie</param>
         <param name="width">100</param>
         <param name="height">100</param>
         <param name="empty"></param>
         <param name="suppressEmptyParameters">true</param>
         <param name="anchor">summary</param>
      </result>
   </action>
</package>


3.redirect
让客户端请求另外的网络资源,可以为action,也可以为视图资源。
文档上是这么解释的:
调用{ @link HttpServletResponse # sendRedirect(String)sendRedirect }方法到指定的地址。 响应是告诉重定向浏览器到指定的地址(一个新的请求从客户端)。这样做的结果意味着action(action instance, action errors, field errors等)只是执行失败,不再可用。这是因为action是一个单线程模式(single-thread model)。唯一的传参方法是通过会话或用OGNL表达式,url参数(url ?名称=值)。
<package name="passingRequestParameters" extends="struts-default" namespace="/passingRequestParameters">
   <-- Pass parameters (reportType, width and height) -->
   <!--
   The redirect-action url generated will be :
   /genReport/generateReport.jsp?reportType=pie&width=100&height=100#summary
   -->
   <action name="gatherReportInfo" class="...">
      <result name="showReportResult" type="redirect">
         <param name="location">generateReport.jsp</param>
         <param name="namespace">/genReport</param>
         <param name="reportType">pie</param>
         <param name="width">100</param>
         <param name="height">100</param>
         <param name="anchor">summary</param>
      </result>
   </action>
</package>


4.dispatcher(缺省值,如果没有配置类型默认就是dispatcher)
包括或转发到一个视图(通常是一个jsp)。在后台Struts2将使用一个RequestDispatcher,目标servlet/JSP接收相同的request/response对象作为原始的servlet或JSP。 因此,可以使用request.setAttribute()传递数据- - - Struts的action是可用的。如果请求action会找不到资源。
<result name="success" type="dispatcher">
  <param name="location">foo.jsp</param>
</result>


5.httpheader
可以通过设置HTTP headers和status的值来发送错误信息给客户端。
他的参数有这些:
status - the http servlet response status code that should be set on a response.
parse - true by default. If set to false, the headers param will not be parsed for Ognl expressions.
headers - header values.
error - the http servlet response error code that should be set on a response.
errorMessage - error message to be set on response if 'error' is set.
<result name="success" type="httpheader">
  <param name="status">204</param>
  <param name="headers.a">a custom header value</param>
  <param name="headers.b">another custom header value</param>
</result>

<result name="proxyRequired" type="httpheader">
  <param name="error">305</param>
  <param name="errorMessage">this action must be accessed through a prozy</param>
</result>


6.stream
这个返回类型主要用作下载文件或者在浏览器上显示PDF等文档
他的参数有这些:
contentType - the stream mime-type as sent to the web browser (default = text/plain).
contentLength - the stream length in bytes (the browser displays a progress bar).
contentDisposition - the content disposition header value for specifing the file name (default = inline, values are typically attachment;filename="document.pdf".
inputName - the name of the InputStream property from the chained action (default = inputStream).
bufferSize - the size of the buffer to copy from input to output (default = 1024).
allowCaching if set to 'false' it will set the headers 'Pragma' and 'Cache-Control' to 'no-cahce', and prevent client from caching the content. (default = true)
contentCharSet if set to a string, ';charset=value' will be added to the content-type header, where value is the string set. If set to an expression, the result of evaluating the expression will be used. If not set, then no charset will be set on the header
<result name="success" type="stream">
  <param name="contentType">image/jpeg</param>
  <param name="inputName">imageStream</param>
  <param name="contentDisposition">attachment;filename="document.pdf"</param>
  <param name="bufferSize">1024</param>
</result>

此处给一个显示PDF文档示例:
web.xml:
<mime-mapping>    
     <extension>pdf</extension>    
     <mime-type>application/pdf</mime-type>    
</mime-mapping>    

struts.xml:
<action name="test" class="com.iss.action.TestAction">  
    <result name="success" type="stream">  
       <param name="contentType">application/pdf</param>  
       <param name="inputName">inputStream</param>  
       <param name="contentDisposition">filename="a.pdf"</param>  
    </result>  
</action> 


7.plainText
响应以plain形式返回给客户端,相当于response.setContentType("text/plain; charset="+charSet);
<action name="displayJspRawContent" >
  <result type="plainText">/myJspFile.jsp</result>
</action>

<action name="displayJspRawContent" >
  <result type="plainText">
     <param name="location">/myJspFile.jsp</param>
     <param name="charSet">UTF-8</param>
  </result>
</action>



8.velocity
使用Servlet容器的JspFactory,这个结果模拟一个JSP执行环境,然后显示一个Velocity模板,将直接传输到Servlet输出。
<result name="success" type="velocity">
  <param name="location">foo.vm</param>
</result>



9.freemarker
呈现一个视图使用Freemarker模板引擎。。
<result name="success" type="freemarker">foo.ftl</result>


10.xslt
调用一个xslt文件并解析执行。
<result name="success" type="xslt">
  <param name="location">foo.xslt</param>
  <param name="matchingPattern">^/result/[^/*]$</param>
  <param name="excludingPattern">.*(hugeCollection).*</param>
</result>


11.tiles
Tiles是一个模板框架被设计来轻松地允许创建web应用程序的页面具有一致的外观和感觉。它可以用于页面和组件化装饰。
特性:支持在Freemarker,JSP,Velocity使用Tiles
.....
<result-types>
  <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/>
</result-types>
.....
<action name="sample" class="org.apache.struts2.tiles.example.SampleAction" >
  <result name="success" type="tiles">tilesWorks</result>
</action>


<listener>
  <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
</listener>


<dependency>
  <groupId>org.apache.struts</groupId>
  <artifactId>struts2-tiles-plugin</artifactId>
  <version>${version.tiles}</version>
  <scope>compile</scope>
</dependency>


<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib prefix="s" uri="/struts-tags" %>

<%-- Show usage; Used in Header --%>
<tiles:importAttribute name="title" scope="request"/>
<html>
    <head><title><tiles:getAsString name="title"/></title></head>
<body>
    <tiles:insertAttribute name="header"/>

    <p id="body">
        <tiles:insertAttribute name="body"/>
    </p>

    <p>Notice that this is a layout made in JSP</p>
</body>
</html>
分享到:
评论

相关推荐

    struts2.3.4源代码

    6. **Interceptor**: 拦截器是Struts2的核心特性之一,允许在Action执行前后插入自定义逻辑,如日志记录、权限验证等。 7. **ValueStack**: 用于存储Action的属性和OGNL表达式,便于在视图层和控制器之间传递数据。...

    Struts2.3.4 API帮助文档chm格式

    5. **配置(Configuration)**:Struts2的配置分为XML配置和注解配置,包括struts.xml、package、action、result等元素,以及@Action、@Results等注解。这些配置定义了请求的映射、Action的属性和结果的处理。 6. *...

    Struts 2.3.4.zip

    2. **配置文件**:Struts 2的配置主要分为两个部分,分别是struts.xml和web.xml。struts.xml用于配置Action、结果类型、拦截器等,而web.xml则用于部署描述符,配置过滤器以启动Struts 2框架。 3. **拦截器...

    Struts2配置精要之常量constant配置详解(包括零配置Convention 的常量)

    本文将深入探讨Struts2中的常量配置,包括基本的XML配置以及零配置的Convention模式下的常量设定。 首先,让我们了解Struts2框架中的常量配置。这些常量定义在`struts-default.xml`和`struts-plugin.xml`等配置文件...

    struts2 result配置详解

    Struts2 Result 配置详解 Struts2 框架中 Result 配置是一种非常重要的配置,它直接影响着应用程序的执行结果。Result 配置通常用于定义 Action 的执行结果,例如将结果.redirect 到一个新的 URL,或者将结果....

    struts2.3.4核心JAR包

    3. **配置管理**:Struts2使用XML或者注解进行配置,定义Action、结果类型、拦截器栈等,使得应用的结构清晰明了。 4. **结果类型(Result Types)**:预定义的结果类型,如dispatcher(用于转发到JSP页面)、...

    Struts2.3.4-all

    Struts2.3.4-all 是一个集合了Struts2框架所有组件的压缩包,它包含Struts2框架的核心库、插件以及其他相关的资源文件。Struts2是一个基于MVC(Model-View-Controller)设计模式的开源Java Web框架,用于简化Java EE...

    Struts2.3.4API中文版

    Struts2.3.4 API中文版是针对Java Web开发框架Struts2的3.4版本的官方API文档的中文翻译版本。这个框架是Apache软件基金会下的一个项目,旨在提供一个用于构建MVC(Model-View-Controller)架构的、灵活的、可扩展的...

    struts2 2.3.4最新版本

    2.3.4是Struts2的一个版本,该版本可能包含了对之前版本的一些改进、修复了已知的漏洞,并且提供了更稳定的功能。 在描述中提到的"struts2 2.3.4源文件最新版本",意味着这个压缩包包含了Struts2框架的源代码,这...

    Struts2配置精要之struts.xml( global和default的配置)

    在Struts2中,`struts.xml`是核心配置文件,它定义了应用的架构,包括动作映射、结果类型、拦截器和全局配置等。这篇博客主要探讨的是`struts.xml`中的`global`和`default`配置。 1. **全局配置(Global ...

    struts-2.3.4笔记

    9. **测试支持**:Struts 2 集成了测试工具,如 Struts2 TestNG 插件,便于进行单元测试和集成测试。 10. **安全考虑**:虽然Struts 2 提供了许多强大的功能,但也需要注意安全问题,例如 Struts 2 过去曾曝出过...

    struts-2.3.4.rar(里面有整理的常用jar包)

    4. **使用方法**:将这些jar包导入到项目的类路径中,然后根据Struts2的配置文件(通常为struts.xml)来设置Action、Result和Interceptor。Action是处理用户请求的业务逻辑,Result定义了请求处理后的结果页面或动作...

    Struts2(2.3.4)jar包.pdf

    4. **结果类型(Result Types)**:Struts2支持多种结果类型,如dispatcher(重定向或转发到JSP页面)、stream(用于文件下载)和freemarker(用于FreeMarker模板引擎)等。 5. **模型-视图-控制器(MVC)**:...

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

    ### Struts2配置文件介绍 #### 一、Struts2的核心配置文件 在Struts2框架中,有多个重要的配置文件用于控制应用的行为与结构,其中最核心的是`struts.xml`文件。此外还包括`web.xml`、`struts.properties`、`...

    struts-2.3.4-all.zip

    这个"struts-2.3.4-all.zip"压缩包包含了Struts2框架的2.3.4版本的完整资源,包括源码、示例以及所需的库文件。下面我们将深入探讨Struts2框架及其在2.3.4版本中的关键知识点。 1. **Struts2框架基础**: Struts2...

    Struts2配置详解

    ### Struts2配置详解 #### 一、总览 在深入了解Struts2的配置细节之前,我们先来简要概述一下Struts2框架的核心特点及其配置文件的基本结构。Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web...

    struts2-spring-plugin-2.3.4.jar

    Struts2-Spring-Plugin-2.3.4.jar 是一个专门为 Struts 2 框架和 Spring 框架整合而设计的插件,主要用于处理 Struts 2 和 Spring 之间的集成问题。在Java Web开发中,这两个框架经常一起使用,Spring 提供了依赖...

    struts-2.3.4-src.zip

    Struts2的2.3.4版本是其历史上的一个重要里程碑,包含了众多的改进和修复,为开发者提供了稳定和高效的工作环境。 首先,让我们深入理解Struts2的核心概念。Struts2框架的核心组件包括Action、Result、Interceptor...

    struts2配置文件

    本文将深入探讨Struts2配置文件的核心概念及其在实际开发中的应用。 **一、Struts2配置文件概述** 在Struts2中,配置文件主要分为两个部分:`struts-default.xml`和用户自定义的配置文件,如`struts.xml`或`struts-...

Global site tag (gtag.js) - Google Analytics