struts2调整convention插件 - 编程当前位置:& &&&struts2调整convention插件struts2调整convention插件&&网友分享于:&&浏览:8次struts2整合convention插件
&?xml version="1.0" encoding="UTF-8" ?&
&!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"&
&constant name="struts.il8n.encoding" value="UTF-8"&&/constant&
&constant name="struts.ui.theme" value="simple" /&
&!-- 定义默认的访问后缀 --&
&constant name="struts.action.extension" value="action" /&
&!--设置convention-plugin的页面存放路径
&constant name="struts.convention.result.path" value="/WEB-INF/jsp" /&
&!--设置convention-plugin的搜索路径
&constant name="struts.convention.package.locators" value="kp" /&
&!--设置convention-plugin不搜索的路径,可以不设
&constant name="struts.convention.exclude.packages" value=""/&
&!-- 设置convention-plugin默认的父包,如果是 --&
&constant name="struts.convention.default.parent.package" value="base-default"/&
&!-- 我设计的目的是全局都用这个包的拦截器,不用convention-plugin的也可以继承它,这个包拦截器的目的
是为了进行登录验证的,除非有特殊要求的,例如不用进行登录验证的可以不继承它,可以在action类里
用注解重新制定package,或者在包com.test11.*下面定义action,在struts-test.xml里配置
&package name="base-default" extends="convention-default"
abstract="true"&
&interceptors&
&interceptor name="frameInterceptor" class="com.intercepter.frameInterceptor"&&/interceptor&
&interceptor-stack name="frameinterceptors"&
&interceptor-ref name="frameInterceptor"&&/interceptor-ref&
&interceptor-ref name="defaultStack"&&/interceptor-ref&
&/interceptor-stack&
&/interceptors&
&default-interceptor-ref name="frameinterceptors"&&/default-interceptor-ref&
&/package&
&!-- 以下两项在生产模式中要去掉 --&
&constant name="struts.devMode" value="true"/&
&constant name="struts.convention.classes.reload" value="true" /&
struts.convention.package.locators.basePackage=com.ZTest.web.action
这个属性用于约定Action 类的根包(这个包是Java 类的包,而不是Struts.xml中配置的&package&节点)
在一个项目中有这样一系列的Java 包,那么当指定convention的这个属性,Struts 框架就会在你访问特定的URL时会自动的找到所要的请求的实现类。
当你在浏览器中输入: http://localhost:8080/HelloWorld.action ,Struts会自动的找到并执行com.ZTest.web.action.HelloWorldAction.java类。
当你在浏览器中输入: http://localhost:8080/test/aaa.action ,Struts会自动的找到并执行com.ZTest.web.action.test.aaaAction.java类。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有struts 2读书笔记 - Convention插件与“约定”支持 - Java框架 - Java -
热门搜索:
您的位置: >>>struts 2读书笔记 - Convention插件与“约定”支持
struts 2读书笔记 - Convention插件与“约定”支持
[摘要]本文介绍struts 2读书笔记之Convention插件与“约定”支持,并提供简单的示例代码供参考。
Convention插件的主要特点是“约定优于配置”。Action的搜索和映射约定为了能够使用Convention插件,必须在Struts 2 应用中***Convention插件,即将Struts2-convention-plugin.jar文件复制到Struts 2应用的WEB-INF/lib路径下。对于convention插件而言,他会对以下两种java类的Action处理:1、
所有实现了com.opensymphony.xwork2.Action的java类2、
所有类名以Action结尾的java类Struts 2的convention插件还允许设置如下三个常量:常量说明Struts.convention.exclude.packages指定不扫描那些包的java类,位于这些包结构下的java类将不会被自动映射成ActionStruts.convention.package.locatorsConvention插件使用该常量指定的包作为搜索Action的根包。如:对于action.user.LoginAction类,按约定本应映射到/user/login;如果将该常量设置为user,则该Action将会映射到/loginStruts.convention.action.packagesConvention插件以该常量指定包作为根包来搜索Action类。当找到合适的Action类后,Convention插件将会按照约定部署这些Action。部署Action时,actions、action、struts、struts2包会映射成根命名空间,而这些包下的子包则会被映射成对应的命名空间。如:Com.app.action.books.GetBooks
映射到/booksCom.app.action.RegistAction
映射到/Com.app.action.struts.manage.user.UserAction
映射到/manage/user按约定映射name属性Action的name属性(即该action所要处理的URL),根据该Action的类名映射,映射Action的name时,需要遵循如下两个步骤:1、
如果该Action类名包含Action后缀,就将该Action类名的Action后缀去掉。否则就不会做任何处理2、
将Action类名的写法(每个单词首字母大写、其他字幕小写)转成中划线写法(有字母小写,单词与单词之间用中划线隔开)。如:Com.app.action.LoginAction
映射到:/login.actionCom.app.action.user.loginAction
映射到:user/login.actionCom.app.action.user.loginRegistAction
映射到:user/login-regist.action对于Action类的代码依然不需要做任何的改变。按约定映射resultAction处理用户请求后会返回一个字符串作为逻辑视图,该逻辑视图必须映射到实际的物理视图。Convention默认也作为逻辑视图和物理视图之间的映射提供了约定。默认情况下,convention总会到Web应用的WEB-INF\content路径下定位物理资源。故定位资源约定为:actionName+resultCode+suffix。当某个逻辑视图找不到对应的视图资源是,convention会自动试图使用actionName+suffix作为物理视图资源。如:假定所有的结果类型全部为:DispatcherAction的URL返回的逻辑视图名对应的物理视图/loginsuccess\WEB-INF\content\login-success.jsp/user/loginsuccess\WEB-INF\content\user\login-success.jsp/user/registerror\WEB-INF\content\user\regist-error.jspAction键的约定如果想一个Action处理结束后不是进入视图页面,而是进入另一个Action形成Action链。则只需要遵守下面三个约定:1、第一个Action返回的逻辑视图字符串没有对应的视图资源。2、第二个Action与第一个Action处于同一个包下。3、第三个Action映射的URL为:firstactionname+resultcode下面是一个实例:第一个Action处理用户请求后、转到第二个Action继续处理。再由第二个Action转到视图页面,并打印相应的信息第一个Action:FirstActionjavapublic class FirstAction extends ActionSupport{
private String tip1;
public String getTip1() {
return tip1;
public void setTip1(String tip1) {
this.tip1 = tip1;
public String execute(){
setTip1(&第一个action提示&);
return &second&;
}该Action处理用户请求后返回“second”字符串,为了让该Action处理结束后进入第二个Action。对于这个返回的字符串,第二个Action的映射的URL应为:first-second。所以第二个Action的类名为:FirstSecondAction。下面是第二个Action:FirstSecondAction.jsp public class FirstSecondAction extends ActionSupport {
private String tip2;
public String getTip2() {
return tip2;
public void setTip2(String tip2) {
this.tip2 = tip2;
public String execute() throws Exception {
setTip2(&第二个action 提示....&);
return SUCCESS;
}当firstAction处理用户请求之后,系统将会自动调用FirstSecondAction处理用户请求。然后转到视图资源。第一个jsp页面:thefirst.jsp点击按钮后,转到第一个action处理用户请求
该Action=”first“。&form action=&first&&
&input type=&submit& value=&点击链接第二个action&&
&/form&第二个jsp页面:第二个视图资源。当第二个Action处理用户请求完后,转到该视图资源。并打印相应的信息 。由于第二个Actiond的result的映射是:first-second-success。所以该视图资源的名字为:first-second-success.jsp${tip1 }&Br /&
${tip2 }&br /&将会得到下面的显示页面:
相关文章:
上一篇:下一篇:
24小时排行
Copyright © 2010 - 2011 9SSSD. All Rights Reserved您所在位置: &
 &  & 
《struts2插件convention-plugin》.pdf19页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
文档加载中...广告还剩秒
需要金币:200 &&
《struts2插件convention-plugin》.pdf
你可能关注的文档:
??????????
??????????
Convention?Plugin 原文:http://cwiki.apache.org/WW/convention-plugin.html 翻译:石太祥
? ) 1?Introduction 2?Setup 3?Converting?a?Codebehind?based?application?to?Convention 4?Hello?world 5?Code?behind?hello?world 6?Results?and?result?codes 7?Chaining 8?XWork?packages 9?Annotation?reference o 9.1?Action?annotation o 9.2?InterceptorRef?annotation o 9.3?Result?annotation o 9.4?Namespace?annotation o 9.5?ResultPath?annotation o 9.6?ParentPackage?annotation o 9.7?ExceptionMapping?Annotation 10?Actions?in?jar?files 11?Automatic?configuration?reloading 12?Troubleshooting o 12.1?Tips o 12.2?Common?Errors 13?Configuration?reference Introduction 从?struts2.1版本开始,Convention?Plugin?作为替换替换?Codebehind?Plugin?来实现 Struts2?的零配置。 包命名习惯来指定?Action?位置 命名习惯制定结果(支持?JSP,FreeMarker?等)路径 类名到?URL?的约定转换 包名到命名空间(namespace)的约定转换 遵循?SEO?规范的链接地址 (即:使用?my-action?来替代?MyAction) 基于注解的?Action名 基于注解的拦截机(Interceptor) 基于注解的命名空间 (Nameespace) 基于注解的?XWork?包 默认?action?以及默认的结果(比如:/products?将会尝试寻找 com.example.actions.Products?或?com.example.actions.products.Index 进行处理)
无需配置 Convention即可使用 Convention,Co? nvention?的某些约束习惯可以通过配置 属性来控制,您也可以在类中覆写其中的方法来达到扩展目地。 *** 使用?Convention?插件,你需要将其?JAR?文件放到你应用的 WEB-INF/lib?目录中,你也 可以在你?Macen项目的 POM?文件中添加下面包依赖 org.apache.struts struts2-convention-plugin 2.1.6 转换基于?Codebehind项目到?Convention 跳转到此页面,查看需要修改的变化和小提示 如果你想在你系统中结合?Convention?插件使用 REST。需要在你项目的?struts.xml?中添 加
正在加载中,请稍后...
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&Struts2-convention-plugin全注解在开发中的应用(原创类)
Struts2-convention-plugin全注解在开发中的应用(原创类)
23:40:00来源:
既然Hibernate和Spring可以实现全注解式开发(Hibernate的注解式开主要体现在Hibernate的JPA,直接通过注解配置天生表取代了利用脚本来完成),使我们从复杂的配置中解放出来,Strut2引进的一款强大插件(Struts-Convention-plugin,官方文档cwiki.apche/WW/convention-plugin)可以是你也完成这样的任务. 首先你要搞清楚,这个插件它会默认扫描所有包名为struts、struts2、action、actions下面的类。然后它会对实现了Action接口以及类名以Action结尾的这些类,作为Action来进行处理。 你可以重新定义按哪种包名进行扫描。比如本例设定,只扫描web包下面的所有类,由于我们将Action类都放在这个包下面。 那这个插件是怎么实现原来的配置信息的呢?它的映射规则是这样的,对于以Action结尾的的类,往掉Action,取剩下的部分,将所有的字母转换为小写,假如有驼峰式的写法,则用"-"连接符来连接不同的单词,这是此插件的默认方式。终极转换之后的就是请求地址,还是用例子说明。 com.bolo.examples.web.base.UserAction 按照上面的规则,请求地址就应该是UserAction往掉Action后缀,将其余部分转换为小写,所以user就是我们的请求地址。不过,这还没有完,由于这里面还有一个命名空间的路径,在通常的配置文件中,一般会将不同的功能进行划分,在package标签里加上namespace属性。使用这个插件,它会为你自动配上命名空间,默认的就是前面说到的以那四种名称为根目录的命名空间,它们之后的都将成为命名空间的名称。 com.bolo.examples.struts.UserAction 映射为 /user.action com.bolo.examples.struts.base.UserAction 映射为 /base/user.action 要是我们不以struts或其它几种默认值为包名,又该怎么办呢?没关系,插件为我们提供了一种自定义根包的配置方式 &constant name="strutsnvention.package.locators" value="web" /& 上面这段配置是写在struts.xml里面的,它指定web为根,作用就相当于那四种默认值。 com.bolo.examples.web.base.UserAction映射为 /base/user.action com.bolo.examples.web.HelloAction 映射为 /hello.action com.bolo.examples.web.HelloWorldAction 映射为 /hello-world.action 请一定留意驼峰写法的映射方式,假如这里不是HelloWorld,而是Helloworld,那就不会再是hello-world.action,而是helloworld.action了。 既然已经知道了它的映射方式,接下来再看看这个插件是如何定义结果页面的。 convention默认会到/WEB-INF/content文件夹下面查找对应的结果页面,这个文件夹的名字可以修改,需要在struts.xml中定义 &constant name="strutsnvention.result.path" value="/WEB-INF/jsp" /& 文件夹的名字改成了jsp,这样定义后,convention就会在这个文件夹下面查找结果页面。它的查找路径与映射的命名空间有关。默认规则是,在请求的命名空间下面,根据请求名称再结合方法返回的字符串天生终极的结果页面名称,再配以后缀名。convention支持以jsp、ftl、vm、html、htm等五种后缀格式的文件。这里有个比较特殊的是假如方法返回success,那么可以不用将它与请求名称拼接起来,直接使用请求名称作为返回页面的名称。还是举例子说明。 package com.bolo.examples. import com.opensymphony.xwork2.ActionS public class HelloAction extends ActionSupport { public String execute() { return SUCCESS: } public String welcome() { return "welcome"; } } 比如上面这段代码,HelloAction处于我们定义的根包(web)下面,因此,它的action请求为hello.action。 这时,会默认执行execute()方法,由于返回的是success字符串,所以页面的名称可以简写为hello.jsp,但是当执行welcome方法时,由于返回的字符串为welcome,这时的页面名称则为hello-welcome.jsp。convention就是遵循这样的规则来进行命名,当然这只是最基本的,我们再来看看稍微复杂点的东东。 package com.bolo.examples.web. import org.apache.struts2nvention.annotation.R import org.apche.struts2nvention.annotation.R import com.opensymphony.xwork2.ActionS @Results({@Result(name = "success",location="role-list.jsp"),@Result(name = "redirectUser",location="user.action" type="redirectAction")}) public class RoleAction extends ActionSupport { public String execute() { return SUCCESS: } public String input() { return INPUT; } public String redirectUser() { return "redirectUser"; } } 这个RoleAction类的外部,加了两种注解,它们的作用相当于配置文件中的result标签。Results是一个Result类型的数组注解,里面可以包含多个Result配置。使用Result注解来设置返回类型与返回页面,是不预备采取默认的定义方式。比如HelloAction就是我们采取的默认方式。另外对于有些特殊的返回类型,也需要显式的进行定义。 由于我对RoleAction中的execute()方法返回结果进行了显式的定义,所以,它将不再返回默认的role.jsp,而是location指定的role-list.jsp,Result注解中的name值要与返回值对应。 当请求路径为role!input.action时,会执行input()方法,对于这个方法来说,由于没有进行显式的定义,所以它会按照默认的命名规则返回role-input.jsp。 而redirectUser方法的返回结果指定了一个type为redirectAction的值,这表示要对Action重定向,在location中也说明了是跳转到哪个Action。请留意这里指定的是user.action,当程序跳转到UserAction时,会默认执行execute方法。 假如说,你想执行其它方法该怎么办呢?可以在location里面这样定义,location="user!input.action"。请记住,重定向时,假如是跳转到其它Action或本Action中的其它方法,type要写成redirectAction。 更进一步,我还想带些参数过往,又该如何呢?请添加params属性,它是一个数组类型。可以这样定义,params={"role_id","${role_id}","role_name","超级治理员"}。convention文档中有说明,里面的参数是一个键值对,总是形如key,value,key,value。所以第一个role_id与第三个role_name都叫参数名,二和四则是参数值。另外留意下"${role_id}"的含义,这是使用的OGNL表达式取出存在于值栈中的名叫role_id的值。这是一种动态获取并赋值的方式,在采用配置文件的方式中,也可以这样运用,而role_name参数则是一个固定字符串值。需要特别留意的就是,作为参数名的role_id与role_name,一定要在指向的Action中有这两个同名的属性,并且还有set方法,这是用来给这两个属性赋值。而对于${role_id},则要在当前这个Action中,有它的get方法。用于取值。 补充说明一下,在Action类中定义的全局变量,不是非得给它都加上set、get方法,这是根据实际情况来设置的。简单的说get()是获得值,set()是设置值。比如,你现在要在页面上显示username,那么就对这个属性设置get方法,假如只是对username设置值,从页面传值到Action,那只需要对它设置set方法就可以了。除此之外,我们也可以不采用struts2提供的值栈方式得到参数值,而是使用非常熟悉的request. getParameter()方法来获取参数。至于实