Struts2之配置文件中Action的详细配置
在Struts2之配置一文中,我们知道一个struts配置文件可以分为三部分:常量配置 包含其他配置文件的配置 Action配置 。
这其中 常量配置 和 包含其他配置文件的配置 二者的变化不多 相对来说比较简单,而Action的配置 相对来说比较复杂。
当我们写好了一个Action类之后 我们就要想着该Action类为哪个URL的请求提供服务,这就需要配置 。
1.包和命名空间
Struts2利用包(<package>)来组织Action,将Action配置(<Action >)放在包定义之下。
也就是总体是这样:
<package >
<action >
</action>
</package>
其中包的定义(<package>)有如下属性可以指定:
name : 必需属性 该包的名称
extends :可选属性 该属性指定该包继承了哪个包 。继承其他包,可以继承其他包中的Action定义,拦截器定义。
namespace: 可选属性 该属性指定指定该包的命名空间
abstract: 可选属性 指定该包是不是抽象包。抽象包中不能有Action定义 。
其中比较难理解的是命名空间(namespace)属性 。
假设某个应用叫 bookshop 该应用中Action配置如下 :
<package name="book" namespace="/book">
<action name="getBook" class="org.lingtong.web.action.BookAction" >
<result name="myBook">/myBook.jsp</result>
</action>
</package>
其中的Action可以服务的请求是 http://localhost:8080/bookshop/book/getBook.action 即 应用名 + 命名空间名 + Aciton名.action
同一个命名空间(同一个包下)不允许出现具有相同name的Action,否则就会造成 一个请求链接 对应多个Action 的混乱状况。
不同命名空间(不同包下) 允许出现和和另外一个包中具有相同name的Action , 因为请求链接 是由 应用名 ,命名空间名 ,Action名三者拼接而成的。
这里我们也应该知道如何划分一个包:根据命名空间
如:这里有三个Action类 :
BooKAction类 它服务的 请求地址是 http://localhost:8080/bookshop/book/getBook.action
CheckBookAction类 它服务的 请求地址是 http://localhost:8080/bookshop/book /checckBook.action
AllBookAction类 它服务的 请求地址是 http://localhost:8080/book/allBookAction.action
它们三个Action应该配置在同一个命名空间(同一个包下),即namespace="/book"的包下 ,因为三者的请求链接的命名空间 均是book
如果一个包(<package>)没有配置namespace属性 那么这个包具有默认命名空间
<package name="book" >
<action name="getBook" class="org.lingtong.web.action.BookAction">
</action>
</package>
意味BooKAction可以处理任何请求的Action名是 getBook.action的请求 (bookshop是应用名)
http://localhost:8080/bookshop/getBook.action ---没有命名空间的请求链接
http://localhost:8080/bookshop/book/getBook.action ---命名空间是/book的 请求链接
http://localhost:8080/bookshop/mybook/getBook.action ----命名空间是/mybook 的请求链接
http://localhost:8080/bookshop/mybook/allbook/getBook.action ----命名空间是/mybook/allbook 的请求链接
如果一个包(<package>)如果配置了namespace="/" 那么这个包具有的是根命名空间
<package name="book" namespace="/" >
<action name="getBook" class="org.lingtong.web.action.BookAction">
</action>
</package>
意味着BookAction类 只能处理这一种 (其中bookshop是应用名) http://localhost:8080/bookshop/getBook.action ---没有命名空间的请求链接
这里综合看一个例子
假设有这样是一个 请求链接 http://localhost:8080/bookshop/myBook/allBook/getAllBook.action
struts的配置文件片段
<package name="book" > ----1号 具有默认命名空间的包
<action name="getBook" class="org.lingtong.web.action.BookAction">
</action>
</package>
<package name="book" namespace="/"> ------2号 具有根命名空间的包
<action name="getBook" class="org.lingtong.web.action.BookAction">
</action>
</package>
<package name="book" namespace="/myBook/allBook"> ------3号 具有/myBook/allBook命名空间的包
<action name="getBook" class="org.lingtong.web.action.BookAction">
</action>
</package>
<package name="book" namespace="/myBook"> -------4号 具有/myBook 命名空间的包
<action name="getBook" class="org.lingtong.web.action.BookAction">
</action>
</package>
流程:
首先系统自动分析出 请求链接中的命名空间是 /myBook/allBook (去除应用名 和 Action名.action 之后的 字符串全是命名空间名) 直接在命名空间是/myBook/allBook的2号包中找 Action名是getBook的Action , 如果找到了直接服务 ,如果没有找到 就去 具有默认命名空间的1号包 中找Action名 是getBook的Action ,如果找到了 直接服务 ,没找到 ,到此为止 就会报错 。
此处注意 找完/myBook/allBook命名空间的包之后 如果没找到 ,并不会到/myBook命名空间的4号包去找 。“命名空间只有一个级别,要么全匹配 ,要么不匹配,去默认命名空间的包中找 ,不存在部分匹配的情况”。
2.<Action>元素的配置
<Action>有三个属性
name属性 --------必需属性 Action 名 对应于 请求链接中的 xxxx.action
class属性 -------可选属性 对应的Action类 如果不写 表示默认使用ActionSupport类来处理请求
method属性 --------可选属性 表示使用Action类的哪个方法来处理请求 如果不写 表示默认用execute()方法来处理请求
注意点:一般情况下name属性中没有“/”,如果希望name属性中可以出现“/”,可以通过常量配置struts.enable.SlashesInActionNames的常量值为true.
不要在name属性中使用“.”或“-”,否则会引发一些未知异常。
关于动态方法调用与method属性的设置:
我们知道一个Action类,我们默认会提供一个execute()方法,但是我们还可以在Action类中定义其他的方法,通过为 请求链接指定调用的方法 和在Action元素配置中设置method属性来 ,进行动态方法调用。
如:
请求链接 :http://localhost:8080/bookshop/myBook/allBook/getBook!getBookByName 规则 “actionName!methodName”
Action配置 :
<aciton name="getBook" class="org.lingtong.web.action.BookAction" method="getBookByName">
</action>
Action类: 提供 getBookByName方法
使用动态方法调用前必须通过常量设置Struts2允许使用动态方法调用 设置struts.enable.DynamicMethodInvocation 常量的值为 true。
3.配置默认Action
当用户请求在struts.xml文件中找不到对应的Action配置时,我们可以指定一个Action来处理这些找不到Action的用户请求
在具有默认命名空间的包(package)之下,配置如下:
<default-action-ref name="defaultAction" />
<action name="defaultAction" class="org.org.lingtong.web.action.DefaultAction"> //找不到对应Action配置的请求,都交给DefaultAction类处理
</action>
Struts2之配置文件中Action的详细配置的更多相关文章
- Struts2之配置文件中Action的详细配置(续)
承接上一篇 4.处理结果的配置 Action类的实例对象调用某个方法,处理完用户请求之后,将返回一个逻辑视图名的字符串.核心Filter收到返回的逻辑视图名字符串,根据struts.xml中的逻辑视图 ...
- struts2配置文件中action的name属性
struts2配置文件中action的name属性的第一个字符不要加斜杠 <action name="see" class="baoxiuManage_seeAct ...
- Struts2的配置文件中, <package>的作用,<action><result>重名?
问:Struts2的配置文件中, <package>的作用是什么? 答:防止action重名啊,例如前台和后台,总会有很多地方起名重复的! 问:可是访问的时候,不也是访问action吗,能 ...
- Struts2 框架使用 核心以及其他详细配置
因为在使用SSH框架的过程,关于struts2的配置比较繁琐,所以做个总结. 一.导入并且关联其他XML 1. 因为在核心配置文件(Struts2.xml)中,如果存在很多需要配置的Action项 ...
- struts2配置文件中Action中的各属性的含义
StrutsApacheBeanJSPServlet attribute: 这个属性用来指定ActionForm保存到指定上下文时所使用的属性名.如果不指定attribute属性的值,将使用 ...
- Apache中AllowOverride的详细配置使用
我们通常利用Apache的rewrite模块对URL进行重写,rewrite规则会写在 .htaccess 文件里.但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.hta ...
- 对于nginx配置文件中的fastcgi_param的配置错误
在centos中搭建LNMP的时候,遇到了一个问题 在浏览器中访问.php文件的时候,nginx不能正常解析,页面返回404,后来百度了一下,发现了问题 在nginx的配置文件nginx.conf中的 ...
- spring 配置文件中使用properties文件 配置
配置Bean载入properties文件: <bean id="propertyPlaceholderConfigurer" class="org.springfr ...
- struts2使用配置文件中使用json-default的问题
使用Struts2实现异步验证数据: 与Struts2相关的jar包如下: freemarker-2.3.13.jar ognl-2.6.11.jar struts2-core-2.1.6.jar s ...
随机推荐
- 【BZOJ1717】产奶的模式(后缀数组)
[BZOJ1717]产奶的模式(后缀数组) 题面 权限题 hihocoder 洛谷 题解 \(hihocoder\)里面讲的非常好了 这题要求的就是最长可重叠重复K次子串 所谓相同的子串 我们可以理解 ...
- 【BZOJ2157】旅游(树链剖分,Link-Cut Tree)
[BZOJ2157]旅游(树链剖分,Link-Cut Tree) 题面 Description Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥 ...
- 递归方法,查询出树该组织及以下组织的组织ID
-- 查询出该组织下所有组织id的集合 --方法一: public String getAllOrgidsTwo(Integer orgid){ List<Integer> orgids= ...
- Python 终端输出字体颜色
终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关. 转义序列是以ESC开头,即用\033来完成(ESC的ASCII码用十进制表示是27,用八进制表 ...
- 论文笔记(5):Fully Convolutional Multi-Class Multiple Instance Learning
这篇论文主要介绍了如何使用图片级标注对像素级分割任务进行训练.想法很简单却达到了比较好的效果.文中所提到的loss比较有启发性. 大体思路: 首先同FCN一样,这个网络只有8层(5层VGG,3层全卷积 ...
- SQL Server 历史SQL执行记录
编程执行Sql语句难免忘记保存执行的文本,或是意外设备故障多种情况的发生.对于写的简单的Sql语句丢了就丢了,但对于自己写的复杂的丢失就有些慌了, 有时候很难再次写出来,这时候就需要用一些方法找回Sq ...
- fitnesse - 用例创建编辑、管理、执行和日志
fitnesse - 用例创建编辑.管理.执行和日志 2017-10-09 目录 1 用例创建编辑 1.1 用例创建 1.2 用例编辑2 用例管理3 用例测试执行和日志 3.1 用例测试执行 ...
- js实现html转pdf+html2canvas.js截图不全的问题
最近做项目中遇到要把整个页面保存为PDF文件,网上找了一下实现的方法都是 html2canvas.js+jsPdf.js 来实现.实现的过程是 先用html2canvas.js把html页面转成图片, ...
- 在线教育平台搭建 预览和models
一.前言 1.1.项目介绍 在线演示地址:mxonline.mtianyan.cn 开发环境: python:3.6.4 Django:2.0.2 后台管理:xadmin 系统概括: 系统具有完整的用 ...
- Defraggler磁盘碎片整理工具,让你的电脑读写速度更快
相信大家都听说过磁盘碎片整理吧,所谓磁盘碎片,通俗的来说,就是指计算机中的各种文件最开始在磁盘中存储的时候地址都是连在一起的,但是随着文件 的多次读写,或者说多次的移动复制等操作,这些文件在磁盘中的地 ...