struts2

struts2 action的使用

2018-05-06  本文已影响0人  DouDouZH

一、action的三种编写方式

1、普通类,不继承任何类,不实现任何接口
package cn.doudou.action;

public class HelloAction {
    public String show(){
        return "success";
    }
}
2、实现action接口
package cn.doudou.action;

import com.opensymphony.xwork2.Action;

public class HelloAction1 implements Action {

    @Override
    public String execute() throws Exception {
        
        return SUCCESS;
    }
}
3、继承ActionSupport(一般使用)
package cn.doudou.action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction2 extends ActionSupport{
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        return SUCCESS;
    }
}

二、访问action的方法(重点)

1、有三种方法实现
第一种:使用action标签的method属性,这个属性里面写执行action的方法名

HelloAction.java

package cn.doudou.action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction2 extends ActionSupport{
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("success");
        return NONE;
    }
    public String add(){
        System.out.println("add----------");
        return NONE;
    }
    public String update(){
        System.out.println("update--------");
        return NONE;
    }
}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <constant name="false" value="struts.enable.DynamicMethodInvocation"/>
    <constant value="true" name="struts.devMode"/>
        <package name="methoddemo" extends="struts-default" namespace="/">
            <!-- 在method里头写方法名称 -->
            <action name="addAction" class="cn.doudou.action.HelloAction2" method="add"></action>
            <!-- 执行update方法 -->
            <action name="updateAction" class="cn.doudou.action.HelloAction2" method="update"></action>
        </package>
</struts>
image.png
缺陷:action每个方法都要配置,放太多麻烦
第二种:使用通配符方式实现

(1)在action标签里面name属性,name属性里面写符号 * 星号
(2)* 表示匹配任意内容

(3)通配符的匹配过程


image.png

(4)通匹配符案例实现
action编写

package cn.doudou.action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction2 extends ActionSupport{
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("success");
        return NONE;
    }
    public String add(){
        System.out.println("add----------");
        return NONE;
    }
    public String update(){
        System.out.println("update--------");
        return NONE;
    }
}

主页


image.png

配置代码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <constant name="false" value="struts.enable.DynamicMethodInvocation"/>
    <constant value="true" name="struts.devMode"/>
            <!-- 通配符方式实现 -->
            <package name="methoddemo" extends="struts-default" namespace="/">
                <!-- name属性里面写*
                     (1)执行action里面的add方法,访问hello_add    
                     (2)执行action里面的update方法,访问hello_update
                     上面的两个路径用hello_*都可以匹配到
                     metho写*的值 固定格式{1} 1代表第1个*
                 -->
                <action name="hello_*" method="{1}" class="cn.doudou.action.HelloAction2"></action>
            </package>
</struts>

访问结果


image.png
第三种:动态访问实现(一般不用)
2、错误演示

(1)如果action有返回值,在配置文件中没有配置或者配置错误


image.png image.png image.png

(2)action里面有返回值返,返回值必须为String
(3)action里头的方法可以没有返回值,在result不需要配置

package cn.doudou.action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction2 extends ActionSupport{
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("success");
        return NONE;
    }
}
image.png

页面不报错控制台有输出


image.png
image.png

上一篇下一篇

猜你喜欢

热点阅读