Struts2-配置文件

来源:互联网 发布:linux 启动网络服务 编辑:程序博客网 时间:2024/06/07 05:54

struts.xml配置文件

struts.xml文件通常放在项目的WEB-INF/classes目录下,在该目录下的struts.xml文件可以被Strtus2框架自动加载。在Eclipse中,由于编译时,Ecplise会自动将src路径下的strtus.xml文件编译后放到WEB-INF/classes路径下,所以,直接将其放到src路径下即可。

在struts.xml文件中,struts元素是根元素,所有其他元素都放在struts中。struts的子元素有constant,include,package。(把鼠标放到struts标签上,按F2就会显示出该标签的包含的元素,和元素的使用顺序。以逗号分隔体现了先后顺序,以|分隔,是或者的意思.)

constant

constant用来配置常量,这些常量的默认配置和使用用法在struts2-core-2.3.15.3.jar的org.apache.struts2包的default.properties中都有说明。比如

### Used by the DefaultActionMapper### You may provide a comma separated list, e.g. struts.action.extension=action,jnlp,do### The blank extension allows you to match directory listings as well as pure action names### without interfering with static resources, which can be specified as an empty string### prior to a comma e.g. struts.action.extension=, or struts.action.extension=x,y,z,,struts.action.extension=action,,

默认以.action结尾扩展名 和 不写扩展名 都会分发给 Action。

可以在default.properties中更改配置信息,但一般都不这样做。可以在struts.xml中配置,因为struts.xml是在default.properties之后被读取的,struts.xml中配置的信息会覆盖前者配置的信息。

常用的配置有

<!--提供详细报错页面,修改struts.xml后不需要重启服务器 --><constant name="struts.devMode" value="true" /> <!--标签主题,简单风格 --><constant name="struts.ui.theme" value="simple"></constant>

package

用来管理action和拦截器。

package的属性

  • name:必填属性,指定该包的名字,此名字是该包被其他包引用的key,必须是唯一的
  • namespace:可选属性,该属性定义该包的命名空间(与action标签的name属性合并确定了访问action的路径)默认值是“”
  • extends:可选属性,它指定该包继承自其他包。继承其他包,可以继承其他包中的Action定义,拦截器定义等。(该属性值通常都设置为struts-default,这样该包中的Action就具有了Strtus2框架默认的拦截器等功能,其中对struts-default包的具体定义在struts2-core-2.3.15.3.jar中的struts-default.xml文件中)
  • abstract:可选属性,指定该包是否是一个抽象包,抽象包中不能包含Action定义。显示指定一个包是抽象包,可以为该package元素增加abstract=”true”属性

package的子元素: interceptors, default-interceptor-ref, global-results, action,default-action-ref

interceptors

子元素为(interceptor | interceptor-stack)

<interceptors>    <interceptor name="loginInterceptor"                class="com.itheima.crm.web.interceptor.LoginInterceptor"></interceptor>    <interceptor-stack name="loginStack">        <interceptor-ref name="defaultStack"></interceptor-ref>        <interceptor-ref name="loginInterceptor">            <param name="excludeMethods">login</param><!--设置login方法不拦截-->        </interceptor-ref>    </interceptor-stack></interceptors>

interceptor:定义拦截器。属性为name:指定拦截器的名称,class属性指定拦截器的实现类。interceptor的子元素为param,param的属性为name。有时在定义拦截器时需要传入参数,这时可以用param标签。其中name属性指定参数的名称,paramValue表示参数的值。

defaultStack对这个拦截器栈的定义在struts-default.xml中

<interceptor name="intercepterName" class="interceptorClass">    <param name="paramName">paramValue</param></interceptor>

interceptor-stack:在开发中,经常需要在Action执行前同时执行多个拦截动作,这时,可以把多个拦截器组成一个拦截器栈。在使用时,可以将栈内的多个拦截器当成一个整体来引用。属性为name,来指定栈名。子元素为interceptor-ref用来引用其他拦截器或拦截器栈,属性为name。子元素为param可以给拦截器传递参数。

default-action-ref

配置了这个,当访问的路径,其它的action处理不了时,就会执行name指定的名称的action

<default-action-ref name="action的名称" />

default-class-ref

在action配置时,如果class不写。默认情况下是 com.opensymphony.xwork2.ActionSupport。如果设置了,那么在当前包下,默认处理action请的的处理类就为class指定的类.

<default-class-ref class="cn.itcast.action.DefaultAction"/>

default-interceptor-ref

如果想对包下的Action使用相同的拦截器或拦截器栈,则需要为该包中的每个Action都重复指定同一个拦截器,这样写过于繁琐。可以使用默认拦截器。每一个包下只能定义一个默认拦截器,如果需要多个拦截器作为默认拦截器,则可以将这些拦截器定义为一个拦截器栈,再将这个拦截器栈作为默认拦截器即可。

<default-interceptor-ref name="loginStack"></default-interceptor-ref>

global-results

global-results:当多个Action使用同一个result时,当前包中的action都可以用,这个时候就可以使用global-results标签配置全局result;当Action返回的字符串没有相应的result,Struts2会在package中查找global-result

<global-results>    <result name="login">/WEB-INF/pages/login.jsp</result></global-results>

action

将一个请求的URL映射到一个action类

  • name:必填属性,标识Action,指定了Action所处理的请求的URL
  • class:可选属性,指定Action对应的实现类(默认值是ActionSupport)
  • method:可选属性,指定请求Action时调用的方法(默认值是execute)
  • converter:可选属性,指定类型转换器的类
<package name="sta" namespace="/" extends="common">    <action name="staffAction_*" class="com.itheima.crm.staff.web.action.StaffAction" method="{1}">        <result name="success" type="redirectAction">staffAction_home</result>        <result name="home">/WEB-INF/pages/frame.jsp</result>        <result name="findAll">/WEB-INF/pages/staff/listStaff.jsp</result>    </action></package>

action的子元素

result:配置逻辑视图和物理视图之间的映射(可以映射到JSP页面或action)。name属性,指定逻辑视图的名称,默认值为success(与action中的方法的返回值做对比,确定跳转路径)。type:可选属性,指定返回的视图资源的类型。默认值为dispatcher。

result指定实际资源位置时,可以使用绝对路径,可可以使用相对路径。绝对路径以斜杠开头,相当于当前Web应用程序的上下文路径;相对路径不以斜杠开头,相当于当前执行的action的路径

预定义的结果类型(在struts-default.xml文件中有)

  • dispatcher:转发,一般用于从action跳转到页面
  • redirect:重定向,一般用于从action跳转到页面
  • redirectAction:重定向,从action跳转到另一个action
  • chain:转发,一般用于从action跳转到另一个action
  • stream:服务器返回的是一个流,用户下载
  • freemarker:用来整合FreeMarker模板结果类型

interceptor-ref:引用action需要的拦截器或拦截器栈

使用通配符

在使用method属性时,由于在Action类中有多个业务逻辑处理方法,在配置Action时,就需要使用多个action元素。

<action name="userAction_*" class="cn.eaglezsx.action.UserAction" method="{1}">  <result>/index.jsp</result></action>

当客户端发送userAction_login.action这样的请求是,action元素的name属性就被设置成userAction_login,method属性就被设置成login。

其中method属性值中的数字1表示匹配第一个*。如果定义Action名称为*_*时,class属性为action.{1},那么method属性值为{2}。如果定义Action名称为*时,表示可以匹配任意的Action。

对result元素也可以采用通配符配置,具体代码如下

<result>/{1}.jsp</result>

include

当在struts.xml配置了很多action和拦截器后会很乱,把这些action写到多个xml文件中,然后在struts.xml中用include引用一下。

<include file="struts/struts-staff.xml"></include>

在struts-staff.xml中正常写,只是需要继承一下struts.xml中的package

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"    "http://struts.apache.org/dtds/struts-2.3.dtd"><struts>    <!-- 2 员工的配置 -->    <package name="sta" namespace="/" extends="common">        <action name="staffAction_*" class="com.itheima.crm.staff.web.action.StaffAction" method="{1}">            <!-- 1 登录成功 -->            <result name="success" type="redirectAction">staffAction_home</result>            <!-- 2 没有登录成,需要登录 -->            <!-- <result name="login">/WEB-INF/pages/login.jsp</result> -->            <!-- 3 首页 -->            <result name="home">/WEB-INF/pages/frame.jsp</result>            <!-- 4查询所有 -->            <result name="findAll">/WEB-INF/pages/staff/listStaff.jsp</result>        </action>    </package></struts>
原创粉丝点击