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的配置
<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用法的更多相关文章
- C++中的namespace用法
关键字namespace定义了一个名字空间,里面的变量和函数,声明在此名字空间外使用须在前面加名字空间名称.例如: #include<iostream.h>namespace my{ in ...
- php namespace用法
其实纠结了很久要不要使用这个东西,但是看看了最新的框架laravel,cakephp等等的新版本都使用上了,所以还是随大流顺便学习下. namespace和c++里面的概念差不多,只是用法有点差别. ...
- namespace用法
1.在WCF.Controller中定义了一个UserModel,标记为① 2.在WCF.Controller.Model中定义了一个UserModel(同上,namespace不同),标记为② 3. ...
- mybatis配置文件namespace用法总结
本文为博主原创,未经允许不得转载: 由于在应用过程中,发现namespace在配置文件中的重要性,以及配置的影响,在网上看了很多博客,发现很多人对namespace存在误解, 所以总结一下namesp ...
- Struts2-2.了解struts.xml的查找顺序
默认namespace的package <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE s ...
- k8s中新建一个namespace和harborsecret的yaml文件
注意哟, 不同的harborsecret,在不同的namespace中,是不共用的. 也就是说,如果在default名字空间中,创建了一个docker login secret, 在其它名字空间中,是 ...
- 1.namesapce用法
namespace用法示例 #include <iostream> using namespace std; //定义域名空间 namespace myspace { ; void sho ...
- 【Java EE 学习 34】【struts2学习第一天】
一.struts2简介 struts2是一个用来开发MVC应用程序的框架.它提供了Web应用程序开发过程中的一些常见问题的解决方案. 1.struts2的作用域范围:三层架构当中的第一层,相当于MVC ...
- Struts2学习笔记《三》
Struts2的工作原理图: struts的用法:
随机推荐
- 20个Linux系统监视工具
需要监视Linux服务器的性能?试试这些内置的命令和一些附加的工具吧.大多数Linux发行版都集成了一些监视工具.这些工具可以获取有关系统活动的信息的详细指标.通过这些工具,你可以发现产生系统性能问题 ...
- C#扫盲之:带你掌握C#的扩展方法、以及探讨扩展方法的本质、注意事项
1.为什么需要扩展方法 .NET3.5给我们提供了扩展方法的概念,它的功能是在不修改要添加类型的原有结构时,允许你为类或结构添加新方法. 思考:那么究竟为什么需要扩展方法呢,为什么不直接修改原有类型呢 ...
- php中的全局变量引用
全局变量在函数外部定义,作用域为从变量定义处开始,到本程序文件的末尾.但和其他语言不同,php的全局变量不是自动设为可用的,在php中函数可以视为单独的程序片段,局部变量会覆盖全局变量的能见度,因此, ...
- JavaScript高级程序设计(一):JavaScript简介
一.JavaScript实现 1.一个完整的JavaScript包含三个部分组成: 1)ECMAScript 核心 2)DOM文档对象模型 3)BOM浏览器对象模型 2.文档对象模型(DOM) 文档对 ...
- Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法
Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法 这篇笔记将介绍如何使用Ext.Net GridPanel 中使用Sorter. 默认情况下,Ext.Net GridP ...
- HTTP协议认识
一.HTTP协议概念 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议 HTTP是一个应用层协议,由请求和响应 ...
- java 环境变量配置
1.我的电脑 2.属性 3.高级 4.环境变量 5.新建 6.JAVA_HOME: C:\Program Files (x86)\Java 7.CLASSPATH: .;%JAVA_HOME%\;%J ...
- vi 或 vim 常用命令(简单够用了)
1.vi filename :打开或新建文件,并将光标置于第一行首 2.按下i键:编辑或插入数据3.按下shit+: ->表示可以进行命令输入 4.q! ->表示不保存退出.5.w -&g ...
- javascript dom编程艺术笔记之图片库的改进
dom的操作要遵守的原则 1.平稳退化 2.分离javascript 3.向后兼容 4.性能考虑 改进后的显示图片方法 function showpic(whichpic){ if(!document ...
- 常用数据与VARIANT之间的转换---从网上整理
//头文件 1 #pragma once class VariantConvert { public: VariantConvert(void); ~VariantConvert(void); pub ...