已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
struts2注解使用从struts2.1开始,struts2不再推荐使用Codebehind作为零配置插件,而是改为使用Convention插件来支持零配置, 和Codebehind相比,Convention插件更彻底,该插件完全抛弃配置信息,不仅不需要是使用struts.xml文件进行配置,甚至不需要 使用Annotation进行配置,而是由struts2根据约定自动配置。如何使用Convention1. 将struts-Convention-plugin-2.1.6.jar文件复制到WEB-INF/lib路径下2. 对于Convention插件而言,它会自动搜索位于action,actions,struts,struts2包下的所有java类,Convention插件会把如下两种java类当成Action处理:1) 所有实现了com.opensymphony.xwork2.Action的java类2) 所有类名以Action结尾的java类3. Convention插件还允许设置如下三个常量:1) struts.Convention.exclude.packges:指定不扫描哪些包下的java类,位于这些包结构下的java类将不会自动映射成Action;2) struts.convention.package.locators:Convention插件使用该常量指定的包作为搜寻Action的根包。对于 actions.fore.LoginAction类,按约定原本应映射到/fore/login;如果将该常量设为fore,则该Action将会映射 到/login3) struts.convention.action.packages:Convention插件以该常量指定包作为根包来搜索Action类。 Convention插件除了扫描action,actions,struts,struts2四个包的类以外,还会扫描该常量指定的一个或多个 包,Convention会试图从中发现Action类。注意:struts.convention.package.locators和struts.convention.action.packages两个常量的作用比较微妙,开发者在利用这两个常量时务必小心。如:下面Action所在包被映射的命名空间如下:com.fun.actions.LoginAction 映射到 /com.fun.actions.myoffice.CarInfoAction 映射到 /myofficecom.fun.struts.myoffice.EntINfoAction 映射到 /myofiice4. 映射Action的name时,遵循如下两步规则:1) 如果该Action类名包含Action后缀,将该Action类名的Action后缀去掉。否则不做任何处理。2) 将Action类名的驼峰写法(每个单词首字母大写、其他字母小写的写法)转成中画线写法(所有字母小写,单词与单词之间以中画线隔开)如:LoginAction映射的Acion的name属性为login,GetBooks映射的Action的name的属性为get-books,AddEmployeeAction映射的Action的name属性为add-employee5. 默认情况下。Convention总会到WEB应用的WEB-INF/content路径下定位物理资源,定位资源的约定是:actionRUL+resultCODE+suffix。当某个逻辑视图找不到对应的试图资源时,Convention会自动视图使用ActionURL+suffix作为物理视图资源。 如:actions.fore.LoginAction 返回success字符串时,Convention优先考虑使用WEB-INF/content/fore目录下的login-success.jsp作 为视图资源。如果找不到该文件,login.jsp也可作为对应的试图资源。如果返回input字符串,Convention会将WEB- INF/content/fore里面查找login-input.jsp6. 为了看到struts2应用里的Action等各种资源的影射情况,struts2提供了Config Browser插件。使用方法,将struts2-config-browser-plugin-2.1.6.jar文件复制到struts2应用的WEB-INFlib目录中。打开首页地址:http:/localhost:8080/应用名字/config-browser/actionNames.action这里可以看到Config Browser插件的首页。注意:这里不管开发者是否使用struts.xml文件进行配置,一样可以看到struts的配置信息。7.Action链的约定如果希望一个Action处理结束后不是进入一个试图页面,而是进行另一个Action形成的Action链。通过Convention插件则只需遵守如下三个约定即可。1) 第一个Action返回的逻辑视图字符串没有对应的视图资源2) 第二个Action与第一个Action处在同一个包下3) 第二个Action影射的URL为:firstActionURL+resultCODE如,第一个Action为OneAction,里面有个方法返回为“two”,那么就得保证,WEB-INF/content/下没有 one.jsp或one-two.jsp 对于第二个action 它的名字应该是OneTwoAction,而对应的url应该是:“one-two.action”注意:由于Convention插件根据Action和jsp页面来动态生成映射的,因此不管是Acion的改变,还是JSP页面的改变都需要Convention插件重新加载映射。那么只要我们为struts2应用配置如下两个常量就可以了。几个重要的常量struts.convention.action.disableJarScanning-是否从包中搜索Actionstruts.convention.action.package-Convention插件以该常量指定包作为根包struts.convention.result.path -设置Convention插件定位视图资源的根路径。默认值为/WEB-INF/contentstruts.convention.result.flatLayout如果是为false则可以将试图放置Action对应的目录下,无需放入WEB-INF/content8. Convention的Annotation1) 与Action相关的两个Annotation是Action 和Actions2) Action中可指定一个value属性。类似于指定属性值3) Action中还可以指定一个params属性,该属性是一个字符串数组,用于该Acion指定的参数名和参数值。params属性应遵守如下格式:“name1”,”value1”,”name2”,”value2”4) Actions 也用于修饰Action类里的方法,用于将该方法映射到多个URL.Actions用于组织多个Action.因此它可将一个方法映射成多个逻辑Action。如:package com.fun.actions;import org.apache.struts2.convention.annotation.Action;import org.apache.struts2.convention.annotation.Actions;import com.fun.service.LoginService;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport private String str; Actions( Action(value=login1,params=str,这是已经注入的了!), Action(value=login2) ) public String login() return str; Action(value=ggg) public String abc() return abc; public String getStr() return str; public void setStr(String str) this.str = str; 我们可以通过/login1.action访问,而在访问时,str这个属性已经有值,为str=”这是已经注入的!” 返回的视图是login1-str.jsp当我们用/login2.action访问时,str的值为null。返回的视图为 login2-str.jsp而我们通过/ggg.action调用的是abc()方法,返回的视图为/ggg-abc.jsp9. 与Result配置相关的Annotation1)ResultPath Result 和Results2)Results用于组织多个Result因此它只需指定一个value属性值,该value属性值为多个Result3)Result相当于struts.xml文件中的元素的做哟欧诺个。使用Result必须指定一个name属性,相当于另外,它还有几个可选的属性。 type 相当于指定返回视图资源的类型 location 相当于.中间部分,用于指定实际视图位置 params:该属性相当于元素里多个子元素的作用,用于为该Result指定参数值。该属性应满足“name1”,”value1”,”name2”,”value2”格式4)Result有以下两种用法1 Action级的Result映射:以Actions组合多个Action后修饰的Action类。这种Result映射对该Action里的所有方法都有效。2方法级Result映射:将多个Result组成数组后作为Action的results属性值。这种Result映射仅对被修饰的方法有效。5)ResultPath则用于修饰包和Action类,用于改变被修饰Action所对应的物理视图资源的根路径。举例说:默认情况 下,Convention都会到WEB-INF/content路径下找物理视图资源,一旦我们使用ResultPath(“/abc”)修饰该 Action,系统将回到abc目录下寻找物理视图资源。举例:在默认情况下,Convention都会到WEB-INF/content路径下需找物理 视图资源,一旦我们使用ResultPath(“/abc”)修饰该Action,系统会到abc目录下寻找物理视图资源。10. 与包和命名空间相关的Annotation: Namespace:修饰Action类或其所在的包。该Annotation中指定一个value属性值,用于指定被修饰的Action所在的命名空间 Namespaces:修饰Action类或其所在的包,用于组合多个Namespace ParentPackage: 用于指定被修饰的Action所在包的夫包。11. 异常处理相关的Annotation ExceptionMappings 用于组织多个ExceptionMapping,因此它只需指定一个value属性值,该value属性值为多个ExceptionMapping。ExceptionMapping 用于定义异常类和物理视图之间的对应关系,也相当于struts.xml文件里元素的作用 使用时,必须注意以下两个属性: exception: 用于指定异常类 result : 用于指定逻辑视图ExceptionMpping有如下两种用法 Action级的异常定义:以ExceptionMappings组合多个ExceptionMapping后修饰的Action类。这种异常定义对Action中的所有方法有效 方法级的异常定义: 将多个ExceptionMapping组成数组后作为Action的exceptionMappings属性值,这种异常定义仅对被修饰的方法有效。12.拦截器配置相关的Annotation与拦截器配置的Annotation有InterceptorRef、InterceptorRefs和DefaultInterceptorRefInterceptorRefs用于组织多个InterceptorRef,因此它只需要指定一个value属性值,该value属性值为多个InterceptorRefInterceptorRef用于为指定Action引用lanjieq或者是拦截器栈。也就相当于strut.xml中位 于元素内部的子元素的作用。使用 InterceptorRefAnnotation时,必须制定一个value属性,用于指定所引用的拦截器或拦截器栈的名字。相当 于子元素里name属性的作用。1.官方介绍的地址: /2.1.6/docs/convention-plugin.html 2.struts.xml文件配置 只挑选几个重要的常量说明: (1) struts2.1.6 现在只需要一个struts.xml文件就可以了。以前配struts.locale=zh_CN,struts.i18n.encodingUTF- 8,应用起动时会报一个警告,说没有配置locale,必须要在perties里面配置才不会报错,现在这个问题已经解决了,所有配 置都可以在xml文件中指定了。 (2) 扩展名可以指定为空。这样地址栏比较好看。但也会有个问题,就是一些其他servlet映射,如cxf,我们会映射地址为/services/*,现在这 个地址也变成struts2控制范围的地址了,如果按默认的配置会报找不到action的错误。解决办法是修改mapper类。这在以后文章中会提到。 (3) 开启动态方法。要实现零配置,就是需要动态方法调用。开启action名称可以有 “/”,一个请求地址有多个“/”,struts2就不会再使用类路径扫描的命名空间,只会使用配置的名称。所以既想action名称里使用“/”,又想 用struts2默认搜索的命名空间,只能自己修改一下convention插件的实现类了。 (4) 不用dojo的及struts2复杂标签样式的就把主题设置为simple,这样可以不加载多余的模板。 (5) 开启开发者模式,在平时开发时修改action的annotation配置可以不重启,但是修改struts.xml文件还是要重启。修改类的具体内容,debug模式下可以不重启,或是使用javarebel,这个不在讨论范围。 (6) 指定结果页面路径。 convention插件会自动在此路径中寻找文件。放到WEB-INF的目的的保护文件资源,只能通过程序内部跳转才能访问,我们的权限拦截器或其他权限处理只要加到action上就可以了。 (7) 一个action名字的获取。比如为HelloWorldAction。按照配置,actionName为hello_world。 (8) 是否不扫描类。一定要设为false,否则convention插件不起作用,零配置也没有意义。 (9) 设置默认的父包,一般我们都设置一个default包继承自struts-default。大部分类再继承default。如果有特殊的类需要特殊的包,只能在action中再指定父包了。 (10) 确定搜索包的路径。只要是结尾为action的包都要搜索。basePackage按照默认不用配置,如果配置,只会找以此配置开头的包。locators及locators.basePackage都是一组以逗号分割的字符串。 (11) 排除哪些包不搜索。按默认配置即可。逗号分割字符串。 (12) 包括哪些jar包中的action。逗号分割字符串。 (13) 默认返回的结果类型搜索。按顺序先找相关的dispatcher的jsp文件是否存在。然后再找freemarker,再找velocity。 (14) 如果此值设为true,如果一个action的命名空间为/login,名称为HelloWorldAction。result返回值是success, 默认会找到/WEB-INF/pages/login/hello_world.jsp(如果有hello_world_success.jsp就找这个 文件,连接符“_”是在中配置的)。如果有一个action的result返回值是“error”,就会找/WEB-INF/pages /login/hello_world_error.jsp。 如果此值设为false,如果一个action的命名空间为/login,名称为HelloWorldAction。result返回值是 success,默认会找到/WEB- INF/pages/login/hello_world/index.jsp(如果有success.jsp就找这个文件)。如果有一个action的 result返回值是“error”,就会找/WEB-INF/pages /login/hello_world/error.jsp。 (15) 这几个配置没有太多的实际意义,本着最小检查的原则就可以。 (16)默认拦截器配置,已经简化了许多,一般不需要chain和 fileupload。modelDriven也没什么用,如果我们要使用restfull插件会有用。其实最简单只要一个params就可以了。我加入 exception是为了开发时的异常。servletConfig是为了包装一下request,reponse等对象,staticParams是为 了可以配置$形式参数。actionMappingParams是struts2.1新增的,我初步认为是可以在action配置中传参数,这个还有 些疑问。 struts2注解2012-02-24 14:44:30|分类: javaweb开发备忘 |字号订阅 一、配置web.xmlstruts2org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilteractionPackagescom.test.actionstruts2/*二、加入注解Namespace(value=/test)Action(value = file-manager,interceptorRefs = InterceptorRef(value = fileUpload,params=maximumSize,1024000,allowedTypes,image/pjpeg),InterceptorRef(value = basicStack),results = Result(name = ActionSupport.SUCCESS, location = /view/file-manager-sucess.jsp),Result(name = ActionSupport.ERROR, location = /view/file-manager-error.jsp) ,exceptionMappings = ExceptionMapping(exception = java.lang.Exception, result = ActionSupport.ERROR)验证注解:Validations(requiredStrings=RequiredStringValidator(fieldName=username,message=用户名不能为空!),RequiredStringValidator(fieldName=telNum,message=电话号码不能为空!),regexFields=RegexFieldValidator(fieldName=telNum,expression=(+86|0|1)d10,11$,message=电话号码格式不正确!)跳过验证注解:SkipValidation三、Convention的Annotation1)与Action相关的两个Annotation是Action 和Actions2)Action中可指定一个value属性。类似于指定属性值3)Action中还可以指定一个params属性,该属性是一个字符串数组,用于该Acion指定的参数名和参数值。params属性应遵守如下格式:“name1”,”value1”,”name2”,”value2”4)Actions 也用于修饰Action类里的方法,用于将该方法映射到多个URL.Actions用于组织多个Action.因此它可将一个方法映射成多个逻辑Action。四、与Result配置相关的Annotation1)ResultPath Result 和Results2)Results用于组织多个Result因此它只需指定一个value属性值,该value属性值为多个Result3)Result相当于struts.xml文件中的元素。使用Result必须指定一个name属性,相当于另外,它还有几个可选的属性。 type 相当于指定返回视图资源的类型 location 相当于.中间部分,用于指定实际视图位置 params:该属性相当于元素里多个子元素的作用,用于为该Result指定参数值。该属性应满足“name1”,”value1”,”name2”,”value2”格式4)Result有以下两种用法1.Action级的Result映射:以Actions组合多个Action后修饰的Action类。这种Result映射对该Action里的所有方法都有效。2.方法级Result映射:将多个Result组成数组后作为Action的results属性值。这种Result映射仅对被修饰的方法有效。5)ResultPath 则用于修饰包和Action类,用于改变被修饰Action所对应的物理视图资源的根路径。举例说:默认情况 下,Convention都会到WEB-INF/content路径下找物理视图资源,一旦我们使用ResultPath(/view)修饰该 Action,系统将回到view目录下寻找物理视图资源。五、与包和命名空间相关的Annotation:Namespace:修饰Action类或其所在的包。该Annotation中指定一个value属性值,用于指定被修饰的Action所在的命名空间Namespaces:修饰Action类或其所在的包,用于组合多个NamespaceParentPackage: 用于指定被修饰的Action所在包的父包。六、与异常处理相关的AnnotationExceptionMappings 用于组织多个ExceptionMapping,因此它只需指定一个value属性值,该value属性值为多个ExceptionMapping。ExceptionMapping 用于定义异常类和物理视图之间的对应关系,也相当于struts.xml文件里元素的作用 使用时,必须注意以下两个属性:exception: 用于指定异常类result:用于指定逻辑视图ExceptionMpping有如下两种用法Action级的异常定义:以ExceptionMappings组合多个ExceptionMapping后修饰的Action类。这种异常定义对Action中的所有方法有效方法级的异常定义:将多个ExceptionMapping组成数组后作为Action的exceptionMappings属性值,这种异常定义仅对被修饰的方法有效。七、与拦截器配置相关的Annotation与拦截器配置的Annotation有InterceptorRef、InterceptorRefs和DefaultInterceptorRefInterceptorRefs用于组织多个InterceptorRef,因此它只需要指定一个value属性值,该value属性值为多个InterceptorRefInterceptorRef 用于为指定Action引用lanjieq或者是拦截器栈。也就相当于strut.xml中位 于元素内部的子元素的作用。使用 InterceptorRefAnnotation时,必须制定一个value属性,用于指定所引用的拦截器或拦截器栈的名字。相当 于子元素里name属性的作用。八、查看struts2配置为了看到struts2应用里的Action等各种资源的影射情况,struts2提供了Config Browser插件。使用方法:将struts2-config-browser-plugin-2.1.6.jar文件复制到struts2应用的WEB-INFlib目录中。打开首页地址:http:/localhost:8080/应用名字/config-browser/actionNames.action 这里可以看到Config Browser插件的首页。1) 与Action相关的两个Annotation是Action 和Actions2) Action中可指定一个value属性。类似于指定属性值3) Action中还可以指定一个params属性,该属性是一个字符串数组,用于该Acion指定的参数名和参数值。params属性应遵守如下格式:“name1”,”value1”,”name2”,”value2”4) Actions 也用于修饰Action类里的方法,用于将该方法映射到多个URL.Actions用于组织多个Action.因此它可将一个方法映射成多个逻辑Action。与Result配置相关的Annotation1)ResultPath Result 和Results2)Results用于组织多个Result因此它只需指定一个value属性值,该value属性值为多个Result3)Result相当于struts.xml文件中的元素的做哟欧诺个。使用Result必须指定一个name属性,相当于另外,它还有几个可选的属性。 type 相当于指定返回视图资源的类型 location 相当于.中间部分,用于指定实际视图位置 params:该属性相当于元素里多个子元素的作用,用于为该Result指定参数值。该属性应满足“name1”,”value1”,”name2”,”value2”格式4)Result有以下两种用法 1 Action级的Result映射:以Actions组合多个Action后修饰的Action类。这种Result映射对该Action里的所有方法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年专升本护理学病例分析试卷(含答案)
- 2025年勘察设计注册土木工程师考试(道路工程专业知识)历年参考题库及答案
- 2025年安装维修工程师招聘面试题库及参考答案
- 2025年剧情编剧招聘面试题库及参考答案
- 消防岗位测试考试题库及答案
- 2025年医疗健康专家招聘面试题库及参考答案
- 2025年公益组织专员招聘面试题库及参考答案
- 2025年流程优化专员招聘面试参考题库及答案
- 2025年外部审计师人员招聘面试参考题库及答案
- 2025年食品科技工程师招聘面试题库及参考答案
- 2025年度哈尔滨“丁香人才周”(春季)民兵教练员补充招聘20人笔试考试备考题库及答案解析
- 足疗服务篇培训
- (人教版205新教材)英语三年级上册核心基础知识清单年
- 代谢综合征麻醉管理要点
- 2025年教师资格考试《学科教学论》备考题库及答案解析
- 2025年中国铁路成都局集团有限公司招聘高校毕业生笔试题库真题及答案
- 2023年06月上海市浦东新区临港新片区文员招考聘用笔试题库含答案解析
- 电气线路设备安装操作规程
- SB/T 238-2008切菜机技术条件
- GB/T 908-2019锻制钢棒尺寸、外形、重量及允许偏差
- GB/T 36265-2018红外光学玻璃
评论
0/150
提交评论