J2EE框架——struts.xml配置

来源:互联网 发布:java输出语句换行符 编辑:程序博客网 时间:2024/06/06 15:55

Struts2绝大多数的配置都是在struts.xml中完成的。小伙伴们在学习中会有遇到xml不熟悉导致配置文件不知从何下手的感觉,小可在此给大家详述struts.xml的配置方法

一.Action配置

Action是struts2的工作单元。配置一个基本的Action需要两个信息:Action名字和对应的Action类。属性”method”用来告诉Struts2调用Action的哪个方法。在Action处理之后需要展示处理结构给用户,所以还需要把Action和Result映射在一起:

/**action配置*/<action name="helloWorld" class="example.HelloWorld" method="doWork">    <result name="failure" path="Error.jsp" />    <result name="ok" path="HelloWorld.jsp" /></action>

几种默认配置:
(1)没有class定义,默认使用com.opensymphony.xwork.ActionSupport类,有一个execute()方法,返回”success”
(2)method为空,默认调用Action类的execute()方法。如果没有该方法则抛出异常
(3)没有第一个result的属性,默认为”success”

二.Result配置

Struts2定义一些默认Result:error、input、login、none、success
小伙伴们也可以自定义结果,以“名字 - 值”的形式映射到结果类型。Result嵌套在标签里,如果location参数是唯一的参数,可以:

/**添加参数*/<action name="bar" class="myPackage.barAction">    <result name="success" type="dispatcher">       <param name="location">foo.jsp</param>    </result></action>

如果没有param参数,可以:

<action name="bar" class="myPackage.barAction">    <result name="success" type="dispatcher">foo.jsp </result></action>

如果没有type属性,默认为dispatcher类型

使用全局Result映射是减少struts.xml配置内容的另一种好方法。在Action中使用一组通用的Result,可以把这些通用的Result的定义集中起来,而不需要每个Action重复定义:

/**全局result配置*/<package name="default">....    <global-results>         <result name="login" type="dispatcher">        <param name="location">login.jsp</param>        </result>        </global-results>    <action name="foo" class="mypackage.fooAction">        <result name="success" type="dispatcher">bar.jsp</result>    </action>    <action name="submitForm" class="mypackage.submitFormAction">        <result name="success" type="dispatcher">submitSuccess.jsp</result>    </action>    ...</package>

三.拦截器(Interceptor)配置

Interceptor是能在一个Action执行的前后执行的代码,功能有安全检查,跟踪日志等,也可以把Interceptor连接成栈,但必须先定义好:

/**Interceptor配置*/<interceptors>    <interceptor name="security" class="com.mycompany.security.SecurityInterceptor" />    <interceptor-stack name="defaultComponnentStack">       <interceptor-ref name="component" />       <interceptor-ref name="defaultStack" />    </interceptor-stack></interceptors>/**action中这样使用*/<action name="VelocityCounter" class="com.opensymphony.webwork.example.counter.SimpleCounter">    <result name="success">...</result>    <interceptor-ref name="defaultComponentStack" />    /**引用名既可以是拦截器名也可以是栈名,没区别*/</action>

四.包配置

包配置就是把actions,results,types和interceptors打包到一个逻辑单元中,更像是一个对象。name是必填属性,extends和abstract可选

/**扩展default包*/<package name="example" namespace="/example" extends="struts-default">    <action name="HelloWorld" class="example.HelloWorld">        <result>/example/HelloWorld.jsp</result>    </action>    <action name="Login" method="login" class="example.Login">        <result name="input">/example/Login.jsp</result>        <result type="redirect-action">Menu</result>    </action>    <action name="*" class="example.ExampleSupport">        <result>/example/blank.jsp</result>    </action></package>

五.命名空间配置
命名空间允许把Action配置分成不同的命名空间,可以是功能不同Action中使用相同的名字。Struts2中以”/”命名的根命名空间,是请求直接来自应用程序根路径的时候的命名空间,默认寻找:

/**命名空间为空*/<package name=""default>    <action name="foo" class="mypackage.simpleAction">        <result name="success" type="dispatcher">greeting.jsp</result>    </action>    <action name="bar" class="mypackage.simpleAction">        <result name="success" type="dispatcher">bar1.jsp</result>    </action></package>
/**命名空间为"/"*/<package name="mypackage1" namespace="/">    <action name="mybackage1" class="mypackage.simpleAction">    <result name="success" type="dispatcher">moo.jsp</result>    </action></package>
`/**命名空间为"barspace"*/<package name="mypackage2" namespace="/barspace">    <action name="bar" class="mypackage.simpleAction">        <result name="success" type="dispatcher">bar2.jsp</result>    </action></package>

流程:
(1)如果请求为/barspace/bar.action,系统首先查找/barspace命名空间,如果找到bar Action便执行,如果没有继续到默认命名空间查找
(2)请求为barspace/foo.action,系统会在/barspace中找foo这个action,如果找不到,则到默认中查找,例子中会在默认中找到foo
(3)请求为/moo.action,系统在根空间找到moo
(4)请求为/foo.action,先找根再找默认

六.struts.xml中定义JavaBean

定义JavaBean:

<struts>    <bean type="com.opensymphony.xwork2.ObjectFactory"        name="myfactory"        class="com.company.myapp.MyObjectFactory" /></struts>

这里使用反转控制概念Ioc,也称为依赖注入。反转控制用来处理对象间的依赖关系而出现的。但一般使用Spring作为IoC容器

七.使用通配符

在配置Action Mapping数量很多的时候,通配符是一个好方法,将一些相似的Mapping绑在一起,路径用*来代替变化的部分,而Action的处理类和Jsp中{1}刚好是代替这个变量

<action name="/edit*" class="example.Edit{1}Action">    <result name="failure" path="/mainMenu.jsp" />    <result name="ok" path="/\{1\}.jsp" /></action>

以上代码URI:editSubscription、editRegistration都将复合条件匹配到这个Action配置,被代替的是Action映射中的变量属性和Action结果替换{1}。比如/editSubscription将对应的Action处理类是example.EditSubscriptionAction,result的jsp是Subscription.jsp

0 0
原创粉丝点击