`

struts2 Convention插件好处及使用

阅读更多
    现在JAVA开发都流行SSH.而很大部分公司也使用了struts2进行开发..因为struts2提供了很多插件和标签方便使用..在之前开发过程中总发现使用了struts2会出现很多相应的配合文件.如果对配置文件的管理感觉比较麻烦..可以考虑使用COnvention插件可以进行零配置而且插件进行很多规范的约定也可以对开发合作当中按着它相应的规律开发..感觉也挺方便管理的.下面简单介绍它的使用.
首先我们需要使用到的jar包:
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的配置
 <!-- 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 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
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这个属性的值来改变到其他路径。如:

<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属性来修改这个配置。如:

<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 如

<contant name="struts.convention.action.name.separator" value="_" />


还是举个例子:

HelloAction->hello HelloWorldAction ->hello-world。

结合上面的。

对于action.shop.HelloAction,映射的url就是/WEB-INF/template/shop/hello_test.jsp

以上是它简单而常使用的方式和配置
很久没写日志了..感觉计划总赶不上变化!也许是自己太懒了
3
0
分享到:
评论
3 楼 唐御风 2012-12-21  
谢谢 楼主大人
2 楼 dtfy56924 2012-11-26  
frankco 写道
楼主给对shop++很熟不?

算熟悉 研究过一段时间
1 楼 frankco 2012-10-19  
楼主给对shop++很熟不?

相关推荐

    Struts2插件convention

    在使用Struts2 Convention插件时,以下是一些关键知识点: 1. **类命名规范**:类名通常应该以`Action`结尾,比如`UserAction`。这样,Struts2会自动将这些类视为处理请求的Action类。 2. **方法命名**:方法名将...

    STRUTS2 Convention零配置

    Struts2框架自2.1版本开始引入了一种新的零配置方式——Convention插件。与之前的Codebehind插件不同,Convention插件更加彻底地摆脱了对配置文件的需求,包括struts.xml以及Annotation等传统配置方式,通过约定而非...

    struts2的Convention插件说明书(中文版)

    Struts2的Convention插件是一种自动化配置工具,从2.1版本开始引入,旨在减少XML配置,实现Struts2应用的零配置或者最少配置。该插件通过一系列预定义的命名规则和约定,自动解析和映射Action、结果页面、拦截器等...

    struts2-Convention插件使用

    ### Struts2-Convention插件使用详解 #### 引言 自Struts2.1版本起,Convention插件被引入,旨在替代原有的Codebehind插件,实现框架内的零配置理念。这一插件的设计思想围绕着减少XML配置的依赖,通过代码结构与...

    struts2的convention配置详解 很全

    Convention插件是Struts2提供的一种自动化配置方式,它旨在减少XML配置文件的数量,提高开发效率。这篇详尽的指南将深入讲解Struts2的Convention配置,让你更好地理解和应用这一特性。 首先,了解什么是Conventions...

    Struts2 convention

    而使用Struts2 Convention插件后,大部分配置可以通过遵循一定的命名规则自动完成,极大地提高了开发效率。 例如,一个名为`UserAction`的Java类,其`save`方法可以自动映射到`/user/save`的URL上。这种约定使得...

    Struts2 Convention Plugin中文文档 Annotion

    Struts2 Convention Plugin 是从 Struts2.1 版本开始引入的一个插件,它的主要目标是实现 Struts2 框架的零配置。通过约定优于配置的原则,开发者可以更加专注于业务逻辑,减少大量的 XML 配置工作。以下是 ...

    如何使用struts2的零配置插件convention

    要使用`Convetion`插件,首先需要将`struts-convention-plugin-x.x.x.jar`文件添加到项目的`WEB-INF/lib`目录下。然后,插件会自动扫描指定的包(默认是`action`, `actions`, `struts`, `struts2`)内的所有Java类,...

    struts2 convention plugin(插件) 测试项目

    Struts2 Convention Plugin是Apache Struts框架的一个重要组成部分,它为开发者提供了一种更为便捷的配置方式,使得在Struts2应用中实现MVC模式变得更加简单。这个测试项目旨在帮助我们理解和掌握如何在实际开发中...

    struts2的convention插件使用.docx

    Struts2的Convention插件是其框架中的一个重要组成部分,旨在简化配置,提供一种自动映射Action类到URL路径的方法,使得开发更加高效。以下是关于Conventio

    struts2的插件使用

    Struts2的核心功能包括动作调度、结果映射、拦截器等,而其强大的扩展性则体现在众多插件的使用上。这篇博文主要探讨的是Struts2中的"convention-plugin",这是一个自动配置插件,极大地简化了开发过程。 在传统的...

    Struts2-rest插件(有注释)

    从 Struts 2.1 开始,Struts 2 改为使用 Convention 插件来支持零配置。Convention 插件彻底地抛弃了配置信息,不仅不需要使用 struts.xml 文件进行配置,甚至不需要使用 Annotation 进行配置。而是由 Struts 2 根据...

    简述STRUTS2_Convention零配置

    首先,要启用Convention插件,你需要在项目的WEB-INF/lib目录下添加struts-Convention-plugin-2.1.6.jar文件。然后,框架会自动扫描特定包下的Java类,寻找符合Action条件的类。这些条件包括实现了`...

    struts2-convention-plugin-2.3.32.jar

    在给定的文件"struts2-convention-plugin-2.3.32.jar"中,我们关注的是Struts2的Convention插件,版本号为2.3.32。这个插件是Struts2框架的一个重要组成部分,旨在提供更加灵活和自动化的配置方式。 Convention...

    struts2采用convention-plugin实现零配置

    Struts2是一个流行的Java Web应用程序...Convention Plugin是Struts2的一个插件,它基于“约定优于配置”的原则,自动地为Action类和结果页面建立映射,从而极大地减少了手动配置的需求。通过自动探测和推理,Conventio

    struts2-convention-plugin-2.1.6.jar

    在传统的Struts2应用中,开发者通常需要在`struts.xml`中定义每个Action及其对应的类、方法、结果页面等,而使用此插件后,大部分配置可以通过命名约定自动完成。 具体来说,当使用`struts2-convention-plugin`时,...

    Struts2_Convention_Plugin中文文档

    9. **插件集成**:Struts2的其他插件,如Struts2-dojo-plugin或Struts2-json-plugin,可以无缝地与Convention Plugin一起使用,提供更丰富的功能,如Ajax支持和JSON输出。 10. **调试与日志**:在开发过程中,开启...

    struts _convention _plugin application

    - Convention插件可以很好地与其他Struts2插件配合使用,如Tiles插件、Freemarker插件等,提供更加灵活的视图渲染。 总结,Struts2 Convention插件极大地简化了Struts2应用的开发流程,减少了XML配置,提高了开发...

Global site tag (gtag.js) - Google Analytics