- 浏览: 238111 次
- 性别:
- 来自: 常州
文章分类
- 全部博客 (165)
- Java基础 (49)
- 开发工具 (3)
- Python基础 (1)
- Oracle基础 (9)
- Java 符号计算 (0)
- 计算机基本原理 (10)
- SQL (6)
- javascript (16)
- HTML (2)
- XML (4)
- 程序员之路 (7)
- JDBC (1)
- Unicode (0)
- 字符编码 (3)
- JSP基础 (2)
- Servlet&JSP (9)
- MySQL基础 (1)
- UML基础 (1)
- Hibernate (2)
- Java包 (1)
- Spring (1)
- Struts2 (9)
- 系统命令 (1)
- Tomcat (1)
- Windows (1)
- Android (1)
- C#基础 (14)
- HTML5 (1)
- .NET基础 (1)
- 数据库基础 (2)
- ASP.NET基础 (7)
- 开源Java (3)
- 趣味算法 (1)
- 面向对象思想 (1)
- 软件应用 (1)
- Web工程 (1)
- jquery (2)
- JPA (0)
- 设计模式 (0)
最新评论
-
静夜独窗:
JavaBean组件能说的具体一点吗,我感觉这样说理解的不清晰 ...
EL 表达式语言 -
静夜独窗:
在Java中,不同字符集编码的转换是通过Unicode作为中介 ...
JavaWeb中的乱码产生与解决方案
一. Result配置概述
result代表了一个可能的输出。当Action类的方法执行完时,它返回一个字符串类型的结果码,框架根据这个结果码选择对应的result,向用户输出。
在com.opensymphony.xwork2.Action接口中定义了一组标准的结果代码,可供开发人员使用,如下所示:
public interface Action { public static final String SUCCESS = “success”; public static final String NONE = “none”; public static final String ERROR = “error”; public static final String INPUT = “input”; public static final String LOGIN = “login”; }
除了这些预定义的结果码,开发人员也可以定义其它的结果码来满足自身应用程序的需要。
二. Result基本配置
Result配置由两部分组成:一部分是result映射,另一部分是result类型。
在struts.xml文件中,action元素的子元素result元素用来配置result映射。result元素有两个可选的属性:如下:
属性 |
是否必须 |
说明 |
name |
否 |
指定result的逻辑名 |
type |
否 |
指定result的类型,不同类型的result代表了不同的结果输出。 |
1. Result映射
在result元素中含有<param>子元素,可以用来指定结果对应的实际资源的位置。param元素有一个必需的属性name,用于指定参数名,param元素的内容给出参数值。如果要指定资源的位置,name属性的值需要设置为location。
<param>子元素的name属性有如下两个值:
location :指定该逻辑视图对应的实际视图资源。
parse :指定在视图资源名称中是否可以使用OGNL表达式。默认值为true,表示可以使用,如果值为false,表示不支持OGNL表达式。
charSet:指定使用特定的编码集来处理页面。
使用<result>元素配置结果映射的标准配置形式如下:
<action name="addBook" class="action.AddBook"> <result name="success" type="dispatcher"> <param name="location">/allBooks.jsp</param> </result> </action>
在result映射文件配置中,在指定实际资源位置时,可以使用绝对路径,也可以使用相对路径。绝对路径以斜杠(/)开头,相对于当前的Web应用程序的上下文路径。相对路径不以斜杠开头,相对于当前执行的Action路径。
(2)局部Result 与 全局Result
<result>元素可以配置在<action>元素中,也可以配置在<action>元素外,根据这两种配置,可以将Result的配置分为两种:局部result和全局result。
局部result
将<result…/>作为<action…/>元素的子元素配置。作用范围是单个Action。一个<action…/>可以由多个<result…/>元素,即一个Action可以有多个Result。
全局result
将<result…/>作为<global-results/>元素的子元素配置。作用范围是整个包。
<package name="default" extends="struts-default"> <global-results> <result name="error">/error.jsp</result> </global-results> <action name="addBook" class="action.AddBook"> <result>/addSuccess.jsp</result> </action> </package>
说明:
配置一个全局result,名称为error。如果default包下的任何Action返回字符串ERROR,那么都可以调用该result,页面将会返回error.jsp
注意:
当一个Action的局部result与全局result重名时,那么对于该Action的返回视图来说,局部result会覆盖全局result。
2. Result类型
(1)Struts2支持的处理结果类型
Struts2默认了一系列的结果类型,在struts-default.xml配置文件中的<result-types>元素中定义。<result-types>元素定义了一个结果类型, name属性指定结果类型的名字。class属性指定了该结果类型的实现类。
在框架调用Action对请求进行处理之后,就要向用户呈现一个结果视图。Struts2支持多种类型的视图,这些视图是由不同的结果类型来管理的。一个结果类型就是实现了com.opensymphony.xwork2.Result接口的类。
在struts2中,预定义了多种结果类型。归纳起来,struts2共14种返回结果类型:
结果类型 |
说明 |
chain |
Action链式处理结果类型. |
chart |
用于整合JFreeChart的结果类型. |
dispatcher |
用于JSP整合的结果类型. |
freemarker |
用于FreeMarker整合的结果类型. |
httpheader |
用于控制特殊的HTTP行为的结果类型. |
jasper |
用于JasperReports整合的结果类型. |
jsf |
用于JSF整合的结果类型. |
redirect |
用于直接跳转到其他URL的结果类型. |
redirectAction |
用于直接跳转到其他Action的结果类型. |
stream |
用于向浏览器返回一个InputStream(一般用于文件下载). |
tiles |
用于Tiles整合的结果类型. |
velocity |
用于Velocity整合的结果类型. |
xslt |
用于XML/XSLT整合的结果类型. |
plaintext |
用于显示某个页面的源代码的结果类型. |
(2)默认Result类型
在struts2中允许定义一个默认的Result类型,这是通过result-type元素来定义的。在框架的默认配置文件struts-default.xml中,在struts-default包中有如下的一个配置:
<result-types> <result-type name="dispatcher" class="org.apache.struts2.dispatche.ServletDispatcherResult" default="true" > </result-type> </result-types>
result-type元素的default属性指定名为dispatcher的结果类型为默认的结果类型。dispatcher结果类型使用Servlet API中的RequestDispatcher将请求导向到目标资源,通常是JSP页面。如果你在使用result元素配置result映射时,没有使用type属性,那么框架将使用默认的dispatcher类型。
由于struts2中的包是可继承的,在上面的实例中定义的default包继承自struts-default包,因此也继承了默认的结果类型定义(当然,也可以在“子”包中定义自己的默认结果类型)。既然有了默认的结果类型,而所需要使用的也正是这种结果类型,那么就可以省略result元素的type属性。
在result的配置中,当结果类型为dispatcher时,如果你使用param子元素为该类型的result设置location参数(这是最常用的参数),那么param子元素也是可以省略的。此外如果你没有指定result元素的name属性,那么框架将把它命名为“success”.使用框架提供的这些默认设置,简化配置:
location参数是默认的参数,在所有的Result实现类中,都定义了一个字符串类型的DEFAULT_PARAM静态常量,专门用于指定默认的参数名。 DEFAULT_PARAM常量的定义:public static final String DEFAULT_PARAM=“location”;
<package name="default" extends="struts-default"> <action name="login" class="com.ibm.LoginAction"> <!-- 省略name属性,框架将其命名为“success”, 配置名为success的结果映射,结果类型为dispatcher --> <result>/success.jsp</result> <!-- 省略param子元素,直接在result元素的内容中给出实际资源的位置--> <result name="error">/error.jsp</result> </action> </package>
简化的<result…/>配置:
<action name=”xxx” class=”xxx”> <result name=”xxxxxx” type=”xxxxxx”>/xxx.jsp</result> </action>
注意:
如果没有指定location参数,系统会把<result>…</result>中间的字符串当成实际视图资源;
如果没有指定<result…/>的name属性, 则默认name=”success”.
如果没有指定<result…/>的type属性,则默认type=”dispatcher”.
(3)常见Result类型的说明
1. dispatcher结果类型(常用)
Struts2的默认结果类型。dispatcher结果类型是将请求转发到指定的资源。即Servlet的Forword方法转发方式。
使用dispatcher结果类型时,由于只是将结果类型转发到指定资源。所以能够保留请求信息。
所以dispatcher在可以显示请求action或jsp。(注意:jsp页面也是一直处理程序,jsp的本质是Servlet。)
由于本质上是通过Forword访问资源,所以Request对象没有发生改变。同一个Request共享一个值栈。被请求资源可以通过OGNL表达式取得请求资源的值栈。
2. redirect结果类型(常用)
redirect结果类型用来Redirect(重定向)到指定的视图资源。系统将调用HttpServletResponse的sendRedirect(String)方法重定向指定视图资源。
重定向的效果就是重新产生一个请求。即重定向会丢失所有请求参数、请求属性、Action的返回结果。
Redirect结果类型在后台使用HttpServletResponse的sendRedirect方法将请求重定向到指定的URL,它的实现类是org.apache.struts2.dispatcher.ServletRedirectResult。
在使用redirect结果类型的场景中,用户要完成一次与服务器之间的交互,浏览器需要完成两次请求,如下图:
由于在一次用户交互过程中存在着两次请求,因此第一次请求中的数据在第二次请求中是不可用的,这意味在目标资源中是不能访问action实例、action错误以及错误等。
如果有某些数据需要在目标资源中访问,
一种方式是将数据保存到Session中,
另一种方式是通过请求参数来传递数据。
3. redirectAction结果类型
redirectAction结果类型直接将请求重定向(重新生成一个全新的请求)到另一个Action。
与redirect结果类型相似,所有请求参数,请求属性,Action的返回结果将会丢失。
与redirect结果类型不同的是,redirectAction使用ActionMapperFactory类的ActionMapper实现重定向。
配置redirectAction结果类型时,<param.../>可以指定两个参数:
actionName :该参数指定重定向的Action名。必选参数。
namespace :该参数指定需要重定向的Action所在的命名空间。可选参数。
redirectAction结果类型可以简化带有命名空间的Action的访问。
redirectAction结果类型的实现类是org.apache.struts2.dispatcher.ServletActionRedirectResult,该类是ServletDispatcherResult的子类,因此我们也就可以判断出redirectAction结果类型和redirect结果类型的后台工作原理是一样的,即都是利用HttpServletResponse的sendRedirect方法将请求重定向到指定的URL。
那么redirect与redirectAction有什么区别呢?
从结果类型的名字上,我们可以大致判断出redirectAction结果类型主要是用于重定向到action。也就是说,在请求处理完成后,如果你需要重定向到另一个action,那么建议你使用redirectAction结果类型。
使用redirectAction结果类型可以简化对那些带有名称空间的action URL的设置,ServletActionRedirectResult类在内部使用ActionMapper来构建访问action的URL,这样你就不需要在struts.xml配置文件中手动去编码访问action的URL了。
例:在struts.xml文件中使用redirectAction结果类型
<package name="default" extends="struts-default"> <action name="test" class="action.Test"> <result type="redirectAction"> <param name="actionName">test2.action</param> <param name="namespace">/temp</param> </result> </action> </package> <package name="secure" extends="struts-default" name="/temp"> <action name="test2" class="action.Test"> <result name="success">/testSuccessful.jsp</result> </action> </package>
如果两个Action在同一个命名空间,可以省略namespace参数。
4. chain结果类型
Struts2框架支持配置多个Action组成一条Action链或者工作流,Action链通过拦截器ChainingInterceptor完成的。
ChainingInterceptor在源Action执行完毕后,将源Action的用户请求参数、值栈、session的数据赋值给目的Action,就是说,在执行多个Action过程中,参数都是保留的。前一个动作的状态在后一个动作里仍然保持。
例:动作test1,test2,test3组成动作链。
<package name="myPackage1" extends="struts-default"> <action name="test1" class="action.Test1"> <result type="chain">test2</result> </action> <action name="test2" class="action.Test2"> <result type="chain"> <param name="success">/testSuccessful.jsp</param> <param name="namespace">/namespace2</param> </result> </action> </package> <package name="myPackage2" extends="struts-default" name="/namespace2"> <action name="test3" class="action.Test3"> <result type="chain">test3</result> </action> </package>
4. stream结果类型
Stream类型的result一般是指将原始数据直接传递给HttpServletResponse,该类型常用在文件下载。
配置stream类型的result,一般可以指定下面几个参数:
contentType:指定传递给浏览器的stream类型,默认类型为text/plain.
contentlength:数据流的字节长度(用于浏览器显示进度条)
contentDispostion:指定文件的内容规格,默认值为inline.
inputName:数据流的属性,默认值为inputstream
bufferSize:缓冲区容量,默认为1024.
示例:
<result name="success" type="stream"> <param name="contentType">image/jpeg</param> <param name="inputName">imageStream</param> <param name="contentDisposition">filename="document.pdf"</param> <param name="bufferSize">1024</param> </result>
5. httpheader结果类型
用来把一个HTTP状态发送到浏览器。
使用httpheader结果类型时,代码如下:
<default-action-ref name="test1" /> <action name="test3" class="action.Test3"> <result type="httpheader"> <param name="status">404</param> </result> </action>
<default-action-ref />元素用来定义默认的动作,如果某个URL没有与之匹配的动作,这个默认地址将被调用。
上述代码定义了一个名为test1的默认地址,使用httpheader结果类型把一个404状态发给浏览器。如果没有匹配的动作,用户将收到一个404状态报告。
6. plainText
plainText结果类型可能不是很常用,但是它是一个非常有趣的结果类型,因为它可以用于输出JSP或HTML的源代码。想一想,你制作一个在线实例教程,用户看完页面效果后,想看看你的页面如何编写的,点击你提供的“查看源代码链接” ,整个页面的源代码就以页面的形式在浏览器中显示出来,这个功能是不是很贴心呢!
通常情况下,要想在浏览器中显示一个JSP或页面的代码,你必须对其中的标记使用实体引用或字符引用的方式来做置换,这样才能在浏览器中显示页面代码。不过如果这样做,一方面工作量太大,另一方面你的源文件也被破坏了。所以我们通常是编写一个转换程序,在页面输出时,由程序读取页面的内容,将其中的特殊字符转换成对应的字符引用,然后再输出到浏览器中。
在struts2中你不需要这样去编写这样的程序了,直接使用plainText结果类型就可以实现输出页面源代码的功能。
plainText结果类型有两个参数,如下所示:
Location:指定要输出原始内容的页面(JSP或HTML)。该参数是默认的。
charSet:指定输出页面内容时使用的字符编码。这个字符编码将被用作设置响应类型(例如:Content-Type=text/plain;charset=GBK),以及使用Reader对象读取文件时的编码。
<action name=“displayJspRawContent”> <result type=“plaintext”> <param name=“location” >/myJspFile</param> <param name=“charSet” >GBK</param> </result> </action>
如果你在myJspFile.jsp中使用了中文,那么需要设置charSet参数为GBK或者GB2312,否则在浏览器中显示时会出现乱码。
动态Result
1. 通配符配置Result
<action name="*Crud" class=“com.xxx.Crud" method="{1}">
<result name="success">/{1}.jsp</result>
</action>
2. 使用OGNL动态Result
<result>元素值使用OGNL表达式实现。
例如:
<action name="ognlTest" class="action.OGNLTest">
<result name="success ">/${personName}.jsp</result>
</action>
这里表达式的参数为personName
发表评论
-
Struts2的Ajax应用
2013-04-21 17:37 907一、基本原理 使用拦截器机制,对Action的成员变量做 ... -
文件的上传与下载
2012-08-28 22:56 1299一. 文件上传的原理 表单元素的enctype属性 enc ... -
Struts2标签
2012-08-26 01:40 1206一. Struts2标签概述 Struts2把所有的标签都定 ... -
Struts2异常处理
2012-08-25 23:48 1755传统异常处理方式 Java中的所有异常的根类是Thro ... -
注解配置Struts2 Action
2012-08-25 23:47 2838一. 基础配置 1. ParentPackage注解的 ... -
Struts2 Action和Action配置
2012-08-25 23:45 1923一. Action实现类 1. Ac ... -
Struts2基本配置文件
2012-08-25 16:09 2143配置文件无需记忆,请尽量复制粘贴局部更改。 一.简述 ... -
整合Struts2 Spring Hibernate
2012-08-12 17:34 1170Struts2,Spring,Hibernate各自的职责 ...
相关推荐
Struts2内置了一些基本的Result类型,如“dispatcher”(默认),它会将结果视图作为JSP、FreeMarker或其他模板引擎文件来渲染。还有“redirect”和“redirectAction”,前者用于HTTP层面的重定向,后者用于在内部...
**Result** 在 Struts2 配置文件(通常是 struts.xml)中被定义,用来指定 Action 处理完业务逻辑后如何响应客户端请求。例如,可以配置 Result 来重定向到另一个 JSP 页面或者另一个 Action。 当开发者希望在 ...
### Struts2基本配置知识点详解 #### 一、Struts2概述 - **定义与作用**:Struts2是Apache组织开发的一个开源Web应用框架,主要用于简化Java Web应用程序的开发。Struts2作为MVC(Model-View-Controller)模式的一...
它的基本配置是理解和使用Struts2的关键步骤,对于初学者来说尤其重要。以下将详细介绍Struts2的基本配置及其相关知识点。 一、Struts2的核心组件 Struts2的核心组件包括Action、Result、Interceptor(拦截器)等。...
在Eclipse这个流行的Java集成开发环境中配置Struts2,可以帮助开发者更高效地构建动态Web项目。以下将详细介绍如何在Eclipse中成功配置Struts2。 1. **环境准备**: - 首先确保你的系统上已经安装了Java JDK和...
其中,`struts.xml`是Struts2的核心配置文件,用于定义项目的包、常量、拦截器等基本设置以及具体的Action配置。 #### 一、`struts.xml`文件结构与基础配置 **1. 文件声明与DTD定义** ```xml <!DOCTYPE struts ...
- `struts2-core.jar`:包含Struts2框架的基本组件,如ActionContext、ActionSupport、Result接口等。 - `struts2-convention-plugin.jar`:支持基于约定优于配置的Action自动映射,无需显式在`struts.xml`中配置...
- `struts2-core.jar`:Struts2的核心库,包含了框架的基本组件。 - `struts2-convention-plugin.jar`:约定优于配置的插件,简化Action和结果的配置。 - `struts2-spring-plugin.jar`:Spring集成插件,帮助管理...
在开始使用Struts2之前,我们需要先进行环境配置。以下将详细介绍Struts2的初始使用环境配置步骤。 首先,确保你已经安装了Java Development Kit (JDK)。JDK是开发Java应用的基础,你需要至少JDK 1.6或以上版本来...
- **struts-default.xml**:这是Struts2框架提供的默认配置文件,包含了一些基本的拦截器和结果类型的定义。当开发者未在自己的`struts.xml`中指定某些配置时,默认会采用这些预定义的配置。 #### 二、struts.xml...
理解了lib目录后,我们转向“struts2的基本配置”。Struts2的配置主要分为两部分:XML配置和注解配置。在典型的`struts-default.xml`和`struts.xml`配置文件中,你可以定义Action、结果类型、拦截器栈等。 1. **...
这篇博文将深入探讨Struts2中的result配置以及各种视图转发类型。 首先,让我们理解Result的基本概念。在Struts2的配置文件(如struts.xml)中,每个Action可以有多个结果,每个结果对应一个特定的视图。Result配置...
在Struts2框架中,每个动作(Action)都可能有多个结果(Result),这些结果是由配置文件(如struts.xml)中的`<result>`标签定义的。当一个Action执行完成后,根据其返回值,Struts2会寻找匹配的结果类型并执行相应...
在深入了解Struts2的配置细节之前,我们先来简要概述一下Struts2框架的核心特点及其配置文件的基本结构。Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用开发框架。它通过一系列的配置文件来...
Struts2是一个强大的Java web...以上就是Struts2在MyEclipse中配置的基本步骤。在实际开发中,你可能还需要配置拦截器、结果类型、国际化、数据校验等高级特性。不断学习和实践,你将更深入地掌握Struts2框架的精髓。
Struts2是一个强大的MVC(Model-View-Controller)框架,用于构建企业级的Java Web应用程序。在Struts2框架中,配置文件起着至关重要...因此,对`struts.xml`和`web.xml`的深入学习和实践是每个Struts2开发者的基本功。
`@ParentPackage`注解则是为了继承父配置包,这样我们可以在基本配置不变的情况下,只定义特定于当前Action的配置。 至于压缩包中的`testactionCon`,这可能是测试Action的控制器类或相关配置文件的一部分。如果这...
本文详细介绍了Struts2的基本配置方法,包括`web.xml`和`struts.xml`的配置细节,以及如何利用Struts2框架进行数据库的增删改查操作。通过以上内容的学习,开发者可以更好地理解和掌握Struts2框架的使用方法,从而...