[原创]java WEB学习笔记58:Struts2学习之路---Result 详解 type属性,通配符映射

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

本人互联网技术爱好者,互联网技术发烧友

微博:伊直都在0221

QQ:951226918

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

每个 action 方法都将返回一个 String 类型的值, Struts 将根据这个值来决定响应什么结果.

每个 action 声明都必须包含有数量足够多的 result 元素, 每个 result 元素分别对应着 action 方法的一个返回值

result 元素可以有下面两个属性 name: 结果的名字, 必须与 Action 方法的返回值相匹配, 默认值为 success type: 响应结果的类型. 默认值为 dispatcher

1.result 简介 及 type属性

  1)result 是action 节点的子节点

  2)result 代表 action 方法执行后,可能去的一个目的地

  3)一个 action节点可以配置多个 result 子节点

  4)result 的name 属性对应着action 方法可能的返回值

  5)result 的type 属性:表示结果的响应类型

  6)result 的type 属性值在struts- default 包的result-types 节点中的name属性中定义

 1 <package name="struts-default" abstract="true">
 2         <result-types>
 3             <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
 4             <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
 5             <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
 6             <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
 7             <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
 8             <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
 9             <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
10             <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
11             <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
12             <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
13         </result-types>

           > dispatcher(默认):转发  同servlet中的转发是一致的。结果类型将把控制权转发给应用程序里的指定资源.

           结果类型不能把控制权转发给一个外部资源. 若需要把控制权重定向到一个外部资源, 应该使用 redirect 结果类型

       > redirect:重定向

           redirect 结果类型将把响应重定向到另一个资源, 而不是转发给该资源.

           redirect 结果类型接受下面这些参数: location: 用来给出重定向的目的地.它是默认属性 parse: 用来表明是否把 location 参数的值视为一个 OGNL 表达式来解释. 默认值为 true

           redirect 结果类型可以把响应重定向到一个外部资源

       > redirectActoin:重定向到一个action中

          通过redirect 的响应类型也可以便捷的实现 redirectAcion 的功能

          redirectAction 结果类型把响应重定向到另一个 Action

           redirectAction 结果类型接受下面这些参数: actionName: 指定 “目的地” action 的名字. 它是默认属性

                             namespace: 用来指定 “目的地” action 的命名空间. 如果没有配置该参数, Struts 会把当前 Action 所在的命名空间作为 “目的地” 的命名空间

         > chain:转发到一个Action

          chain 结果类型的基本用途是构成一个 action 链: 前一个 action 把控制权转发给后一个 action, 而前一个 action 的状态在后一个 action 中依然保持

          chain 结果类型接受下面这些参数: actionName: 指定目标 action 的名字. 它是默认属性

                       namespace: 用来指定 “目的地” action 的命名空间. 如果没有配置该参数, Struts 会把当前 action 所在的命名空间作为 “目的地” 的命名空间 method: 指定目标 action 方法. 默认值为 execute

     <package name="testAction" namespace="/"  extends="struts-default">
<action name="TestResult" class="com.jason.struts.action.TestResultAction">

            <!-- 转发-->
            <result name="success" type="dispatcher">/success.jsp</result>   

            <!-- 重定向 -->
            <result name="login" type="redirect">/login.jsp</result>   

            <!-- 重定向到一个action -->
            <!-- <result name="index" type="redirectAction">
                <param name="actionName">testAction</param>
                <param name="namespace">/jason</param>
            </result> -->

            <!-- 通过 redirect 的响应类型也可以便捷的实现redirectAction 的功能 -->
            <result name="index" type="redirect">/jason/testAction.do</result>

            <!-- 转发到一个 Action -->
            <result name="test" type="chain">
                <param name="actionName">testAction</param>
                <param name="namespace">/jason</param>
            </result>
        </action>
    </package>

    <package name="testPackage" namespace="/jason" extends="struts-default">
        <action name="testAction" class="com.jason.struts.action.TestAction">
            <result name="success">/success.jsp</result>
        </action>
    </package>

2.通配符映射

  1)一个 Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系

  2)通配符映射规则

     ① 若找到多个匹配, 没有通配符的那个将胜出 :即,当

       ② 若指定的动作不存在, Struts 将会尝试把这个 URI 与任何一个包含着通配符 * 的动作名及进行匹配

     ③ 被通配符匹配到的 URI 字符串的子串可以用 {1}, {2} 来引用. {1} 匹配第一个子串, {2} 匹配第二个子串…

     ④ {0} 匹配整个 URI

     ⑤ 若 Struts 找到的带有通配符的匹配不止一个, 则按先后顺序进行匹配

     ⑥  * 可以匹配零个或多个字符, 但不包括 / 字符. 如果想把 / 字符包括在内, 需要使用 **. 如果需要对某个字符进行转义, 需要使用 \.

    

 1 <action name="UserAction-*" class="com.jason.struts.action.UserAction" method="{1}">
 2             <result name="{1}-success">/success.jsp</result>
 3         </action>
 4
 5
 6         <!--
 7
 8         <action name="UserAction-save" class="com.jason.struts.action.UserAction" method="save">
 9             <result name="save-success">/success.jsp</result>
10         </action>
11
12          <action name="UserAction-update" class="com.jason.struts.action.UserAction" method="update">
13             <result name="update-success">/success.jsp</result>
14         </action>
15         <action name="UserAction-delete" class="com.jason.struts.action.UserAction" method="delete">
16             <result name="delete-success">/success.jsp</result>
17         </action>
18         <action name="UserAction-query" class="com.jason.struts.action.UserAction" method="query">
19             <result name="query-success">/success.jsp</result>
20         </action> -->
21         
UserAction.java
 1 package com.jason.struts.action;
 2
 3 public class UserAction {
 4
 5     public String save(){
 6         System.out.println("save ...");
 7         return "save-success";
 8     }
 9     public String update(){
10         System.out.println("update ...");
11         return "update-success";
12     }
13     public String delete(){
14         System.out.println("delete ...");
15         return "delete-success";
16     }
17     public String query(){
18         System.out.println("query ... ");
19         return "query-success";
20     }
21
22 }

index.jsp

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10         <br><br>
11         <a href="UserAction-save.do">User Save</a>
12
13         <br><br>
14         <a href="UserAction-update.do">User Update</a>
15
16         <br><br>
17         <a href="UserAction-delete.do">User Delete</a>
18
19         <br><br>
20         <a href="UserAction-query.do">User Query</a>
21
22 </body>
23 </html>

3.动态方法调用:了解

  

  动态方法调用:

     通过 url 动态调用 Action 中的方法 action 声明:

     URI:

    /struts-app2/Product.action: Struts 调用 Product 类的 execute

     /struts-app2/Product!save.action: Struts 调用 Product 类的 save() 方法

默认情况下, Struts 的动态方法调用处于禁用状态

  开关:struts-core/org.apache.struts2/default.properties 中struts.enable.DynamicMethodInvocation

      

时间: 2024-10-07 21:50:25

[原创]java WEB学习笔记58:Struts2学习之路---Result 详解 type属性,通配符映射的相关文章

Ext.Net学习笔记07:Ext.Net DirectMethods用法详解

前面两篇内容中,我们看到了DirectEvents方便调用服务器端方法.DirectEvents调用WebService方法的使用方法,今天我们来看看DirectMethods,这家伙可比DirectEvents更加灵活了,它可以像调用JS方法一样来异步调用服务器端的方法. 使用DirectMethods在JS中调用C#方法 我承认,这个标题有点噱头,其实应该是通过DirectMethods,在JS中通过异步调用的方式执行服务器端的方法. 来看一个例子吧: [DirectMethod] publ

Ext.Net学习笔记22:Ext.Net Tree 用法详解

Ext.Net学习笔记22:Ext.Net Tree 用法详解 上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat="server"> <Root> <ext:Node Text="根节点" Expanded="true"> <Children> <ext:Node Text="节点1" Expand

Struts2学习笔记(九):Strut2通用标签详解

本节主要介绍Strus2中的通用标签,主要有<s:url>, <s:set>, <s:push>, <s:if>, <s:elseif>, <s:else>, <s:iterator>, <s:sort>, <s:date>, <s:a>等几个标签的具体用法,仍然采用代码加注释的形式进行说明,希望能对大家有帮助. 刚入门的朋友阅读本文前,请阅读: Struts2学习笔记(六):值栈(va

Spring MVC 学习笔记(二):@RequestMapping用法详解

一.@RequestMapping 简介 在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置 <servlet>     <servlet-name>servletName</servlet-name>     <servlet-class>ServletClass</servlet-class> </servlet>

《Hibernate学习笔记十》:多对多关联关系详解

<Hibernate学习笔记十>:多对多关联关系 前面介绍了一对一.多对一和一对多的关联关系在Hibernate应如何实现,这篇博文就来介绍下最后一种关联关系:多对多.多对多关联关系在我们现实生活中的例子实在是太多太多,最典型的就是老师和学生的例子:一个老师可以教多个学生,而一个学生又可以被多个老师来教. 了解一点数据库的我们都知道,在数据库中表示多对多的关联关系,是借助于中间表来解决的. 如下: 还是和以往的思路一样,每一种关联关系都分为单向关联和双向关联,我们每种都会进行介绍,对于单向和双

Servlet学习笔记(九):监听器Listener详解

一.简介 (一)概述 1.Listener 用于监听 java web程序中的事件,例如创建.修改.删除Session.request.context等,并触发响应的事件. 2. Listener 对应观察者模式,事件发生的时候会自动触发该事件对应的Listeer. Listener 主要用于对 Session.request.context 进行监控.servlet2.5 规范中共有 8 种Listener  . (二)实现 1.不同功能的Listener 需要实现不同的 Listener  

学习笔记-《Linux基础知识之挂载详解(mount,umount及开机自动挂载)》

<Linux基础知识之挂载详解(mount,umount及开机自动挂载)>来源:Linux社区  作者:chawan 原文链接 http://www.linuxidc.com/Linux/2016-08/134666.htm 以下是学习作者这篇文章做的一些摘要及学习体会. 重要概念(经典原文引述) 挂载概念简述: 根文件系统之外的其他文件要想能够被访问,都必须通过"关联"至根文件系统上的某个目录来实现,此关联操作即为"挂载",此目录即为"挂载点

【Todo】Java学习笔记 100==100 &amp; Reflection API &amp; Optional类详解 &amp; DIP、IoC、DI &amp; token/cookie/session管理会话方式

为什么1000 == 1000返回为False,而100 == 100会返回为True?   Link Java Reflection API:Link Java8 Optional 类深度解析: Link 深入理解DIP.DI及IoC容器: Link 3种会话管理的方式: Link

【C#学习笔记】【1】VisualStudio2010Express安装详解

工欲善其事必先利其器 俗话说,工欲善其事必先利其器,在正式学习编程前,先把我们的开发软件安装好(当然,你要是大神,用命令行编译执行也不是不可).关于VisualStudio2010我就不复制百度的内容了,想详细看的,可以[点击这里]查看.用我的话说,就是一个写代码的软件,可以让我们通过简单的步骤写好代码并运行.至于Express指的是学习版,可以免费注册使用的(你得有一个微软的账户,也就是邮箱). VisualStudio2010Express安装 首先看我们下载好的软件包,是一个ISO格式的光