Convention插件
考虑使用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 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> <!-- 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> <?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";
}
} 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/" /> <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" /> <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="_" />
Convention插件的更多相关文章
- Struts2 Convention插件的使用(4)使用@Action注解返回json数据
package com.hyy.action; import java.util.HashMap; import java.util.Map; import org.apache.struts2.co ...
- Struts2 Convention插件的使用(1)
刚刚查阅官方文档(convention-plugin.html)并学习了Struts2的Convention插件,文章这里只作为一个笔记,建议大家去看官方文档比较清晰和全面. 需要在项目添加这些包 c ...
- struts2基于Convention插件的约定映射使用
一.首先说明一点:所谓的基于Convention插件的约定优于配置的使用,并不是严格意义上的零配置,struts.xml文件并不能完全舍弃. 获得Convention插件功能,所必需的jar包有:|a ...
- Convention插件与“约定”支持
主要用于Action映射和Result映射 struts2-convention-plugin-2.3.16.3.jar 会将 |--实现了com.opensymphony.xwork2.Action ...
- struts2 Convention插件零配置,使用注解开发
从struts21开始,struts2不再推荐使用codebehind作为零配置插件,而是改用Convention插件来支持零配置.与以前相比较,Convention插件更彻底. 使用Conventi ...
- Struts2 注解零配置方法(convention插件使用)
最近接触到一个新的项目,是做一个使用S2SH的电子商务商城的二次开发.之前使用过S2SH,在此之前的项目中,Struts2 使用的是XML配置而这个项目是使用注解.在这个项目中,注解还不需要使用Act ...
- struts2 Convention插件好处及使用
现在JAVA开发都流行SSH.而很大部分公司也使用了struts2进行开发..因为struts2提供了很多插件和标签方便使用..在之前开发过程中总发现使用了struts2会出现很多相应的配合文件.如果 ...
- Struts2的Convention插件
Struts2的Convention插件的作用:在Struts2中的/lib/struts2-convention-plugin-x.x.xx.x.jar Convention插件会自动搜索位于act ...
- struts2 convention插件
1.struts2自2.1以后推荐使用Convention Plugin支持struts零配置支持(引入jar:struts2-convention-plugin-2.x.x.jar)①convent ...
随机推荐
- node.js环境搭建
(1)Node.js安装 Node.js安装包及源码下载地址为: https://nodejs.org/download/ , 双击下载后的安装包.msi,检查Node.js版本命令:node - ...
- Geoserver发布WMS服务出错分析
使用Geoserver发布一个空间表,在图层预览的过程中没有任何问题,但是当我根据这个空间表传创建视图再发布wms服务,访问时就会报错,错误信息如下: Caused by: java.sql.SQLE ...
- java获取Json和http状态码
最近再做接口自动化测试,其中有几个方法比较重要 1.获取http状态码 /* * 返回接口状态码 * */ public static String getHttpCode(String url) { ...
- Jenkins遇到问题三:调整jdk版本不生效的解决办法
由于项目统一环境的需要,需要将jdk版本从1.7降到1.6,通过修改“系统管理”菜单下的“系统设置”下的jdk环境变量: 将红圈中的路径修改为jdk6,如图所示:保存退出:发现通过”读取设置“和重启j ...
- C r and n(组合数)
找出n个数的r个数的组合,如下形式: 输入:n,r分别为 5, 3 输出: 5 4 3 5 4 2 5 4 1 5 3 2 5 3 ...
- 解说mysql之binlog日志以及利用binlog日志恢复数据
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...
- [解决方案]在Sql Server 2008/2005 数据库还原出现 3154错误
在Sql Server 2008/2005 数据库还原出现 3154错误 解决方法1:不要在数据库名字上点右键选择还原,而要是在根目录“数据库”三个字上点右键选择还原,然后再选择数据库,问题便可以解决 ...
- Oracle11G 卸载步骤
(之前因为不知道偶电脑是因为安装了oracle后,才导致的长达两周的开机速度要足足10分钟,以前只有一分钟不到!可以想象oracle的服务启动的强大,知道后,偶果断立即卸载掉!) 一.在oracle1 ...
- 3D数学基础:四元数与欧拉角之间的转换
在3D图形学中,最常用的旋转表示方法便是四元数和欧拉角,比起矩阵来具有节省存储空间和方便插值的优点.本文主要归纳了两种表达方式的转换,计算公式采用3D笛卡尔坐标系: 单位四元数可视化为三维矢量加上第四 ...
- scrapy 登录
说明: 本文参考了官网文档,以及stackoverflow的几个问题 注意: 下面这个爬虫不能实际运行!我只是用它来展示登录,以及之后如何处理. 方式一:FormRequest import scra ...