Struts2框架——struts-xml文件详解

struts.xml 文件

​ struts.xml 是 Struts2 最核心最常用的配置文件,下面详细介绍一下 struts.xml 中的元素和配置

package 元素

​ struts2 的配置文件中引入了面向对象的思想,使用了分包管理。易于管理动作类,便于模块化开发动作类

package 元素的属性

​ name:包的名称,必须写,并且名称唯一

​ extends:继承自哪个基础包,通常继承 struts-default 包

​ struts-default.xml 中定义着 struts-default 包

​ struts-default.xml 是在 struts.xml 之前加载的

​ abstract:把包声明为抽象包,抽象包就是用来被继承的

​ 只要没有 元素的包,就可以声明为抽象包

​ namespace:命名空间。【访问路径 = 命名空间 + 动作名称】

namespace 详解

​ namespace 的默认取值是一个“”,不需要写 /

<package name="p2" extends="struts-default" namespace="/user">
		<action name="add" class="com.web.action.UserAction" method="add">
			<result name="success">/add.jsp</result>
		</action>
		<action name="delete" class="com.web.action.UserAction" method="delete">
			<result name="success">/delete.jsp</result>
		</action>
		<action name="update" class="com.web.action.UserAction" method="update">
			<result name="success">/update.jsp</result>
		</action>
		<action name="find" class="com.web.action.UserAction" method="find">
			<result name="success">/find.jsp</result>
		</action>
	</package>

​ 如果有两层命名空间,查找规则是从后向前查找

action 元素

​ 配置动作,处理请求路径

action 元素的属性

​ name:动作名称,同一个命名空间下要求名称唯一

​ class:动作类全路径名

​ method:动作类中的方法名,默认是 public String execute()

​ 方法的要求:

​ 1.public 的

​ 2.返回值必须是 String

​ 3.没有参数

动作类 Action 的写法

####动作类的第一种写法

​ 直接写一个 Action 类,不需要继承任何类,然后在 struts.xml 中配置

Action 类:

package com.web.action;

public class HelloAction {
	public String sayHello() {
		System.out.println("Success");
		return "success";
	}
}

struts.xml:

<package name="p1" extends="struts-default" namespace="/a">
		<action name="hello" class="com.web.action.HelloAction" method="sayHello">
			<result name="success">/success.jsp</result>
		</action>
</package>

####动作类的第二种写法

​ 写一个实现 Action 接口的动作类,然后实现 execute 方法

Action 类:

package com.web.action;

import com.opensymphony.xwork2.Action;

public class demoAction implements Action {
    @override
    public String execute() throws Exception {
        return "success";
    }
}

struts.xml:

<package name="p1" extends="struts-default" namespace="/a">
		<action name="demo" class="com.web.action.demoAction">
			<result name="success">/success.jsp</result>
		</action>
</package>

​ Action 接口中有一些静态常量:SUCCESS,NONE,ERROR,INPUT,LOGIN,可以直接在返回值中使用

动作类的第三种写法(推荐)

​ 写一个继承 ActionSupport 类的 Action 类

​ ActionSupport 是实现 Action 接口定的类

Action:

package com.web.action;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction3 extends ActionSupport {
	public String login(){
		return SUCCESS;
	}
}

struts.xml:


<package name="p1" extends="struts-default" namespace="/a">
		<action name="login3" class="com.web.action.LoginAction3" method="login">
			<result name="success">/success.jsp</result>
		</action>
</package>

默认动作类

​ struts-default.xml 中定义了默认动作类和方法

​ 默认的动作类就是 com.opensymphony.xwork2.ActionSupport 这个类

struts.xml

<default-class-ref class="com.web.action.HelloAction"></default-class-ref>
		<action name="hello" class="com.web.action.HelloAction" method="sayHello">
			<result name="success">/success.jsp</result>
		<!-- 没有配置 method 的 action,默认访问 execute 方法 -->
		</action>

result 元素

​ 为动作指定结果试图

result 元素的属性

​ name:逻辑视图的名称,对应着动作方法的返回值,默认值是 success

​ type:结果类型,指的就是用什么方式转到定义的页面,默认是 dispather 转发

​ dispatcher:使用请求转发,转向一个页面

​ redirect:使用重定向,转向一个页面

​ chain:转发到另一个相同或不同命名空间的动作

​ redirectAction:重定向到相同或不同命名空间的动作

result 元素中的 param 子元素

​ 在转发或者重定向到不同包下的动作时,都要用到 result 元素的子元素 param

​ param 元素的作用:依赖注入

​ 通过 struts-default.xml 中的 resultTypes 元素中配置可以看出,每个结果试图都是靠一个类来实现的

​ param 元素就是将配置参数注入到该类中

​ 调用的事i对应类的 setter 方法进行注入

<package name="p5" extends="struts-default" namespace="/demo">
		<action name="action1" class="com.web.action.Demo1Action">
			<!-- result 的 name 可以不写 -->
			<result>/success.jsp</result>
		</action>
		<!-- 转发到同一个包下的 action -->
		<action name="action3" class="com.web.action.ChainAction1">
			<result name="success" type="chain">action1</result>
		</action>
		<action name="action4" class="com.web.action.ChainAction1"> 
			<result name="success" type="redirectAction">action1</result>
		</action>
		<action name="action5"> 
			<result name="success" type="chain">
				<!-- 依赖注入 -->
				<param name="namespace">/a</param>
				<param name="actionName">hello</param> 
			</result>
		</action> 
		<action name="action6"> 
			<result name="success" type="redirectAction">
 				<!-- 依赖注入 -->
				<param name="namespace">/a</param>
				<param name="actionName">hello</param> 
			</result> 
		</action> 
	</package>
发布了38 篇原创文章 · 获赞 44 · 访问量 3429

猜你喜欢

转载自blog.csdn.net/scfor333/article/details/103219106
今日推荐