Struts2注解配置之@Namespace(四)

摘要:
如果没有@Namespace注释,则根据ConventionPlugin的约定,此包将用作根包。使用@Namespace注释,HelloWorld6的命名空间将更改为“/custom”。实验证明@Namespace注释对完全限定的命名空间没有影响。再次添加@Namespace注释,重新启动服务,访问,然后失败。此轮操作验证了@Namespace注释已应用于doSomething()方法的问题。这仅仅表明在为Action类创建@Namespace注释之后,注释的效果将应用于该类中所有不完全限定的actionURL。

今天开始学习@Namespace注解。

还是先看一段代码:

  1. package com.example.actions;  
  2.   
  3. import org.apache.struts2.convention.annotation.Action;  
  4. import org.apache.struts2.convention.annotation.Namespace;  
  5.   
  6. import com.opensymphony.xwork2.ActionSupport;  
  7.   
  8. @Namespace("/custom")  
  9. public class HelloWorld6 extends ActionSupport {  
  10.     @Action("/H6/url")  
  11.     public String execute() {  
  12.         return SUCCESS;  
  13.     }  
  14.   
  15.     @Action("url")  
  16.     public String doSomething() {  
  17.         return SUCCESS;  
  18.     }  
  19. }  
  • 名称空间注释允许操作类名称空间改变而不是使用Convention Plugin约定的Java包的名称。
仔细分析上述代码。HelloWorld6的包名为package com.example.actions;。如果没有@Namespace("/custom")注解,按照Convention Plugin的约定,会将此包作为根包。对应Action URL的命名空间为“/”。而有@Namespace("/custom")注解的情况下,HelloWorld6的命名空间被改成了“ /custom”。但是我们在浏览器中输入http://应用服务器ip:端口/应用/H6/url访问时,没有任何问题,还可以跳转到“/H6 /url.jsp”页面。
这是什么原因呢?
关键在于@Action("/H6/url")。此处“/H6/url”是对Action的名称空间进行了完全限定。实验证明@Namespace("/custom")注解对名称空间进行完全限定的不起作用。
  • 针对某个Action类进行@Namespace注释后,该注释的效果将应用于该类中所有未完全限定的action URLs

试着在浏览器中输入http://应用服务器ip:端口/应用/url访问时,报出了错误提示信息。将@Namespace("/custom")注解去 掉,重新启动服务,再次访问,成功!再次将@Namespace("/custom")注解加上,重新启动服务,访问,失败。
此回合操作验证了一个问题,@Namespace注解已经作用到doSomething()方法上。
仔细观察每一个细节。该方法上有@Action("url")注解。它“url”的前面没有“/”。这是未完全限定的action URL啊。这样正好说明了针对某个Action类进行@Namespace注释后,该注释的效果将应用于该类中所有未完全限定的action URLs。
这样我们在浏览器中输入http://应用服务器ip:端口/应用/cutsom/url访问时,成功。跳转页面为“/custom/url.jsp”。

免责声明:文章转载自《Struts2注解配置之@Namespace(四)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇浅谈CDQ分治MongoDB(课时5 数据查询)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

http协议简介

  在做接口测试的过程中,都会遇到一些http协议,什么是http协议? 什么是http协议 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。基于TCP的应用层协议,它不关心数据传输的细节,HTTP(超文本传输协议...

js 无刷新监听URL的变化

无刷新改变路由的两种方法 通过hash改变路由 代码: window.location.hash='edit' 效果: http://xxxx/#edit 通过history改变路由 history.back(): 返回浏览器会话历史中的上一页,跟浏览器的回退按钮功能相同 history.forward():指向浏览器会话历史中的下一页,跟浏览器的前进...

[转]Windows 注册自定义的协议

[转自] http://blog.sina.com.cn/s/blog_86e4a51c01010nik.html 1、注册应用程序来处理自定义协议          你必须添加一个新的key以及相关的value到HKEY_CLASSES_ROOT中,来使应用程序可以处理特殊的URL协议。          新注册的key必须与协议scheme相匹配才可以...

[转] Blob对象

Blob是计算机界通用术语之一,全称写作:BLOB(binary large object),表示二进制大对象。MySql/Oracle数据库中,就有一种Blob类型,专门存放二进制数据。在javascript中,Blob通常表示二进制数据,不过它们不一定非得是大量数据,Blob也可以表示一个小型文本文件的内容。本文将详细介绍Blob 构造函数 Blob(...

struts2漏洞S2-046修复解决方案

项目验收通过半年之后, 甲方找了一些网络砖家用工具扫描我司做的社保卡申领系统, 找到了struts2漏洞S2-046, 真是服了, 只知道struts2有bug, 现在才知道它漏洞。 砖家们给出了修复建议: 方法一:升级Struts2至Struts2.3.20.2,2.3.24.2,2.3.28.1版本修复该漏洞。(注:更新地址:https://cwik...

node中的url和path模块

//path模块 1.Node.js path 模块提供了一些用于处理文件路径的小工具,我们可以通过以下方式引入该模块: var path = require("path") 2.常用方法 ================path.join([...paths]) path.join() 方法使用平台特定的分隔符把全部给定的 path 片段连接到一起,并...