【SSH三大框架】Struts2基础第三篇:配置Action以及调用Action的三种方式

一、struts.xml中的包和命名空间

1、Struts2不支持为单独的Action设置命名空间,而是通过为包指定namespace属性来为包下面的所有Action指定共同的命名空间。

如果在配置<package>的时候没有指定namespace属性,则该包下的所有Action处于默认的包空间下

2、例如:

<package name="lee" extends="struts-default">
		<action name="login" class="org.crazyit.app.action.LoginAction">
			<!-- 定义三个逻辑视图和物理资源之间的映射 -->
			<result name="input">/login.jsp</result>
			<result name="error">/error.jsp</result>
			<result name="success">/welcome.jsp</result>
		</action>
	</package>

对于这里的package,定义了name属性,未定义命名空间,则该Action处理的URL为:localhost:8080/项目名/login.action

<package name="lee" extends="struts-default" namespace="/book">
		<action name="login" class="org.crazyit.app.action.LoginAction">
			<!-- 定义三个逻辑视图和物理资源之间的映射 -->
			<result name="input">/login.jsp</result>
			<result name="error">/error.jsp</result>
			<result name="success">/welcome.jsp</result>
		</action>
	</package>

对于这里的package,定义了namespace命名空间,则该Action处理的URL为:localhost:8080/项目名称/book/login.action

注意顺序:①如果请求为/book/login.action,系统首先会查找/book命名空间下的login.action,如果找不到,则会在默认的命名空间查找login.action

②如果请求为/login.action,系统会在跟命名空间(”/“)查找名为login.action,如果找不到,就会转入默认的命名空间

二、使用动态方法调用Action

在一个登陆页面,包含有”登陆“和”注册“两个按钮,如果我们点击了”注册“,我们可以利用javascript来改变form表单的action

function regist()
{
   targetForm = document.forms[0];
   targetForm.action = "login!regist";
}

在点击注册之后,我们表单的action属性变为了”login!regist“,意思是交给login这个Action的regist方法处理

三、指定method属性调用Action

在配置<action>元素的时候,我们可以为它定义method属性让Action调用指定的方法:

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<package name="lee" extends="struts-default">
		<!-- 配置login Action,处理类为LoginRegistAction
			默认使用execute方法处理请求-->
		<action name="login" class="org.crazyit.app.action.LoginRegistAction">
			<!-- 定义逻辑视图和物理视图之间的映射关系 -->
			<result name="input">/login.jsp</result>
			<result name="error">/error.jsp</result>
			<result name="success">/welcome.jsp</result>
		</action>
		<!-- 配置regist Action,处理类为LoginRegistAction
			指定使用regist方法处理请求-->
		<action name="regist" class="org.crazyit.app.action.LoginRegistAction"
			method="regist">
			<!-- 定义逻辑视图和物理视图之间的映射关系 -->
			<result name="input">/login.jsp</result>
			<result name="error">/error.jsp</result>
			<result name="success">/welcome.jsp</result>
		</action>
	</package>
</struts>

在这个struts.xml中,我们定义了两个Action,同时指向了同一个类:LoginRegistAction.java。但是,我们为这两个action分别配置了method属性。

这样子虽然看起来简单明了,但是代码量太多,不好看。

四、使用通配符调用Action

在配置<action>元素的时候,允许在指定name属性时使用模式字符串(即用”*“代表一个或多个任意字符),接下来就可以在class、method属性以及<result>子元素中使用{N}的形式来代表前面第N个星号(*)所匹配的子串,因此我们就可以用一个<action>代替多个“指定method属性的action(就是上边的第三种)”。

1、使用通配符配置method属性

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<package name="lee" extends="struts-default">
		<!-- 使用模式字符串定义Action的name,指定所有以Action结尾的请求,
		都可用LoginRegistAction来处理,method属性使用{1},
		这个{1}代表进行模式匹配时第一个*所代替的字符串 -->
		<action name="*Action" class="org.crazyit.app.action.LoginRegistAction"
			method="{1}">
			<!-- 定义逻辑视图和物理视图之间的映射关系 -->
			<result name="input">/login.jsp</result>
			<result name="error">/error.jsp</result>
			<result name="success">/welcome.jsp</result>
		</action>
	</package>
</struts>

当用户请求/loginAction的时候,会自动调用类“org.crazyit.app.action.LoginRegistAction”中的login方法

2、使用通配符配置class属性

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<package name="lee" extends="struts-default">
		<!-- 使用模式字符串定义Action的name,指定所有以Action结尾的请求,
		都可用{1}Action来处理,
		这个{1}代表进行模式匹配时第一个*所代替的字符串 -->
		<action name="*Action" class="org.crazyit.app.action.{1}Action">
			<!-- 定义逻辑视图和物理视图之间的映射关系 -->
			<result name="input">/login.jsp</result>
			<result name="error">/error.jsp</result>
			<result name="success">/welcome.jsp</result>
		</action>
	</package>
</struts>

当用户请求/loginAction的时候,会自动调用类org.crazyit.app.action.loginAction中默认的execute方法

3、使用多个通配符,同时配置class和method属性

<action name="*_*" method="{2}" class="actions.{1}" >

在上边的代码中,我们为name属性设置为"*_*",当我们请求/book_save的时候,系统会调用actions.book处理类的save方法来处理用户请求。

在使用通配符的时候,要特别注意一下调用顺序:

对于下边的代码:

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<package name="lee" extends="struts-default">

		<!-- 配置name="*"的第二个Action -->
		<action name="*Action" class="org.crazyit.app.action.TwoAction">
			<result name="success">/welcome.jsp</result>
		</action>
		<!-- 配置name="*Action"的第一个Action -->
		<action name="*" class="org.crazyit.app.action.FirstAction">
			<result name="success">/welcome.jsp</result>
		</action>
		<!-- 配置name为LoginAction的第三个Action -->
		<action name="LoginAction" class="org.crazyit.app.action.LoginAction">
			<result name="error">/error.jsp</result>
			<result name="success">/welcome.jsp</result>
		</action>
	</package>
</struts>

我们定义了三个action,分别为"*","*Action","LoginAction"

如果我们请求/RegistAction,该请求会由第一个action进行处理

把上边代码修改顺序:

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<package name="lee" extends="struts-default">

		<!-- 配置name="*Action"的第二个Action -->
		<action name="*Action" class="org.crazyit.app.action.TwoAction">
			<result name="success">/welcome.jsp</result>
		</action>
		<!-- 配置name="*"的第一个Action -->
		<action name="*" class="org.crazyit.app.action.FirstAction">
			<result name="success">/welcome.jsp</result>
		</action>
		<!-- 配置name为LoginAction的第三个Action -->
		<action name="LoginAction" class="org.crazyit.app.action.LoginAction">
			<result name="error">/error.jsp</result>
			<result name="success">/welcome.jsp</result>
		</action>
	</package>
</struts>

如果我们请求/RegistAction,这时候会由第一个请求处理

由此我们可以得到下边的规律

如果系统发来一条请求:abcAction.action

步骤:

第一、首先查找有没有名为abcAction.action的Action,没有的话进行下一步

第二、搜寻name属性值能够匹配abcAction的Action,例如name为 * 或为*Action,但是*Action并不会比*更有限匹配abcAction的请求,而是先找到哪个Action就会由哪个Action来处理

时间: 2024-12-29 12:11:32

【SSH三大框架】Struts2基础第三篇:配置Action以及调用Action的三种方式的相关文章

【SSH三大框架】Hibernate基础第十二篇:load()懒加载分析以及一对一、一对多、多对一、多对多懒加载的分析

一.懒加载的定义: 懒加载:在WEB应用程序中,经常会需要查询数据库,系统的响应速度在很大程度上是与数据库交互的响应.因此,如果能够优化与数据库的交互速度,则能够大大提高WEB应用的响应速度. 例如:当有一个Student类和一个Teacher类.当我们加载一个学生的所有信息,包括:学号,姓名等属性后,此时Student类中的Teacher类型的属性为null,当我们需要知道这个Student对应的Teacher属性的时候,我们才去加载这个Teacher对象. 如果,我们只需要知道学生信息,我们

eclipse中SSH三大框架环境搭建&lt;三&gt;

相关链接: eclipse中SSH三大框架环境搭建<一> eclipse中SSH三大框架环境搭建<二> 引言:通过上两篇文章我们已经可以掌握struts2和spring的环境的搭建以及简单使用,但是在访问数据库层面使用的是传统的JDBC.在我们项目开发中使用JDBC确实是不太理想的,所以今天我给大家来讲解一下目前行业中比较流行的持久层框架——hibernate. 第1步:我们依旧需要引入hibernate的jar包 找到hibernate解压好的文件目录,在该目录下的lib目录下有

SSH三大框架的整合

SSH三个框架的知识点 一.Hibernate框架 1. Hibernate的核心配置文件 1.1 数据库信息.连接池配置 1.2 Hibernate信息 1.3 映射配置 1.4 Hibernate核心配置文件 如果单纯使用Hibernate框架,核心配置文件名称hibernate.cfg.xml并且一定要放在src下面,而hibernate和spring整合的时候,hibernate核心配置文件名称和位置没有固定要求的(因为到时候会有一个参数指定其位置). 2. Hibernate映射配置文

java ssh三大框架搭建整合

今天开个坑java ssh三大框架搭建整合(注解+XML 用全注解不是很好,有点地方需要用模板的时候XML直接可以复制一段) 1 所用框架.技术 编号 工具 版本 说明 Struts 2 2.3.20 Hibernate 4.3.9 实现持久化操作 Spring 4.1.5 Junit 4 单元测试 2.  开发环境 操作系统 Windows 7 开发工具 Eclipse Java EE 数据库 Oracle 11g Web容器 Tomcat 7.0.63 JAVA JDK 1.7 建立proj

MVC模式下基于SSH三大框架的java web项目excel表格的导出(不依赖另外的jar包)

最近工作中碰到了需要将web页面的表格内容导出到excel表格并下载到本地的需求.以下是在利用网上资源.与同事探讨下,完成的代码. 首先我们需要有定义好的实体类.以下是截取了项目中用到的部分代码. 1 public class QyggDocuments implements java.io.Serializable { 2 3 private static final long serialVersionUID = -2543382529255041149L; 4 5 private Stri

SSH三大框架注解整合(一)

1.导入jar包,ssh的jar包一共是38个,此时还需要多加一个包,就是struts的注解插件jar. 2.在web.xml文件中配置struts filter 和spring 的listener.代码如下: <!-- spring 监听器 -->  <context-param>   <param-name>contextConfigLocation</param-name>   <param-value>classpath:applicat

SSH三大框架整合使用的配置文件 注解实现

1 Struts.xml 使用拦截器 <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"    "http://struts.apache.org/dtds/struts-2.1.7.dtd"&g

SSH三大框架注解整合(二)

5.使用spring注解注入service,DAO action: @ParentPackage(value = "struts-default") @Namespace("/") @Controller @Scope("prototype") public class BookAction extends ActionSupport implements ModelDriven<Book>{ //模型驱动 public Book b

个人理解去搭建SSH三大框架spring管理配置文件(初学第一次接触SSH)

<bean id="dataSuorces" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.OracleDirver"/>(oracle数据库) <property name="url"