struts.xml配置文件

来源:互联网 发布:淘宝奇葩评价图片 编辑:程序博客网 时间:2024/06/05 03:22


《精通Struts2:Web2.0开发实战》第3章框架概述,在第2章中,我们大致介绍了基本Web应用所需的元素。本章将对这些知识点进行扩充,以便于从总体上了解Struts 2。本节为大家介绍struts.xml配置文件。

AD:

3.3.3  struts.xml配置文件(4)

7. action

action的配置与注释配置提供的信息很相似,但是XML配置方式具有更丰富的可选配置选项。

注意 当为同一个action同时使用XML配置和注释配置时要十分小心。如果XML配置引用的命名空间和action名字与注释中使用的名字相同,注释配置则优先发挥作用,同时忽略XML配置。这可能会产生一些使人迷惑的错误消息。

XML配置与注释配置一个不同之处在于:使用前者可以将action设置成某个包的默认action。当用户输入的URL没有映射到action时,servlet引擎一般会返回HTTP 404错误。为了避免出现这种输出界面,我们可以使用default-action-ref标签指定某个action为默认的,这样当没有其他映射能够响应URL时,就会执行该默认action。在下述action映射例子中,默认action是testMe:

 

与零配置选项不同,当使用XML配置时,action的命名空间一般是通过它所在包的命名空间来确定。另外还需要其他配置元素来指定action的实现类名称(通过class属性)以及action的名称(通过name属性)。注释没有足够的灵活性为action提供名称。注释另外一个不能设置的属性是method,该属性指定action中用来处理请求逻辑的方法,这样做就可以允许同一action类拥有不同的action配置,因此可以使不同配置调用该类中的不同方法。

我们已经在前文中解释了这些标签,它们的配置方式完全一样。

result标签:在action下,可以有多个result标签,且result标签可以为不同请求配置不同的输出。name属性如果被忽略,则其值为success,如果忽略type属性则它的值为默认结果类型(如果没有修改,那么该默认结果类型应该是个dispatcher)。

interceptor-ref标签:为当前action指定一个拦截器,以代替包里配置的默认拦截器引用。

exception-mapping标签:你可以在action层级提供本地异常映射(它会在全局异常映射之前被处理),本标签的result属性可以是当前action的结果也可以是一个全局结果。

param标签:通过XML配置传送静态值到action。

提示 param标签不仅用在action、interceptor和interceptor-ref标签中,也可以在result-type、default-interceptor-ref、default-action-ref、result和exception-mapping标签的标签体中使用param。在大多数环境下,param标签在action和拦截器中使用时能够发挥更大作用。

8. 通配符配置

在开发应用的过程中,你很有可能会遇到配置中的模式问题,比如当包名和用来调用action的URL匹配(如/app/admin/user/add.action和/app/sales/user/edit.action),再比如当action的名字包含一个领域名字或action类中被调用的方法时(如/app/addUser.action和/app/editUser. action)。

当出现这样的模式匹配问题时,可以采用一种替代处理方法。这种方法无需显式地配置每个action,因为这样对那些大型应用来说太浪费时间,我们可以使用通配符将配置结合到单个action配置里去。可以将星号作为action名字属性的通配符,每个星号可以使用圆括号里的数字(从索引1开始)来单独进行检索。

举个例子,比如说某个Web应用的URL都包含标准的Web上下文,然后紧接一个实体对象名,最后以一个action结尾。这种模式的例子如下:/app/user/add.action、/app/user/edit.action、/app/ project/add.action和/app/project/edit.action等。该标准还规定每个实体对象都有一个action类,然后该action类又有多个方法处理与用户界面之间的交互问题(比如edit()和add()方法等)。

通过通配符的使用,这个模式可以在一个配置中为所有实体对象实现配置:

 

可以使用输入的URL来确定类名以及方法名。当URL是/app/user/add.action时,类名将是com.fdar.apress.s2.userAction,方法名就是add(注意URL中字符大小写与类名一致)。

通配符也可用于扩展result标签。对于/app/user/add.action这个URL,"success"结果将呈现/user/add.jsp页面,"input"结果呈现/user/edit.jsp,"home"呈现/user/home.jsp。

在action的name属性中使用通配符唯一的限制就是不能将两个星号不加分隔地放在一起。如果这样,Struts 2框架将无法知道怎样分隔action的名字。因此,需要使用一个分隔符,比如可以使用"/"(前文例子就是使用该符号)或者使用"_"符号,比如/app/user_edit.action这样的URL。

如果需要一个非分词(untokenized)的URL,我们可以使用{0}这个特殊存取器。

注意 如果你确实需要在action的名字中使用斜线,比如name="*/*",那么就需要将环境属性struts.enable.SlashesInActionNames的值设为true。

原创粉丝点击