• struts2 action 配置方法 &&struts2的配置文件


     struts2 action几乎完全吸收了xwork 的精华,近日学习struts 2,总结一下action的配制方法。首先看一下com.opensymphony.xwork2.Action的接口声明,Action提供execute() 方法,子类必须实现execute() 方法。

      public interface Action {
        public String execute() throws Exception;
    }

    com.opensymphony.xwork2.ActionSupport是com.opensymphony.xwork2.Action的缺省实现,实现了execute()方法。我们开发的Action通常继承com.opensymphony.xwork2.ActionSupport

    1.简单的action配置

     <action name="logon" class="tutorial.Logon">
      <result type="redirect-action">Menu</result>
      <result name="input">/tutorial/Logon.jsp</result>
    </action>

       前台发送调用logon.action的请求,截听器调用默认的execute()方法

    2.在开发中通常将多个方法写在一个action中,对于这样action可以采用集中配置方式
    2.1.一个方法一个action配制

     <action name="delete" class="example.CrudAction" method="delete">


    2.2通配符方式
    2.2.1 *

     <action name="*Crud" class="example.Crud" method="{1}">

      method="{1}"表示,第一个通配符是方法.

      action调用的例子:addCrud.action, deleteCrud.action, updateCrud.action, viewCrud.action


    2.2.2 分割符加上*,分割符如:下划线_, 惊叹号!

     <action name="crud_*" class="example.Crud" method="{1}">

       调用方式:crud_add.action, crud_delete.action

     <action name="crud!*" class="example.Crud" method="{1}">

          调用方式:crud!add.action, crud!delete.action


    2.3 url pattern: /{model}/{method}.action
    “/User/add.action” 调用User的add方法

     

    <action name=”*/*” method=”{2}”
    class=”com.infoq.actions.{1}Action”>
    <result type=”redirect”>/{1}/view.action</result>
    <result name=”view”>/{1}/view.jsp</result>
    <result name=”input”>/{1}/edit.jsp</result>
    <result name=”home”>/{1}/home.jsp</result>
    </action>

     

    =========================================================

    struts2的配置文件

    struts2相关的配置文件有web.xml(必须的),struts.xml(必须的),struts.properties,struts-default.xml,velocity.properties,struts-default.vm。

    web.xml: 包含所有必须的框架组件的web部署描述符;

    struts.xml:配置包含result/view类型、action映射、拦截器等的struts2的主要配置文件。

    struts.properties: 配置struts2的框架属性;

    struts.properties 配置文件(此文件放在/WEB-INF/classes/)

    此文件包含了一系列的key-value对象,每个key就是一个struts2的属性,value就是一个struts2的属性值。

    此配置文件提供了一种改变框架默认行为的机制。其所包含的所有属性都可以在web.xml配置文件中使用"ini-param"标签进行配置,或者在struts.xml文件中使用"constant"标签进行配置。

    ****************************

    struts.xml常用配置使用方法**

    ****************************

    1、<include>标签重用配置文件

    如果package,action,interceptor等配置较多时,都放到一个struts.xml中比较不容易维护。

    所以需要将struts.xml文件分成多个配置文件,然后在struts.xml文件中使用<include>标签引用这些配置文件。结构清晰,配置文件复用。

    例子:

    <struts>

       <include file="struts1.xml"/>

       <package name="" extends="/sturts-default">...</package>

    <action name=>..</action>

    </struts>

    2、action配置

    默认情况下,struts2会调用动作类的execute方法,但有时,好几个请求动作对应一个action类中不同的方法。

    这种情况下,可以在<action>标签中通过method方法指定要执行的动作类的方法名,并且需要为不同的动作起不同的名字(也叫别名,即name值)。

    <action name="my1" class="action2.method.Myaction">

       ......

    </action>

    <action name="my2" class="action2.method.Myaction" method="print">

       ......

    </action>

      上面2个动作的class属性都指向同一个类,name为他起了2个动作别名,my1和my2.

    在每个动作里又指定了要运行的方法名。

    下来在action类里一定要有这1个方法print。

    package ction2.method

    public class Myaction extends ActionSupport{

      public String execute() throws Exception{

        ........这是一般的方法,配合第一个action

              }

      public String print() throws Exception{

        ....... 这是第2个action的方法

       }

    }

    除了 在struts.xml中配置别名外,还可以不用修改struts.xml而直接用请求参数来描述指定动作,格式如下:

    http://localhost:8080/contextPath/actionName!method.action

    通过请求指定动作的详细内容:   actionName!method.action

    如这个,后面可以这样写:/my2!print.action 即可访问之。

    3、请求参数设置

    <action name="" class="">

    <param name="name">zhengsha</param>

    <param name="age">26</param>

    <result name="save">/result.jsp</result>

    </action>

    4、action类中定义相应的setter方法读取此参数,一般不用设置getter方法

    public class Myaction extends ActionSupport

    {

    private String name;

    private String age;

    public void setName(String name)

    {

    this.name= name;

    }

    public void setAge(String age)

    {

    this.age= age;

    }

    public String execute() throws Exception

    {System.out.println("name is"+name+";age is"+age);}

    }

    5、result 配置

    默认状态下,<result>标签的type属性是"dispatcher",即转发。

    如果result的type属性没有定义,struts2会自动将其定义为success。

    用户也可以自己设置

    <result name="save" type="redirect">/result.jsp</result>

    如有一个result被多个<action>使用,这时可以使用<global-results>标签来定义全局的<result>,代码如下:

    <struts>

    <package name="demo" extends="struts-default">

    <global-results>

    <result name="print">/result.jsp</result>

    </global-results>

    <action name="submit" class="...">

     如果action里没有相应的result,那struts2就会使用全局的<result>

    </action>

    </package>

    </struts>

    6、拦截器配置

    struts2拦截器如同servlet里的过滤器,struts2执行action的execute()方法前先执行在struts.xml中配置的拦截器,执行完所有的intercepor方法后,会执行execute方法。

    注意:在action里面最后必须一定要引用struts2自带的拦截器缺省堆栈defaltStack,否则出错。

    如:

    <interceptor-ref name="defaultStack"/>(必须加,否则出错!)

    7、package配置

    package 可以将逻辑上相关的一组action,result,interceptor等组件分为一组。

    package 属性有:

    name(必须的)       package的表示,为了让其他的package引用

    extends(可选的)  从哪个package继承的

    namespace(可选的)  下面讲

    abstract(可选的)  定义这个package为抽象的,这个package中不需要定义action

    namespace 讲解

    "/" 表示根namespace,所有直接在应用程序上下文环境下的请求(Context)都在这个package下查找。

    ""表示默认的namespace。当所有的namespace中都找不到的时候,就在这里找。

    例如:

    <package name="default">

    <action name="bar" class="">...</action>

    </package>

    <package name="mypack1" namespace="/barspace">

    <action name="bar" class="">...</action>

    </package>

    <package name="mypack2" namespace="/">

    <action name="no" class="">...</action>

    </package>

    a、 如果请求为 /barspace/bar.action ,则查找 “/barspace”,如果找到"bar",则执行相应的    action;如果没找到,就执行默认的namespace。

    b、     如果请求为“/no.action”则namespace(“/”)被查找,找到了则执行对应的action,否则执行默认的namespace。

    8、action配置

    result默认的name为success.

    action中的方法通配符

    例子:

    <action name="*curd" class="" method="{1}"></action>

    editcurd action 将调用edit方法,

    deletecurd action将调用delete方法。

    默认的action

    当没有指定action的class属性的时候,默认使用com.opensymphiony.xwork.ActionSupport。

    ActionSupport下有2个方法,input 和 execute,每个方法都是简单的返回success。

    当请求的action不存在的时候,struts2会返回404错误页面,但我们也可以定义自己的默认页面,使用如下方法:

    <package name="hello" extends="action-default">

    <default-action-ref name="Under">

    <action name="Under">

    <result>/error.jsp</result>

    </action>

    <action name="*">

    <result>/{1}.jsp</result>

    </action>//每个action将会被映射到以自己名字 命名的 jsp上。

    </package>

  • 相关阅读:
    sql FLOAT字段使用like查询
    关于sql--时间范围查询重叠
    关于java时间类型比较
    前端-搜索无结果时,怎么把“暂无数据“显示出来?
    v-for动态赋值给不同的下拉框input
    Java的优先队列PriorityQueue详解
    软件体系架构阅读笔记八
    字符数组和字符串之间的转换
    Java快速输入输出
    软件体系架构阅读笔记七
  • 原文地址:https://www.cnblogs.com/pony/p/2076170.html
Copyright © 2020-2023  润新知