struts.xml配置详解

来源:互联网 发布:淘宝打假赚钱 编辑:程序博客网 时间:2024/05/21 22:57

一:<constant>

<constant>标签主要定义Struts2的一些常量。
如:
<constant name="struts.action.extension" value="do" /> 
上述定义表示以.do结尾的请求,ActionMapper决定它是一个action请求
当然,struts的常量也可以定义在struts.properties配置文件中,形如:

#这个是注释#修改struts2的action判定标准struts.action.extension=do
当然struts.properties配置文件应和struts.xml一样,位于src目录下。
二:<package>

在Struts2框架中是通过包<package>来管理action、result、interceptor、interceptor-stack等配置信息的,可以把<package>理解为一个文件夹。
<package>属性如下:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>属性            是否必需                        描述name            是                              包名,作为其它包应用本包的标记extends否设置本包继承其它包namespace否设置包的命名空间abstact否设置为抽象包>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

name属性详解:

name属性被用作包名。作用在于区分不同的包。一个<package>必须有name属性,并且其name必须为唯一值。

extends属性详解:

1.通常配置struts.xml的时候,都继承一个名为“struts-default.xml”的包,这是struts2中内置的包。
2.如果需要继承其他包,由于包信息的获取是按照配置文件的先后顺序进行的,所以父包必须在子包之前被定义。
3.当一个包通过配置extends属性继承了另一个包的时候,该包将会继承父包中所有的配置,包括action、result、interceptor等。

namespace属性详解:

1.命名空间的作用:namespace主要是针对大型项目中Action的管理,更重要的是解决Action重名问题,因为不在同一个命名空间的Action可以使用相同的Action名的。
2.命名空间体现:使用命名空间后,访问的url必须包含命名空间。
例如:<package> 的namespace=“/student” <action> 的name="text"
那么url地址就应为:ip:端口/项目名/student/text.action
3.命名空间可以为一级目录形式,也可以为多级目录形式。
例如:<package> 的namespace=“/student/a/” <action> 的name="text"
那么url地址就应为:ip:端口/项目名/student/a/text.action是可以运行的
4:默认命名空间:Struts2中如果没有为某个包指定命名空间,该包使用默认的命名空间,默认的命名空间总是""。
5:指定根命名空间:当设置了命名空间为“/”,即指定了包的命名空间为根命名空间时,此时所有根路径下的Action请求都会去这个包中查找对应的资源信息。
url地址:ip:端口/项目名/*.action 都是可以运行
<package>使用范例:
<package name="student" namespace="/" extends="struts-default"></package>

三:<action>

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>属性名称是否必须功能描述name是请求的Action名称class否Action处理类对应具体路径method否指定Action中的方法名converter否指定Action使用的类型转换器>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

name属性详解:

name属性被用作<action>名称。作用在于区分不同的<action>。<action>必须定义name属性,并且在一个<package>内。

class属性详解:

class属性表示调用这个<action>时,程序需要执行的action类。该属性值由包名加类名构成。

method属性详解:

method属性表示在调用action类时,需要调用的方法。该属性值为方法名。当没有设置该属性时,默认调用execute方法。

<action>使用范例:

<action name="test" class="com.Demo.StrutsDemo" method="execute"></action>

因为method属性默认调用execute方法。所以上述事例中,method属性可以省略。

<action name="test" class="com.Demo.StrutsDemo" ></action>

四:<result>

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>属性名称是否必须功能描述name否对应Action返回值,默认为successtype否返回结果类型,默认为dispatcher>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

name属性详解:

<result>标签的name属性表示action类返回的值。默认为success
name属性的值可以是自定义的,也可以选取系统默认的值

当使用系统默认的值时,action类中实现validate方法。例如:
struts.xml
<package name="user" namespace="/" extends="struts-default"><!-- 解决struts2.5 通配符调用无效的问题 --><global-allowed-methods>regex:.*</global-allowed-methods><action name="*_*" class="com.lhb.StrutsText.{1}" method="{2}"><result name="success">/success.jsp</result><result name="input">/user_login.jsp</result></action></package>

action类:
public String check() {if (!"admin".equals(user.getUseName())) {this.addFieldError("userName", "用户名不正确!");return INPUT;} else if (!"123".equals(user.getPassword())) {this.addFieldError("password", "用户名不正确!");return INPUT;} else {return SUCCESS;}}
上述代码等价于
public String check() {return SUCCESS;}@Overridepublic void validate() {if(!"admin".equals(user.getUseName())){this.addFieldError("userName", "用户名不正确!");}else if(!"123".equals(user.getPassword())){this.addFieldError("passWord","密码不正确!");}}

当使用系统默认值时,调用validate方法,系统会判定addFieldError方法是否运行,如果运行,直接返回INPUT;

type属性详解:


<result>使用范例:

<result name="success">/test.jsp</result>
因为name属性默认为success,所以上述事例中,name属性可以省略。
<result>/test.jsp</result>

五:<default-action-ref>

如果在请求一个没有定义过的Action资源时,系统就会抛出404错误。这种错误不可避免,但这样的页面并不友好。我们可以使用<default-action-ref>来指定一个默认的Action,如果系统没有找到指定的Action,就会指定来调用这个默认的 Action。

代码如下:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC      "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"      "http://struts.apache.org/dtds/struts-2.0.dtd">  <struts>      <package name="demo" extends="struts-default">         <default-action-ref name="acctionError"></default-action-ref>          <action name="acctionError">              <result>/actionError.jsp</result>          </action>      </package>  </struts>  

六:<default-class-ref>

在配置Action的时候,如果没有为某个Action指定具体的class值时,系统将自动引用<default-class- ref>标签中所指定的类。在Struts2框架中,系统默认的class为ActionSupport,该配置在xwork的核心包下的 xwork-default.xml文件中找到。有特殊需要时,可以手动指定默认的class。

<?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE struts PUBLIC      "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"      "http://struts.apache.org/dtds/struts-2.0.dtd">  <struts>      <package name="text" extends="struts-default">          <!-- 为Test指定默认class -->          <default-class-ref class="default.action.DefaultClassRef"/>          <action name="test">              <result>/index.jsp</result>          </action>      </package>  </struts>  

七:<include>

利用include标签,可以将一个struts.xml配置文件分割成多个配置文件,然后在struts.xml中使用<include>标签引入其他配置文件。
struts_user.xml:
<!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"    "http://struts.apache.org/dtds/struts-2.5.dtd"><struts><package name="user" namespace="/" extends="struts-default"><action name="test" class="com.Demo.StrutsDemo"><result>/test.jsp</result></action></package></strut
struts.xml:
<?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE struts PUBLIC      "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"      "http://struts.apache.org/dtds/struts-2.0.dtd">  <struts>      <include file="struts_user.xml"/>  </struts>  








0 0
原创粉丝点击