最近在用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的配置

 <struts>
<constant name="struts.devMode" value="true"></constant>
<!--Spring plus 通过overriding struts objectFactory 来加强框架核心对象的创建 -->
<constant name="struts.objectFactory"
value="org.apache.struts2.spring.StrutsSpringObjectFactory" />
<package name="mypkg2" extends="struts-default">
<action name="userLogin" class="com.dragon.eczone.action.user.UserAction" method="login">
<result name="success">/pages/success2.jsp</result>
<result name="failure">/pages/failure.jsp</result>
</action>
</package>
<package name="mypkg1" namespace="/" extends="struts-default">
<action name="userLogin" class="com.dragon.eczone.action.user.UserAction" method="login">
<result name="success">/pages/success1.jsp</result>
<result name="failure">/pages/failure.jsp</result>
</action>
</package>
<package name="user" namespace="/user" extends="struts-default">
<action name="userLogin" class="com.dragon.eczone.action.user.UserAction" method="login">
<result name="success">/pages/success.jsp</result>
<result name="failure">/pages/failure.jsp</result>
</action>
</package>
</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中配置)

Struts, Namespace用法的更多相关文章

  1. C++中的namespace用法

    关键字namespace定义了一个名字空间,里面的变量和函数,声明在此名字空间外使用须在前面加名字空间名称.例如: #include<iostream.h>namespace my{ in ...

  2. php namespace用法

    其实纠结了很久要不要使用这个东西,但是看看了最新的框架laravel,cakephp等等的新版本都使用上了,所以还是随大流顺便学习下. namespace和c++里面的概念差不多,只是用法有点差别. ...

  3. namespace用法

    1.在WCF.Controller中定义了一个UserModel,标记为① 2.在WCF.Controller.Model中定义了一个UserModel(同上,namespace不同),标记为② 3. ...

  4. mybatis配置文件namespace用法总结

    本文为博主原创,未经允许不得转载: 由于在应用过程中,发现namespace在配置文件中的重要性,以及配置的影响,在网上看了很多博客,发现很多人对namespace存在误解, 所以总结一下namesp ...

  5. Struts2-2.了解struts.xml的查找顺序

    默认namespace的package <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE s ...

  6. k8s中新建一个namespace和harborsecret的yaml文件

    注意哟, 不同的harborsecret,在不同的namespace中,是不共用的. 也就是说,如果在default名字空间中,创建了一个docker login secret, 在其它名字空间中,是 ...

  7. 1.namesapce用法

    namespace用法示例 #include <iostream> using namespace std; //定义域名空间 namespace myspace { ; void sho ...

  8. 【Java EE 学习 34】【struts2学习第一天】

    一.struts2简介 struts2是一个用来开发MVC应用程序的框架.它提供了Web应用程序开发过程中的一些常见问题的解决方案. 1.struts2的作用域范围:三层架构当中的第一层,相当于MVC ...

  9. Struts2学习笔记《三》

      Struts2的工作原理图: struts的用法:

随机推荐

  1. C#读取Exeal文件

    今天写一个读取Exeal的时候遇到一个问题就是引用了Mircosotf.Office.Interop.Exeal类库的时候没有办法读取到 纠结了好久百度了一下发现别人是这样写的using Exeal= ...

  2. Orcle11g用户密码恢复

    1.当安装Orcle11g后,很久不用,忘记了用户名和密码.可以通过以下方法重置: 如上图及重置用户sys,system密码为123

  3. print之模块化

    这里参考特权同学的模块化思想,将常用的print等任务模块化,便于直接调用,提高代码的效率和易读性.现转载之,以供日后的学习和工作参考. print模块参考代码如下: //============== ...

  4. MySQL解压版安装配置详解

    MySQL解压版安装起来比较简单,步骤相对较少.下面我们就来详细介绍一下如何在windows操作系统上安装解压班的MySQL. 1.下载解压版MySQL,地址:http://downloads.mys ...

  5. 关于U3D画面出现卡顿的问题

    在U3D中,曾近遇到过卡顿的问题,下面说明解决方法 一:在关于相机移动的函数中,移动的函数不应该放在Update里面应该放到LateUpdate 二:如果最开始建立项目的时候选择的时候是3D游戏,如果 ...

  6. Linux云主机安装JDK,配置hadoop的详细方式

    云主机我使用的是青云的,还有好多其他品牌,比如阿里云 unitedstack 等等. 注册完青云后,会有试用券发到账户,可以利用此券试用其服务. 1 首先创建好一个主机,按照提示选择好系统,创建好一个 ...

  7. T-SQL基础 (子查询,连接查询,交叉查询,事务|| 笔记0807)

    一: A.子查询: 1.select 字段名 from table where 字段名=(select 字段名 from table 条件)  //只能做1个匹配 2.select 字段名 from ...

  8. 20160406javaweb 之JDBC简单案例

    前几天写的user注册登录注销案例,没有用到数据库,现在做出改动,使用数据库存储信息: 一.首先我们需要建立一个数据库: 如下图: 创建数据库的代码如下: -- 导出 database02 的数据库结 ...

  9. 定位相关-CLLocationManager的使用。

    #import "ViewController.h" #import <CoreLocation/CoreLocation.h> @interface ViewCont ...

  10. js使用正则表达式去空格

    写成类的方法格式如下:(str.trim();) <script language="javascript"> String.prototype.trim=functi ...