Struts2的Convention插件的好处与使用

发布时间:2014-10-22 13:54:59编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Struts2的Convention插件的好处与使用",主要涉及到Struts2的Convention插件的好处与使用方面的内容,对于Struts2的Convention插件的好处与使用感兴趣的同学可以参考一下。

  现在JAVA开发都流行SSH.而很大部分公司也使用了struts2进行开发..因为struts2提供了很多插件和标签方便使用..在之前开发过程中总发现使用了struts2会出现很多相应的配合文件.如果对配置文件的管理感觉比较麻烦..可以考虑使用COnvention插件可以进行零配置而且插件进行很多规范的约定也可以对开发合作当中按着它相应的规律开发..感觉也挺方便管理的.下面简单介绍它的使用.  首先我们需要使用到的jar包:  Java代码   struts2-convention-plugin-2.1.8.jar   struts2-core-2.1.8.jar   xwork-core-2.1.6.jar   commons-fileupload-1.2.1.jar   freemarker2.3.16.jar   web.xml的配置  Xml代码    <!-- Struts2过滤器 -->       <filter>           <filter-name>struts</filter-name>           <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>       </filter>              <filter-mapping>           <filter-name>struts</filter-name>           <url-pattern>*.action</url-pattern>   </filter-mapping>   struts.xml的配置  Xml代码   <?xml version="1.0" encoding="UTF-8"?>   <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">   <struts>    <!--++++++++++++++++++++++++++++++++++++++++++++++++开发状态 -->        <!-- 是否显示详细错误信息 -->       <constant name="struts.devMode" value="true" />       <!-- 国际化资源文件名称 -->       <constant name="struts.custom.i18n.resources" value="i18n" />       <!-- 是否自动加载国际化资源文件  -->       <constant name="struts.i18n.reload" value="false" />       <!-- convention类重新加载 -->       <constant name="struts.convention.classes.reload" value="true" />    <!--++++++++++++++++++++++++++++++++++++++++++++++++开发状态 -->        <!-- 浏览器是否缓存静态内容 -->       <constant name="struts.serve.static.browserCache" value="true" />          <!-- 上传文件大小限制设置 -->       <constant name="struts.multipart.maxSize" value="-1" />          <!-- 主题 -->       <constant name="struts.ui.theme" value="simple" />       <!-- 编码 -->       <constant name="struts.i18n.encoding" value="UTF-8" />       <!-- 后缀 -->       <constant name="struts.action.extension" value="action" />          <!-- 结果资源的路径 -->       <constant name="struts.convention.result.path" value="/WEB-INF/template/" />       <!-- URL资源分隔符 -->       <constant name="struts.convention.action.name.separator" value="_" />              <package name="basePackage" extends="struts-default">           <interceptors>               <interceptor-stack name="baseStack">                   <interceptor-ref name="exception" />                   <interceptor-ref name="alias" />                   <interceptor-ref name="servletConfig" />                   <interceptor-ref name="i18n" />                   <interceptor-ref name="prepare" />                   <interceptor-ref name="chain" />                   <interceptor-ref name="debugging" />                   <interceptor-ref name="scopedModelDriven" />                   <interceptor-ref name="modelDriven" />                   <interceptor-ref name="fileUpload" />                   <interceptor-ref name="checkbox" />                   <interceptor-ref name="multiselect" />                   <interceptor-ref name="staticParams" />                   <interceptor-ref name="actionMappingParams" />                   <interceptor-ref name="params">                       <param name="excludeParams">dojo\..*,^struts\..*</param>                   </interceptor-ref>                   <interceptor-ref name="conversionError"/>                   <!-- 配置方法级别的校验 -->                   <interceptor-ref name="validation">                       <param name="excludeMethods">input,back,cancel,browse</param>                       <param name="validateAnnotatedMethodOnly">true</param>                   </interceptor-ref>                   <interceptor-ref name="workflow">                       <param name="excludeMethods">input,back,cancel,browse</param>                   </interceptor-ref>               </interceptor-stack>           </interceptors>              <!-- 配置默认拦截器栈 -->           <default-interceptor-ref name="baseStack" />              <!-- 未到找Action指向页面 -->           <default-action-ref name="errorPage" />              <action name="errorPage">               <result type="redirect">/html/error_page_404.html</result>           </action>          </package>                <package name="shop" extends="basePackage" namespace="/shop/">              <global-results>               <result name="error" type="freemarker">/WEB-INF/template/shop/error.ftl</result>           </global-results>          </package>          </struts>   action的代码  我在Myeclipse新建的web项目中建立action.shop.HelloAction  Java代码   public class HelloAction  extends ActionSupport {       public String execute() {            return "test";        }    public String mysql() {           return "test";        }   }   然后你在WEB-INF/template新建文件夹shop(这里新建的文件夹名字要和你建立的Action对应的存放文件夹名字符合)  然后建立文件一个jsp或者tld或者jsf文件名字为hello_test使用http://localhost:8080/web/shop/hello.action时将会直接跳到该页面进行显示  加了方法的名的话访问就使用http://localhost:8080/web/shop/hello!mysql.action  下面详细解析下struts.xml中Convention配置  1.1. 设置结果页面路径  默认所有的结果页面都存储在WEB-INF/content下,你可以通过设置struts.convention.result.path这个属性的值来改变到其他路径。如:  Xml代码   <constant name="struts.convention.result.path" value="="/WEB-INF/template/" />   这样你在就必须将你需要跳转的页面放在template下面  struts2支持.jsp .html .htm .vm格式的文件。  下面是actiong和结果模版的映射关系:  URL  Result  File that could match  Result Type  /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的文档  [url]http://struts.apache.org/2.1.6/docs/convention-plugin.html [/url]  当然,简单的通过默认的方式来进行配置不能完全满足实际项目的需要。所幸,convention的零配置是非常灵活的。  1.2. 设置Convention搜索包  默认包路径包含action,actions,struts,struts2的所有包都会被struts作为含有Action类的路径来搜索。你可以通过设置struts.convention.package.locators属性来修改这个配置。如:  Xml代码   <constant name="struts.convention.package.locators" value="web,action" />    则定义了在项目中,包路径包含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 (implements com.opensymphony.xwork2.Action)  com.example.struts.company.details.ShowCompanyDetailsAction  1.3. 命名空间  命名空间。从定义的.package.locators标示开始到包结束的部分,就是命名空间。举个例子:  xxx.xxx.action.shop.helloAction的命名空间是:”/shop”。  xxx.xxx.action.shop.detail.UserAction的命名空间是:”/shop/detail”  1.4. Actin类名路径分割  Convention通过如下规则确定URL的具体资源部分:去掉类名的Action部分。然后将将每个分部的首字母转为小写,用’-’分割,你可以设置struts.convention.action.name.separator 如  Xml代码   <contant name="struts.convention.action.name.separator" value="_" />   还是举个例子:  HelloAction->hello HelloWorldAction ->hello-world。  结合上面的。  对于action.shop.HelloAction,映射的url就是/WEB-INF/template/shop/hello_test.jsp  以上是它简单而常使用的方式和配置  很久没写日志了..感觉计划总赶不上变化!也许是自己太懒了


上一篇:在u-boot中添加命令hello
下一篇:黑马程序员_JAVA笔记15——集合框架(泛型)

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款