Action的三种访问方式(八)

本文详细介绍了Struts2.0中Action的三种访问方式:传统方式、通配符方式和动态访问方式。通配符方式通过减少Action标签数量,提高了配置效率。动态访问方式则提供了更灵活的请求映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、传统方式

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 运行效果



源码下载


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值