一、传统方式
1.1 代码
package com.ken.action2;
import com.opensymphony.xwork2.ActionSupport;
public class CustomerAction extends ActionSupport {
private static final long serialVersionUID = -3159892583595670390L;
public String save() {
System.out.println("保存客户...");
return NONE;
}
public String delete() {
System.out.println("删除客户...");
return NONE;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>传统的配置文件方式</h3>
<a href="${pageContext.request.contextPath }/saveCust.action">保存客户</a>
<a href="${pageContext.request.contextPath }/delCust.action">删除客户</a>
</body>
</html>
1.2 配置
<!-- Action的访问,传统方式 -->
<package name="demo2" namespace="/" extends="struts-default">
<action name="saveCust" class="com.ken.action2.CustomerAction"
method="save" />
<action name="delCust" class="com.ken.action2.CustomerAction"
method="delete" />
</package>
1.3 运行效果
二、通配符方式
2.1 代码
package com.ken.action2;
import com.opensymphony.xwork2.ActionSupport;
/**
* 通配符的方式
*
*/
public class LinkmanAction extends ActionSupport {
private static final long serialVersionUID = -6387584399632189176L;
public String save() {
System.out.println("保存联系人...");
return NONE;
}
public String delete() {
System.out.println("删除联系人...");
return NONE;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>传统的配置文件方式</h3>
<a href="${pageContext.request.contextPath }/saveCust.action">保存客户</a>
<a href="${pageContext.request.contextPath }/delCust.action">删除客户</a>
<h3>通配符的方式(应用比较多)</h3>
<a href="${pageContext.request.contextPath }/linkman_save.action">保存客户</a>
<a href="${pageContext.request.contextPath }/linkman_delete.action">删除客户</a>
</body>
</html>
2.2 配置
<?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>
<package name="default" namespace="/" extends="struts-default">
<!-- 配置Action -->
<action name="hello" class="com.ken.action.HelloAction" method="sayHello">
<!-- 配置跳转的页面,路径的写法:在struts2框架中,不管是转发还是重定向都不用写项目名 -->
<!-- name中的ok叫做逻辑视图名称 -->
<result name="ok">/demo1/success.jsp</result>
</action>
<!-- POJO -->
<action name="demo1Action" class="com.ken.action.Demo1Action">
</action>
<!-- 实现Action接口 -->
<action name="demo2Action" class="com.ken.action.Demo2Action">
<result name="success">/demo1/success.jsp</result>
</action>
<!-- Action类继承ActionSupport -->
<action name="demo3Action" class="com.ken.action.Demo3Action">
</action>
</package>
<!-- Action的访问 -->
<package name="demo2" namespace="/" extends="struts-default">
<!-- 传统方式 -->
<action name="saveCust" class="com.ken.action2.CustomerAction"
method="save" />
<action name="delCust" class="com.ken.action2.CustomerAction"
method="delete" />
<!-- 通配符的方式 -->
<action name="linkman_*" class="com.ken.action2.LinkmanAction"
method="{1}"></action>
</package>
</struts>
2.3 运行效果
通配符的优点是,减少了Action标签的数量。
三、动态访问的方式
3.1 代码
package com.ken.action2;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
/**
* 动态方法访问
*/
private static final long serialVersionUID = 2843394265982624974L;
public String save() {
System.out.println("保存用户...");
return NONE;
}
public String delete() {
System.out.println("删除用户...");
return NONE;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>传统的配置文件方式</h3>
<a href="${pageContext.request.contextPath }/saveCust.action">保存客户</a>
<a href="${pageContext.request.contextPath }/delCust.action">删除客户</a>
<h3>通配符的方式(应用比较多)</h3>
<a href="${pageContext.request.contextPath }/linkman_save.action">保存客户</a>
<a href="${pageContext.request.contextPath }/linkman_delete.action">删除客户</a>
<h3>动态方法访问的方式</h3>
<a href="${pageContext.request.contextPath }/user!save.action">保存用户</a>
<a href="${pageContext.request.contextPath }/user!delete.action">删除用户</a>
</body>
</html>
3.2 配置
关键:开启常量的配置
<!-- 开启动态方法访问 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
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>
<!-- 开启动态方法访问 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="default" namespace="/" extends="struts-default">
<!-- 配置Action -->
<action name="hello" class="com.ken.action.HelloAction" method="sayHello">
<!-- 配置跳转的页面,路径的写法:在struts2框架中,不管是转发还是重定向都不用写项目名 -->
<!-- name中的ok叫做逻辑视图名称 -->
<result name="ok">/demo1/success.jsp</result>
</action>
<!-- POJO -->
<action name="demo1Action" class="com.ken.action.Demo1Action">
</action>
<!-- 实现Action接口 -->
<action name="demo2Action" class="com.ken.action.Demo2Action">
<result name="success">/demo1/success.jsp</result>
</action>
<!-- Action类继承ActionSupport -->
<action name="demo3Action" class="com.ken.action.Demo3Action">
</action>
</package>
<!-- Action的访问 -->
<package name="demo2" namespace="/" extends="struts-default">
<!-- 传统方式 -->
<action name="saveCust" class="com.ken.action2.CustomerAction"
method="save" />
<action name="delCust" class="com.ken.action2.CustomerAction"
method="delete" />
<!-- 通配符的方式 -->
<action name="linkman_*" class="com.ken.action2.LinkmanAction"
method="{1}" />
<!-- 动态方法访问的方式 -->
<action name="user" class="com.ken.action2.UserAction" />
</package>
</struts>
3.3 运行效果