Struts配置文件阐释

1. Struts的配置节点之namespace

下面的是没有添加命名空间:
struts.xml:
<
package name="default" extends="struts-default">
login.jsp:
<h2><s:form action="LoginABC">
请求路径:
http://localhost:8080/hw/LoginABC

下面的是有添加命名空间:
struts.xml:

<
package name="default" namespace="/myUserInfo" extends="struts-default">
login.jsp:
<h2><s:form action="myUserInfo/LoginABC">
请求路径:
http://localhost:8080/hw/myUserInfo/LoginABC

2. 关于拦截器

拦截器做的事情是在Action执行之前和执行之后所做的事情,拦截器顾名思义就是会拦截一部分的action。在网上看到有一幅图能够很好的说明这个意思。
image

拦截器的定义是有几个级别的,看一下struts2中的源文件中定义的package中对于Interceptor的定义:

<package name="struts-default" abstract="true">
        <interceptors>
            <interceptor name="workflow" class="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"/>
… …
<interceptor-stack name="defaultStack"> … … <interceptor-ref name="workflow"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="defaultStack"/> </package>

拦截器需要继承AbstractInterceptor ,并实现里面的init(初始化),Intercept(拦截逻辑,结尾处通过的invoke方法用于讲控制权转交给下个拦截器还是action.execute),destroy(Action.execute)执行后执行的动作。

单独的拦截器需要和一个拦截器堆栈(interceptor-stack)关联才能真正被使用上。通过xml文件可以知道intercept-stack就是拦截器的一个组合,同时指定了拦截器的参数。作为“struts-default”的package,它使用的是defaultStack拦截器堆栈。我们一般在配置struts.xml的时候一般直接

<package name="default" namespace="/myUserInfo" extends="struts-default">
其实就是直接使用了defaultStack拦截器堆栈。

关于拦截器,有篇博客写的比较清楚:http://www.cnblogs.com/kay/archive/2009/09/15/1566805.html,可以参看。

3. 关于方法名称配置

首先我要说明一点:VS的功能怎么这么强大!打开Struts.xml竟然能够智能感应节点属性。估计是自动和struts的schema关联上了。MyEclips的功能相对比较弱爆。

<action name="LoginNone" class="mySpace.LoginAction" method="myNoneExecute">
    <result name="success">/helloWorld.jsp</result>
    <result name="error">/Error.jsp</result>
    <result name="none">/none.jsp</result>
</action>

如此配置即可实现Action和某个方法绑定.这样可以避免大量的之定义了execute方法的Action类.


   

原文地址:https://www.cnblogs.com/xiashiwendao/p/3100423.html