Struts2使用Convention插件用法.docx

上传人:b****4 文档编号:24192497 上传时间:2023-05-25 格式:DOCX 页数:13 大小:17.80KB
下载 相关 举报
Struts2使用Convention插件用法.docx_第1页
第1页 / 共13页
Struts2使用Convention插件用法.docx_第2页
第2页 / 共13页
Struts2使用Convention插件用法.docx_第3页
第3页 / 共13页
Struts2使用Convention插件用法.docx_第4页
第4页 / 共13页
Struts2使用Convention插件用法.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

Struts2使用Convention插件用法.docx

《Struts2使用Convention插件用法.docx》由会员分享,可在线阅读,更多相关《Struts2使用Convention插件用法.docx(13页珍藏版)》请在冰豆网上搜索。

Struts2使用Convention插件用法.docx

Struts2使用Convention插件用法

Struts2使用--Convention插件(转)(2011-04-0901:

28:

30)转载▼标签:

杂谈分类:

struts2

1.1.设置结果页面路径

默认所有的结果页面都存储在WEB-INF/content下,你可以通过设置struts.convention.result.path这个属性的值来改变到其他路径。

如:

Xml代码:

则将路径配置到了WEB-INF/page下。

1.2.设置Convention搜索包

默认包路径包含action,actions,struts,struts2的所有包都会被struts作为含有Action类的路径来搜索。

你可以通过设置struts.convention.package.locators属性来修改这个配置。

如:

则定义了在项目中,包路径包含web和action的将被视为Action存在的路径来进行搜索。

Com.ustb.web.*/com.ustb.action.*都将被视为含有Action的包路径而被搜索。

接着,Convention从前一步找到的package以及其子package中寻找com.opensymphony.xwork2.Action的实现以及以Action结尾的类:

com.example.actions.MainAction

com.example.actions.products.Display(implementscom.opensymphony.xwork2.Action)

pany.details.ShowCompanyDetailsAction

1.3.命名空间

命名空间。

从定义的.package.locators标示开始到包结束的部分,就是命名空间。

举个例子:

Com.ustb.web.user.userAction的命名空间是:

”/user”。

Com.ustb.web.user.detail.UserAction的命名空间是:

”/user/detail”

1.4.Actin类名路径分割

Convention通过如下规则确定URL的具体资源部分:

去掉类名的Action部分。

然后将将每个分部的首字母转为小写,用’-’分割,你可以设置struts.convention.action.name.separator如

还是举个例子:

UserAction->userUserDetailAction->user-detail。

结合上面的。

对于com.ustb.web.user.detail.UserDetailAction,映射的url就是/WEB-INF/content/user/detail/user-detail.jsp

1.5.支持jsp、html、htm、vm等格式

struts支持.jsp.html.htm.vm格式的文件。

下面是actiong和结果模版的映射关系:

URL

Result

Filethatcouldmatch

ResultType

/hello

success

/WEB-INF/content/hello.jsp

Dispatcher

/hello

success

/WEB-INF/content/hello-success.htm

Dispatcher

/hello

success

/WEB-INF/content/hello.ftl

FreeMarker

/hello

input

/WEB-INF/content/hello-world-input.vm

Velocity

/hello

error

/WEB-INF/content/test/test2/hello-error.html

Dispatcher

以上的内容来自struts2的文档http:

//struts.apache.org/2.1.6/docs/convention-plugin.html

当然,简单的通过默认的方式来进行配置不能完全满足实际项目的需要。

所幸,convention的零配置是非常灵活的。

1.6.@Action注解

通过@Action注释

对如下例子:

Java代码

packagecom.example.web;

importcom.opensymphony.xwork2.Action;

importcom.opensymphony.xwork2.ActionSupport;

publicclassHelloActionextendsActionSupport{

@Action("action1")

publicStringmethod1(){

returnSUCCESS;

}

@Action("/user/action2")

publicStringmethod2(){

returnSUCCESS;

}

}

方法名默认调用路径默认映射路径

method1/hello!

method1.action./WEB-INF/content/hello.jsp

method2/hello!

method2.action./WEB-INF/content/hello.jsp

通过@Action注释后

方法名@Action注释后调用路径@Action注释后映射路径

method1/action1!

method1.action./WEB-INF/content/action1.jsp

method1/user/action2!

method2.action/WEB-INF/content/user/action2.jsp

1.7.@Actions注解

通过@Actions注释,例子:

Java代码

packagecom.example.web;

importcom.opensymphony.xwork2.ActionSupport;

importorg.apache.struts2.convention.annotation.Action;

importorg.apache.struts2.convention.annotation.Actions;

publicclassHelloActionextendsActionSupport{

@Actions({

@Action("/different/url"),

@Action("/another/url")

})

publicStringmethod1(){

return“error”;

}

我们可以通过:

/different/url!

method1.action或/another/url!

method1.action来调用method1方法。

对应的映射路径分别是

/WEB-INF/content/different/url-error.jsp;/WEB-INF/content/another/url-error.jsp

可能误导了大家,一个方法被@Action注释后,只是多了一种调用方式,而不是说覆盖了原来的调用方式。

比如对于如下例子:

Java代码

com.example.web;

importcom.opensymphony.xwork2.ActionSupport;

importorg.apache.convention.annotation.Action;

importorg.apache.convention.annotation.Actions;

publicclassHelloActionextendsActionSupport{

@Action("/another/url")

publicStringmethod1(){

return“error”;

}

我们调用method1方法可以通过两种方式:

1/hello!

method1.action映射url:

/WEB-INF/content/hello-error.jsp

2/another/url!

method1.action映射url:

/WEB-INF/content/another/url-error.jsp

可见,两种方式均可对method1方法进行调用,唯一的区别就是,两种调用的映射是不一样的,所以,想跳转到不同的界面,这是一个非常好的选择。

1.8.@Namespace注解

通过@Namespace注释

packagecom.example.web;

importcom.opensymphony.xwork2.ActionSupport;

importorg.apache.struts2.convention.annotation.Action;

importorg.apache.struts2.convention.annotation.Actions;

@Namespace("/other")

publicclassHelloWorldextendsActionSupport{

publicStringmethod1(){

return“error”;

}

@Action("url")

publicStringmethod2(){

return“error”;

}

@Action("/different/url")

publicStringmethod3(){

return“error”;

}

}

通过/other/hello-world!

method1.action访问method1方法。

通过/other/url!

method2.action访问method2方法

通过/different/url!

method3.action访问method3方法

与@Action注释不同的是,该注释覆盖了默认的namespace(这里是’/’),此时再用hello!

method1.action已经不能访问method1了.

1.9.@Results和@Result注解

@Results和@Result

1.9.1.全局的(global)。

全局results可以被action类中所有的action分享,这种results在action类上使用注解进行声明。

packagecom.example.actions;

importcom.opensymphony.xwork2.ActionSupport;

importorg.apache.struts2.convention.annotation.Action;

importorg.apache.struts2.convention.annotation.Actions;

importorg.apache.struts2.convention.annotation.Result;

importorg.apache.struts2.convention.annotation.Results;

@Results({

@Result(name="failure",location="/WEB-INF/fail.jsp")

})

publicclassHelloWorldextendsActionSupport{

publicStringmethod1(){

return“failure”;

}

@Action("/different/url")

publicStringmethod2(){

return“failure”;

}

}

当我们访问/hello-world!

method1.action时,返回/WEB-INF/fail.jsp

当我们访问/hello-world!

method2.action时,返回/WEB-INF/fail.jsp

当我们访问/different/url!

method2.action时,返回/WEB-INF/fail.jsp

1.9.2.本地的(local)。

本地results只能在action方法上进行声明。

Java代码

packagecom.example.actions;

importcom.opensymphony.xwork2.ActionSupport;

importorg.apache.struts2.convention.annotation.Action;

importorg.apache.struts2.convention.annotation.Actions;

importorg.apache.convention.annotation.Result;

importorg.apache.convention.annotation.Results;

publicclassHelloWorldextendsActionSupport{

@Action(value="/other/bar",results={@Result(name="error",location="",type="redirect")})

publicStringmethod1(){

return“error”;

}

}

当我们调用/hello-world!

method1.action时,返回/WEB-INF/content/hello-error.jsp

当我们调用/other/bar!

method1.action时,返回

1.10.@ParentPackage注解

ParentPackage注解用来定义具体action类的父XWork包或java包,下面例子演示了在action类上使用本注解:

packagecom.example.actions;

importcom.opensymphony.xwork2.ActionSupport;

importorg.apache.struts2.convention.annotation.Action;

importorg.apache.struts2.convention.annotation.ParentPackage;

@ParentPackage("customXWorkPackage")

publicclassHelloWorldextendsActionSupport{

publicStringexecute(){

returnSUCCESS;

}

}

1.11.异常注解配置

ExceptionMapping注解用来影射action抛出的异常。

可以参考exceptionmappingdocumentation获得详细信息。

注解用类级别,在这种情况下,注解会应用到类里面的所有action

@ExceptionMappings({

@ExceptionMapping(exception="java.lang.NullPointerException",

result="success",params={"param1","val1"})

})

publicclassExceptionsActionLevelAction{

publicStringexecute()throwsException{

returnnull;

}

}

可以在ExceptionMapping注解中使用params属性来传递具体值给结果渲染页。

ExceptionMapping注解同样可以在action级别进行设置:

publicclassExceptionsMethodLevelAction{

@Action(value="exception1",exceptionMappings={

@ExceptionMapping(exception="java.lang.NullPointerException",

result="success",params={"param1","val1"})

})

publicStringrun1()throwsException{

returnnull;

}

}

1.12.自动加载无需启动服务

Convention插件可以自动重新加载配置的功能,无需重启容器,就可以刷新类中包含的action。

这自动加载automaticxml配置文件类似。

你必须在struts.xml中添加以下代码来启用本功能:

此功能没有在所有容器中进行过测试,强力建议不要在生产环境中使用。

1.13.扫描Action的Jar包

默认情况下,Convention插件不会从jar文件中寻找action。

如果想实现这一功能,jar文件必须被struts.convention.action.includeJars所定义的正则匹配到。

在例子中myjar1.jar和myjar2.jar将被插件检测到:

name="struts.convention.action.includeJars"

value=".*/myjar1.*?

jar(!

/)?

.*/myjar2*?

jar(!

/)?

"/>

提示:

正则表达式只针对jar文件的路径进行匹配,而不是文件名。

jar的URL应该包含jar文件的路径并以"!

/"结尾。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 社交礼仪

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1