首页 > 学院 > 开发设计 > 正文

struts2核心配置文件

2019-11-06 08:22:07
字体:
来源:转载
供稿:网友

        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>


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表