1、传统访问:通过<action>标签中的method属性,访问到Action中的具体的方法
* 传统的配置方式,配置更清晰更好理解!但是扩展需要修改配置文件
* 具体的实例如下:
* 页面代码:
<h3>传统的配置文件的方式</h3>
<a href="${pageContext.request.contextPath }/saveCust.action">保存客户</a>
<a href="${pageContext.request.contextPath }/delCust.action">删除客户</a>
* Action类的代码:
public class CustomerAction extends ActionSupport{
// 保存客户
public String save() {
System.out.println("保存客户...");
return NONE;
}
// 删除客户
public String delete() {
System.out.println("删除 客户...");
return NONE;
}
}
* 配置文件的代码(struts.xml):
<!-- 演示Action的访问,传统方式 -->
<package name="demo2" namespace="/" extends="struts-default">
<action name="saveCust" class="com.itheima.action2.CustomerAction" method="save"></action>
<action name="delCust" class="com.itheima.action2.CustomerAction" method="delete"></action>
</package>
2、通配符的访问方式(访问的路径和方法的名称必须要又某种联系)通配符就是 * 代表任意的字符
* 使用通配符的方式可以简化配置文件的代码编写,而且扩展和维护比较容易。
* 具体实例如下:
* 页面代码:
<h3>通配符的方式(应用较多)</h3>
<a href="${pageContext.request.contextPath }/linkman_save.action">保存联系人</a>
<a href="${pageContext.request.contextPath }/linkman_delete.action">删除联系人</a>
* Action类的代码:
/**
* 通配符的方式
*/
public class LinkmanAction extends ActionSupport {
// 保存联系人
public String save() {
System.out.println("保存联系人...");
return "saveOK";
}
// 删除联系人
public String delete() {
System.out.println("删除联系人...");
return "delOK";
}
}
* 配置文件的代码(struts.xml):
<!-- 通配符的方式 -->
<package name="demo2" namespace="/" extends="struts-default">
<action name="linkman_*" class="com.itheima.action2.LinkmanAction" method="{1}">
<result name="saveOK">/demo1/suc.jsp</result>
<result name="delOK">/demo1/suc.jsp</result>
</action>
</package>
具体理解:在JSP页面发送请求,linkman_save.action,配置文件中linkman_*可以匹配该请求,*就相当于变成了save,method属性的值使用{1}来代替,{1}就表示的是第一个*号的位置!!所以method的值就等于save,那么就找到Action类中的save方法,那么save方法就执行了。
3、动态方法访问的方式(有的开发也会使用)
* 如果使用动态方法访问的方式,需要开启一个常量,struts.enable.DynamicMethodInvocation = false,把值设置成true
* 注意:不同的Struts2框架的版本,该常量的值不一定是true或者false,需要自己来看。如果是false,需要自己开启。
* struts.xml中开启该常量。
<!-- 开启动态方法访问 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
* 具体代码如下:
* 页面代码:
<h3>动态方法访问的方式</h3>
<a href="${pageContext.request.contextPath }/user!save.action">保存用户</a>
<a href="${pageContext.request.contextPath }/user!delete.action">删除用户</a>
* Action类的代码:
/**
* 动态方法访问方式
*/
public class UserAction extends ActionSupport {
// 保存用户
public String save() {
System.out.println("保存用户...");
return NONE;
}
// 删除用户
public String delete() {
System.out.println("删除用户...");
return NONE;
}
}
* 配置文件的代码:
<!-- 开启动态方法访问 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<!-- 配置动态方法访问 -->
<package name="demo2" namespace="/" extends="struts-default">
<action name="user" class="com.itheima.action2.UserAction" ></action>
</package>