Struts, Namespace用法

最近在用SSH框架作一个项目,在使用Struts 的namespace时遇到很多问题,如今就对struts namespace 作一个简单的介绍吧.(本文从项目结构展开叙述)web

(第1次写博客, 写的很差,请见谅,望你们多提宝贵意见~)ajax

 1.  新建一个项目工做叫作eczone,  WebRoot的文件目录结构以下spring

    

  • 其中index.jsp是用来作欢迎界面的(见web.xml的<welcome-file>配置)
  • /WEB-INF/web.xml (这个你们都懂,具体配置请baidu / google)
  • /WEB-INF/pages/failure.jsp (登陆失败的跳转页面)
  • /WEB-INF/pages/success.jsp (登陆成功的跳转页面)

2.  在web.xml中,欢迎页面的配置以下:apache

 <display-name>Eczone</display-name>
  <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

若是,index.jsp在/WebRoot/pages/下面,  上面的配置则须要修改成: /pages/index.jsptomcat

3.  访问方式:  http://localhost:8080/eczone/    app

    其中eczone为项目名称,也就是发布到tomcat的webapp下面的项目名。 (到如今彷佛还没进来主题,别急让咱们继续往下看-----》》)框架

4.   URL的组成结构以下:(如下为最简单的用户登陆后的url)webapp

    

(关于.action,何时须要指定,何时不须要,将在后面解释)jsp

5.   先看Struts.xml的配置测试

 1 <struts>
 2     <constant name="struts.devMode" value="true"></constant>
 3     <!--Spring plus 经过overriding struts objectFactory 来增强框架核心对象的建立 -->
 4     <constant name="struts.objectFactory"
 5         value="org.apache.struts2.spring.StrutsSpringObjectFactory" />
 6     <package name="mypkg2" extends="struts-default">
 7         <action name="userLogin" class="com.dragon.eczone.action.user.UserAction"        method="login">
 8             <result name="success">/pages/success2.jsp</result>
 9             <result name="failure">/pages/failure.jsp</result>
10         </action>
11     </package>
12     <package name="mypkg1" namespace="/" extends="struts-default">
13         <action name="userLogin" class="com.dragon.eczone.action.user.UserAction"        method="login">
14             <result name="success">/pages/success1.jsp</result>
15             <result name="failure">/pages/failure.jsp</result>
16         </action>
17     </package>
18     <package name="user" namespace="/user" extends="struts-default">
19         <action name="userLogin" class="com.dragon.eczone.action.user.UserAction"        method="login">
20             <result name="success">/pages/success.jsp</result>
21             <result name="failure">/pages/failure.jsp</result>
22         </action>
23     </package>
24 </struts>

 说明: 1.  success1.jsp, success2.jsp能够加入到/pages/ 目录下进行测试,到底请求了那个action. (在success.jsp, success1.jsp, success2.jsp上呈现不一样内容来区别)

          2.  Struts在处理请求时,若是请求指定了namespace , struts 会根据指定的namespace去查找action;

                                          若是请求没有指定namespace, Struts则从默认namespace的根目录去查找acton

          3.  在 Struts.xml中namespace="/" 为默认的根目录, 若是不指定namespace的值则也等同于namespace="/".

6. 在看index.jsp的 代码

<s:form name="loginForm" action="userLogin"  method="POST"  namespace="/user">
                <s:textfield name="userName"    label="Login name" />
                <s:password  name="passWord"      label="Password" />
                <s:submit      value="Login"      align="center" />
</s:form>

  说明:1. namespace 若是不指定, 默认为 namespace="/" 更目录

          2.  action为Struts.xml中定义的action的名称.

          3. 有的地方会指定action为如下值:

              》    /user/userLogin 这种方式,页面能够跳转成功, 可是控制台会抛异常或警告 :

    No configuration found for the specified action: '/user/userLogin' in namespace: '/user'. Form action defaulting to 'action' attribute's literal value.

             》   /user/userLogin.action  这种方式页面能跳转成功,出现以下警告:                      

No configuration found for the specified action: '/user/userLogin.action' in namespace: '/user'. Form action defaulting to 'action' attribute's literal value.

     4.  最后来讲.action的事情 , <s:form>使用的是Struts标签,会自动添加.action,  若是是ajax等本身拼装URL的时候,必须加上.action.

 

小结:

 1.   struts.xml中尽可能显示的指明page, 和namespace  (建议将page和namespace设置成同一值)

 2.   若是本身拼装URL,则按照上面第4点中URL的结构拼装。

 3.   若是使用struts 标签方式<s:form>,  则建议显示的指定action, namespace(参照Struts.xml中配置)

相关文章
相关标签/搜索