Struts2的convention插件实现零配置Word格式.docx
- 文档编号:18454590
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:22
- 大小:29.01KB
Struts2的convention插件实现零配置Word格式.docx
《Struts2的convention插件实现零配置Word格式.docx》由会员分享,可在线阅读,更多相关《Struts2的convention插件实现零配置Word格式.docx(22页珍藏版)》请在冰豆网上搜索。
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映射到/myoffice
com.fun.struts.myoffice.EntINfoAction映射到/myofiice
4.
映射Action的name时,遵循如下两步规则:
如果该Action类名包含Action后缀,将该Action类名的Action后缀去掉。
否则不做任何处理。
将Action类名的驼峰写法(每个单词首字母大写、其他字母小写的写法)转成中画线写法(所有字母小写,单词与单词之间以中画线隔开)
LoginAction映射的Acion的name属性为login,GetBooks映射的Action的name的属性为get-books,AddEmployeeAction映射的Action的name属性为add-employee
5.
默认情况下。
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.jsp
6.
为了看到struts2应用里的Action等各种资源的影射情况,struts2提供了ConfigBrowser插件。
使用方法,将struts2-config-browser-plugin-2.1.6.jar文件复制到struts2应用的WEB-INF\lib目录中。
打开首页地址:
http:
//localhost:
8080/应用名字/config-browser/actionNames.action这里可以看到ConfigBrowser插件的首页。
这里不管开发者是否使用struts.xml文件进行配置,一样可以看到struts的配置信息。
7.Action链的约定
如果希望一个Action处理结束后不是进入一个视图页面,而是进行另一个Action形成的Action链。
通过Convention插件则只需遵守如下三个约定即可。
第一个Action返回的逻辑视图字符串没有对应的视图资源
第二个Action与第一个Action处在同一个包下
第二个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应用配置如下两个常量就可以了。
<
!
--配置struts2应用于开发模式--!
>
constantname=”struts.devMode”value=”true”/>
—配置Convention插件自动重加载映射--!
constantname=”struts.convention.classes.reload”value=”true”/>
几个重要的常量
struts.convention.action.disableJarScanning---是否从包中搜索Action
struts.convention.action.package--------Convention插件以该常量指定包作为根包
struts.convention.result.path---设置Convention插件定位视图资源的根路径。
默认值为/WEB-INF/content
struts.convention.result.flatLayout—如果是为false则可以将视图放置Action对应的目录下,无需放入WEB-INF/content
7.
Convention的Annotation
与Action相关的两个Annotation是@Action和@Actions
@Action中可指定一个value属性。
类似于指定<
actionname=””/>
属性值
@Action中还可以指定一个params属性,该属性是一个字符串数组,用于该Acion指定的参数名和参数值。
params属性应遵守如下格式:
{“name1”,”value1”,”name2”,”value2”}
4)
@Actions也用于修饰Action类里的方法,用于将该方法映射到多个URL.@Actions用于组织多个@Action.因此它可将一个方法映射成多个逻辑Action。
packagecom.fun.actions;
importorg.apache.struts2.convention.annotation.Action;
importorg.apache.struts2.convention.annotation.Actions;
importcom.fun.service.LoginService;
importcom.opensymphony.xwork2.ActionSupport;
publicclassLoginActionextendsActionSupport{
privateStringstr;
@Actions({
@Action(value="
login1"
params={"
str"
"
这是已经注入的了!
"
}),
login2"
)
})
publicStringlogin(){
return"
;
}
@Action(value="
ggg"
publicStringabc(){
abc"
publicStringgetStr(){
returnstr;
publicvoidsetStr(Stringstr){
this.str=str;
}
我们可以通过/login1.action访问,而在访问时,str这个属性已经有值,为str=”这是已经注入的!
”返回的视图是login1-str.jsp
当我们用/login2.action访问时,str的值为null。
返回的视图为login2-str.jsp
而我们通过/ggg.action调用的是abc()方法,返回的视图为/ggg-abc.jsp
8.
与Result配置相关的Annotation
1)@ResultPath@Result和Results
2)@Results用于组织多个@Result因此它只需指定一个value属性值,该value属性值为多个@Result
3)@Result相当于struts.xml文件中的<
result/>
元素的做哟欧诺个。
使用@Result必须指定一个name属性,相当于<
resultname=””/>
另外,它还有几个可选的属性。
☆type相当于<
resulttype=””/>
指定返回视图资源的类型
☆location相当于<
result>
…..<
/result>
中间部分,用于指定实际视图位置
☆params:
该属性相当于<
元素里多个<
param../>
子元素的作用,用于为该Result指定参数值。
该属性应满足{“name1”,”value1”,”name2”,”value2”}格式
4)@Result有以下两种用法
1Action级的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目录下寻找物理视图资源。
9与包和命名空间相关的Annotation:
@Namespace:
修饰Action类或其所在的包。
该Annotation中指定一个value属性值,用于指定被修饰的Action所在的命名空间
@Namespaces:
修饰Action类或其所在的包,用于组合多个@Namespace
@ParentPackage:
用于指定被修饰的Action所在包的父包。
10异常处理相关的Annotation
@ExceptionMappings用于组织多个@ExceptionMapping,因此它只需指定一个value属性值,该value属性值为多个@ExceptionMapping。
@ExceptionMapping用于定义异常类和物理视图之间的对应关系,也相当于struts.xml文件里<
exception-mapping../>
元素的作用使用时,必须注意以下两个属性:
exception:
用于指定异常类
result:
用于指定逻辑视图
@ExceptionMpping有如下两种用法
Action级的异常定义:
以@ExceptionMappings组合多个@ExceptionMapping后修饰的Action类。
这种异常定义对Action中的所有方法有效
方法级的异常定义:
将多个@ExceptionMapping组成数组后作为@Action的exceptionMappings属性值,这种异常定义仅对被修饰的方法有效。
11.拦截器配置相关的Annotation
与拦截器配置的Annotation有@InterceptorRef、@InterceptorRefs和@DefaultInterceptorRef
@InterceptorRefs用于组织多个@InterceptorRef,因此它只需要指定一个value属性值,该value属性值为多个@InterceptorRef
@InterceptorRef用于为指定Action引用lanjieq或者是拦截器栈。
也就相当于strut.xml中位于<
action../>
元素内部的<
interceptor-ref../>
子元素的作用。
使用@InterceptorRefAnnotation时,必须制定一个value属性,用于指定所引用的拦截器或拦截器栈的名字。
相当于<
子元素里name属性的作用。
Introduction
TheConventionPluginisbundledwithStrutssince2.1andreplacestheCodebehindPluginandZeroConfigplugins.Itprovidesthefollowingfeatures:
∙Actionlocationbypackagenamingconventions
∙Result(JSP,FreeMarker,etc)locationbynamingconventions
∙ClassnametoURLnamingconvention
∙Packagenametonamespaceconvention
∙SEOcompliantURLs(i.e.my-actionratherthanMyAction)
∙Actionnameoverridesusingannotations
∙Interceptoroverridesusingannotations
∙Namespaceoverridesusingannotations
∙XWorkpackageoverridesusingannotations
∙Defaultactionandresulthandling(i.e./productswilltrycom.example.actions.Productsaswellascom.example.actions.products.Index)
TheConventionPluginshouldrequirenoconfigurationtouse.Manyoftheconventionscanbecontrolledusingconfigurationpropertiesandmanyoftheclassescanbeextendedoroverridden.
Setup
InordertousetheConventionplugin,youfirstneedtoaddtheJARfiletotheWEB-INF/libdirectoryofyourapplication(ifyoupackageyouractionsinjarfiles,makesurethatstruts.convention.action.disableJarScanningissettotrue).
Helloworld
NowthattheConventionpluginhasbeenaddedtoyourapplication,let'
sstartwithaverysimpleexample.ThisexamplewilluseanactionlessresultthatisidentifiedbytheURL.Bydefault,theConventionpluginassumesthatalloftheresultsarestoredinWEB-INF/content.Thiscanbechangedbysettingthepropertystruts.convention.result.pathintheStrutspropertiesfiletothenewlocation.Don'
tworryabouttrailingslashes,theConventionpluginhandlesthisforyou.HereisourhelloworldJSP:
WEB-INF/content/hello-world.jsp
html>
body>
Helloworld!
/body>
/html>
IfyoustartTomcat(orwhicheverJ2EEcontaineryouareusing)andtypeinhttp:
8080/hello-world
intoyourbrowseryoushouldgetthisresult:
ThisillustratesthattheConventionpluginwillfindresultsevenwhennoactionexistsanditisallbasedontheURLpassedtoStruts.
Codebehindhelloworld
Let'
sexpandonthisexampleandaddacodebehindclass.InordertodothisweneedtoensurethattheConventionpluginisabletofindouractionclasses.Bydefault,theConventionpluginwillfindallactionclassesthatimplementcom.opensymphony.xwork2.ActionorwhosenameendswiththewordActioninspecificpackages.
ThesepackagesarelocatedbytheConventionpluginusingasearchmethodology.FirsttheConventionpluginfindspackagesnamedstruts,struts2,actionoractions.AnypackagesthatmatchthosenamesareconsideredtherootpackagesfortheConventionplugin.Next,thepluginlooksatalloftheclassesinthosepackagesaswellassub-packagesanddeterminesiftheclassesimplementcom.opensymphony.xwork2.ActionoriftheirnameendswithAction(i.e.FooAction).Here'
sanexampleofafewclassesthattheConventionpluginwillfind:
Classes
com.example.actions.MainAction
com.example.actions.products.Display(implementscom.opensymphony.xwork2.Action)
pany.details.ShowCompanyDetailsAction
EachoftheactionclassesthatthepluginfindswillbeconfiguredtorespondtospecificURLs.TheURLisbasedonthepackagenamethattheclassisdefinedinandtheclassnameitself.FirsttheplugindeterminesthenamespaceoftheURLusingthepackagenamesbetweentherootpackageandthepackagetheclassisdefinedin.Forourexamplesabove,thenamespaceswouldbe:
Namespaces
com.example.actions.MainAction->
/
com.example.actions.products.Display->
/products
pany.details.ShowCompanyDetailsAction->
/company/details
Next,theplugindeterminestheURLoftheresourceusingthecla
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Struts2 convention 插件 实现 配置