一、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>
缺陷:action每个方法都要配置,放太多麻烦
第二种:使用通配符方式实现
(1)在action标签里面name属性,name属性里面写符号 * 星号
(2)* 表示匹配任意内容
- 比如访问add,*可以匹配到
- 比如访问update,*也可以匹配到
(3)通配符的匹配过程
(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;
}
}
主页
配置代码
<?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>
访问结果
第三种:动态访问实现(一般不用)
2、错误演示
(1)如果action有返回值,在配置文件中没有配置或者配置错误
(2)action里面有返回值返,返回值必须为String
(3)action里头的方法可以没有返回值,在result不需要配置
- 把方法写成void(不推荐)
- 把返回值写成none
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;
}
}
页面不报错控制台有输出