Struts2系列笔记(2)---struts.XML

Struts2.xml

本篇博客主要讲struts.xml中package下的标签和标签属性,主要分以下四个部分说明:

  (1)action的配置基本属性

  (2)同一个Action类中不同方法满足不同的action逻辑

  (3)通配符解决多业务问题

  (4)配置处理结果:

(1)action的配置基本属性

 1  <!--首先声明本片文章基本还是参考http://www.cnblogs.com/Nouno/p/5683447.html的博客,特此说明-->
 2 <?xml version="1.0" encoding="UTF-8"?>  
 3   <!DOCTYPE struts PUBLIC  
 4       "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  
 5       "http://struts.apache.org/dtds/struts-2.3.dtd">  
 6   <struts>  
 7       <!-- /primer/helloWorldAction.action  
 8           package:包  
 9               * name:包名,唯一的,必选项  
10               * namespace:命名空间,唯一的,相当于房间号。可选项,省略情况下是"/"。页面中请求连接的前半部分  
11               * extends:继承  
12                  * extends="struts-default":struts2框架底层提供的核心包struts2-core-2.3.3.jar下的struts-default.xml文件  
13                  * 为什么要继承这个struts-default.xml文件?  
14                      * 因为struts2框架底层提供的struts-default.xml声明了所有的拦截器和拦截器栈,  
15                                 知道在struts2框架运行时执行struts-default.xml文件中的拦截器栈。  
16                      * 如果不继承struts-default.xml文件,就没有办法使用struts2框架提供的所有拦截器  
17          -->  
18       <package name="primer" namespace="/" extends="struts-default">  
19            
20          <!--   
21                   如果找不到对应的action名的时候,配置默认要执行的action   
22                 * name:指定action的名称  
23          -->   
24          <default-action-ref name="error"></default-action-ref> 
25 27 <action name="error" class="com.yyc.struts.action.ErrorAction"> 28 <result name="error">/error.jsp</result> 29 </action> 30 <!-- 31 action: 32 * name:对应页面中请求连接的后面半部分,这里表示jsp请求链接为hello.action才会和它匹配 33 * class:对应要执行的类的完整路径 ,表示Action类的完整路径,相当于之前的servlet类 34 *method:对应的class类中要执行的方法,默认执行method="execute()" 35 --> 36 <action name="hello" class="cn.yht.primer.HelloWorldAction" method="execute()"> 37 <!-- 38 result:结果类型 ,可以用来把Action类处理好的数据跳转到某界面 39 * name:对应的是执行的类的方法的返回值 40 public String execute() throws Exception { 41 System.out.println("HelloWorldAction ************* execute()"); 42 return "success"; 43 } 44 * 默认判断name="success",后半部分的文本内容:要转向到的页面 45 --> 46 <result name="success">/primer/success.jsp</result> 47 </action> 48 <!-- 49 没有为action指定class 50 * 在struts2框架底层的struts-default.xml文件中,配置了默认执行的类 51 com.opensymphony.xwork2.ActionSupport 52 public String execute() throws Exception { 53 return SUCCESS; 54 } 55 * 实际上,默认执行的是底层提供的ActionSupport类的execute()方法 56 * result结果类型,默认是根据struts2框架底层提供的ActionSupport类的execute()方法返回值,进行跳转 57 --> 58 <action name="actionNoClass"> 59 <result name="success">/primer/success.jsp</result> 60 </action> 61 </package> 62 </struts>

(2)同一个Action类中不同方法满足不同的action逻辑

 1 <!--这个Action中有两个方法
 2 public class ProductAction extends ActionSupport {
 3     public String add(){
 4         System.out.println("添加商品");
 5         return NONE;
 6     } 
 7     public String del(){
 8         System.out.println("删除商品");
 9         return NONE;
10     }  
11 }-->
12 
13 <!-- 多个业务需求 -->
14        <action name="addBook" class="com.guigu.struts.action.BookAction" method="add"></action>
15        <action name="delBook" class="com.guigu.struts.action.BookAction" method="del"></action>
16 <!--这样确实能够实现一个Action类中的不同方法,都能被调用
17    但是你也许会注意到,每调用一个方法都需要配置action-->

(3)通配符解决多业务问题

 1 <!--这里是jsp文件  
 2      <h1>客户管理</h1>
 3      <a href="${pageContext.request.contextPath }/customer_add">添加客户</a><br/>
 4      <a href="${pageContext.request.contextPath }/customer_del">删除客户</a><br/>
 5      <a href="${pageContext.request.contextPath }/customer_edit">修改客户</a><br/>
 6      <a href="${pageContext.request.contextPath }/customer_find">查询客户</a><br/>
 7      -->
 8  <!-- 使用通配符解决多业务问题 -->
 9        <!-- method 属性{1}是取第一个* ,这样就只需要写一个action就可以了,我们只要在Action类中写好相对应的方法即可-->
10        <action name="customer_*" class="com.guigu.struts.action.CustomerAction" method="{1}">
11           <result >/demo1/{1}.jsp</result>
12        </action>

(4)配置处理结果: 

Struts2的Action处理用户请求结束后,返回一个普通字符串-逻辑视图名,必须在struts.xml文件中完成逻辑视图和物理视图资源的映射,才可让系统转到实际的视图资源。

Struts2通过在struts.xml文件中使用<result …/>元素来配置结果。Struts2提供了两种结果。

     a.局部结果:将<result …/>作为<action …>元素的子元素配置。

     b.全局结果:将<result …/>作为<global-results …>元素的子元素配置。

在package元素中配置<global-results>子元素:

<!--全局result(global-results)
有很多时候一个<result>可供很多<action>使用,这时可以使用<global-results>标签来定义全局的<result>l。执行顺序:当一个Action返回的String没有相应的<result>与之对应,Struts2就会查找全局的<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>

欢迎大家留言指点!

 

posted on 2017-02-14 21:07  雨点的名字  阅读(586)  评论(2编辑  收藏  举报