zoukankan      html  css  js  c++  java
  • Struts, Namespace用法

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

    (第1次写博客, 写的不好,请见谅,望大家多提宝贵意见~)

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

        

    • 其中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中,欢迎页面的配置如下:

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

    如果,index.jsp在/WebRoot/pages/下面,  上面的配置则需要修改为: /pages/index.jsp

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

        其中eczone为项目名称,也就是发布到tomcat的webapp下面的项目名。 (到现在似乎还没进来主题,别急让我们继续往下看-----》》)

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

        

    (关于.action,什么时候需要指定,什么时候不需要,将在后面解释)

    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中配置)

  • 相关阅读:
    BlogEngine.Net
    加速Web开发的9款知名HTML5框架
    个人论坛博客的代码
    Android客户端调用Asp.net的WebService
    前端总结数据结构与算法基础
    node知识点及第三方模块
    消息轮播
    el-date-picker 组件时间格式化方式
    Vue+Element前端导入导出Excel
    vue单元测试
  • 原文地址:https://www.cnblogs.com/dragonflyyi/p/3229662.html
Copyright © 2011-2022 走看看