动态方法调用是为了解决一个Action对应的多个请求的处理,以免Action太多
struts2提供了三种方式解决
1、指定method属性
struts.xml配置
<?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>
<!-- 首先需要配置包名 包里面可以有多个action的 -->
<package name="default" namespace="/" extends="struts-default">
<action name="helloWord" class="cn.hb.si.HelloAction">
<result>/result.jsp</result>
</action>
<action name="addAction" method="add" class="cn.hb.si.HelloAction">
<result>/add.jsp</result>
</action>
<action name="updateAction" method="update" class="cn.hb.si.HelloAction">
<result>/update.jsp</result>
</action>
</package>
</struts>
java类
package cn.hb.si;
import javax.servlet.http.HttpServletRequest;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport{
private HttpServletRequest request;
public String add(){
return SUCCESS;
}
public String update(){
return SUCCESS;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println("执行Action");
//返回string 可以理解为视图的路径
return SUCCESS;
}
}
web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
访问路径:http://localhost:8080//Struts2_1zixue/addAction.action
http://localhost:8080//Struts2_1zixue/updateAction.action
2、感叹号方式(不建议使用)
需要在struts.xml开启一个常量
java类
package cn.hb.si;
import javax.servlet.http.HttpServletRequest;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport{
private HttpServletRequest request;
//感叹号
public String add(){
return "add";
}
public String update(){
return "update";
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println("执行Action");
//返回string 可以理解为视图的路径
return SUCCESS;
}
}
struts.xml配置
<?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>
<!-- 首先需要配置包名 包里面可以有多个action的 -->
<package name="default" namespace="/" extends="struts-default">
<action name="helloWord" class="cn.hb.si.HelloAction">
<result>/result.jsp</result>
<result name="add">/add.jsp</result>
<result name="update">/update.jsp</result>
</action>
</package>
<!-- 感叹号需要开始一个常量 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
</struts>
web,xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
访问路径:访问默认:http://localhost:8080//Struts2_1zixue/helloWord.action
访问add: http://localhost:8080//Struts2_1zixue/helloWord!add.action
访问update: http://localhost:8080//Struts2_1zixue/helloWord!update.action
3、通配符方式(建议使用)
java类:
package cn.hb.si;
import javax.servlet.http.HttpServletRequest;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport{
private HttpServletRequest request;
public String add(){
return "add";
}
public String update(){
return "update";
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println("执行Action");
//返回string 可以理解为视图的路径
return SUCCESS;
}
}
struts.xml配置
<?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>
<!-- 首先需要配置包名 包里面可以有多个action的 -->
<package name="default" namespace="/" extends="struts-default">
<!-- 通配符方式 方法1 -->
<!-- <action name="helloWord_*" method="{1}" class="cn.hb.si.HelloAction">
<result>/result.jsp</result> <result name="add">/{1}.jsp</result> <result
name="update">/{1}.jsp</result> </action> -->
<!-- 通配符方式 方法2 -->
<action name="*_*" method="{2}" class="cn.hb.si.{1}Action">
<result>/result.jsp</result>
<result name="add">/{2}.jsp</result>
<result name="update">/{2}.jsp</result>
</action>
</package>
</struts>
web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
方法一:需要在地址栏里面添加需要访问的类里面的方法名
访问地址:访问update:http://localhost:8080//Struts2_1zixue/helloWord_update.action
访问add; http://localhost:8080//Struts2_1zixue/helloWord_add.action
方法二:需要在地址栏里面添加类名和方法名
访问地址:访问update:http://localhost:8080//Struts2_1zixue/Hello_update.action
访问add: http://localhost:8080//Struts2_1zixue/Hello_add.action
访问默认: http://localhost:8080//Struts2_1zixue/Hello_.action