struts2核心配置文件

        struts2的核心配置文件为struts.xml,一般放在src目录下。struts2配置使用包来管理Action。包的作用与java中包的作用相似,用于管理一组业务功能相关的Action。在实际应用中,应将一组业务功能相关的Action放在同一个包下。

注意:struts.xml中的包与Action类所在的包无关。

一<package/>标签

(1)name属性

        配置包时必须指定name属性,该属性可以任意取值,但是必须唯一。其与java的类包间无对应关系。若其它包要继承该包,则必须通过该属性进行引用。

(2)namespace属性

        包的namespace属性用于定义该包的命名空间。命名空间是访问该包下Action的路径的一部门。此属性是必须的,且不能为空。但命名空间可以为“/”。

(3)extends属性

        通常情况下,包需要继承struts-default包。因为struts2的11个返回类型,35个拦截器,默认拦截器栈等struts2的主要功能,都定义在这个包中,继承了这个包,也就拥有了这些功能。struts-default包定义在struts-default.xml中。

(4)abstract属性

        包还可以通过abstract="true"定义为抽象包。抽象包中是不能包含Action的。抽象包一般就是用于被继承的。struts-default包即为抽象包。

二<action/>标签

(1)name属性

        在struts2中,访问struts2中的action的URL路径由两部分组成:包的命名空间+action的name属性值。

(2)method属性

        Action标签有一个属性method,该属性用于指定所要执行的Action类的哪个Action方法。若没有指定该属性,则默认值为"execute",即执行指定Action类的execute方法。

(3)class属性

        class属性用于指定该Action所要执行的Action类。其有三种写法:

                A.直接写要执行的类的全限定类名。

                B.在SSH中,Action交由Spring容器管理,此时class属性要设置为一个伪类名。

                C.class属性缺省。对于class属性缺省情况是指,若用户提交某个请求后,不需要经过某个Action类的处理,而是直接要转向某个视图页面,如简单的页面间的超链接,则可以采用缺省的方式。因为在class缺省的情况下,会默认执行ActionSupport类。为什么会默认执行这个类呢?是因为在Struts-default包中通过<default-class-ref/>指定了默认执行的类。该类有个有个execute()方法,其返回值为常量SUCCESS,即字符串"success"。

三<result/>标签

(1)name属性

        result标签用于指定Action执行完毕后所要转向的视图资源,其name属性指定该视图的名称,如果name属性缺省,默认值为字符串常量"success"。

(2)type属性

        struts2中共提供了11中视图转向类型,类型由result标签的type属性指定,type属性的值在struts-default.xml中可以查看到。需要注意到,在dispatcher后设置的default为true。即默认为dispatcher。


        注意:对于请求转发的页面,可以是web-inf中的页面,而重定向的页面,是不能为web-inf中的页面的,因为重定义相当于用户再次发出一次请求,而用户是不能直接访问web-inf中的资源的。

        下面重点介绍以下四种转向方式。      

 A.dispatcher转发

        该转向类型用于完成请求转发的功能,即为服务器内跳转,请求转发是可以将请求参数传递给要转发的下一级页面的。dispatcher为默认的转向类型。      

代码示例

请求页面

<body>	
	<form action="login" method="post">
		name:<input type="text" name="name"/><br>
		age:<input type="text" name="age"/><br>
		<input type="submit" value="提交"/><br>		
	</form>
</body>
Action

package cn.ccnu.actions;

public class LoginAction {
	private String name;
	private int age;

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	public String execute(){
		return "success";
	}
}
struts.xml

<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="login" class="cn.ccnu.actions.LoginAction">
        	<result name="success" type="dispatcher">/welcome.jsp</result>
        </action>
    </package>
</struts>
结果页面

<body>	
	name = ${name } <br>
	age = ${age }
</body>
执行结果

B.redirect跳转

        该转向类型用于完成请求重定向的功能。因此,redirect是无法将Action中属性值传递给要转向的下一个页面的。

例如,如果将上面示例中type值改为redirect,则发现其结果为:


        说明redirect无法将Action中属性值传递给要转向的下一个页面得。

        要想实现参数值可以转向下一个页面可以使用<param/>方法。

将struts.xml该成如下

<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="login" class="cn.ccnu.actions.LoginAction">
        	<result name="success" type="redirect">
        		<param name="location">/welcome.jsp</param>
        		<param name="name">${name }</param>
        		<param name="age">${age }</param>
        	</result>
        </action>
    </package>
</struts>
结果页面改为:

<body>	
	uname = ${param.name } <br>
	age = ${param.age }
</body>
还可以charset设置字符集:

<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="login" class="cn.ccnu.actions.LoginAction">
        	<result name="success" type="redirect">
        		<param name="location">/welcome.jsp</param>
        		<param name="name">${name }</param>
        		<param name="age">${age }</param>
        		<param name="charset">utf-8</param>
        	</result>
        </action>
    </package>
</struts>
C.redirectAction跳转

        该转向类型专门用于重定向到Action。当然,Action中的属性值是无法传递到下一个Action中的。不过请注意,redirect在不使用<param/>方式时,也是可以重定向到Action的。

核心代码

struts.xml文件

<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="login" class="cn.ccnu.actions.LoginAction">
        	<result name="success" type="redirectAction">second</result>
        </action>
        
        <action name="second" class="cn.ccnu.actions.SecondAction">
        	<result name="success">/welcomeSecond.jsp</result>
        </action>
    </package>
</struts>
对于重定向到Action,还可以使用<param/>来设定转向的Action,并且将参数值传到下一个Action。

核心代码:

struts.xml文件

<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="login" class="cn.ccnu.actions.LoginAction">
        	<result name="success" type="redirectAction">
        		<param name="actionName">second</param>
        		<param name="username">${username}</param>
        		<param name="password">${password}</param>
        	</result>
        </action>
        
        <action name="second" class="cn.ccnu.actions.SecondAction">
        	<result name="success">/welcomeSecond.jsp</result>
        </action>
    </package>
</struts>

Dchain跳转

用于将请求转发到Action。Request中的参数可以传递到下一个Action中。

核心代码:

struts.xml文件

<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="login" class="cn.ccnu.actions.LoginAction">
        	<result name="success" type="chain">second</result>
        </action>
        
        <action name="second" class="cn.ccnu.actions.SecondAction">
        	<result name="success">/welcomeSecond.jsp</result>
        </action>
    </package>
</struts>

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值