zoukankan      html  css  js  c++  java
  • 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>

    欢迎大家留言指点!

  • 相关阅读:
    表达式与运算符
    Python3 从零单排22_异常处理
    Python3 从零单排21_元类
    Python3 从零单排20_方法(绑定&内置)&反射
    Python3 从零单排19_组合&多态
    Python3 从零单排18_封装
    Python3 从零单排17_类的继承
    Python3 从零单排16_面向对象基础
    Python3 从零单排15_urllib和requests模块
    Python3 从零单排14_flask模块&mysql操作封装
  • 原文地址:https://www.cnblogs.com/qdhxhz/p/6398003.html
Copyright © 2011-2022 走看看