- 浏览: 543150 次
- 性别:
- 来自: 湖南娄底
文章分类
- 全部博客 (252)
- C#资料 (0)
- java资料 (22)
- 数据库资料 (0)
- Java :开发中遇到的问题 (4)
- 书写属于我的人生 (6)
- spring (6)
- hibernate (16)
- struts (17)
- SSH (5)
- Linux操作系统 (1)
- Ext (5)
- Jquery (9)
- Tomcat部署出错 (2)
- xml (5)
- JSON (5)
- javascript 专题 (5)
- 开发环境配置 (2)
- web 开发 (27)
- Eclipse (7)
- Integration (1)
- 解决方案搜罗 (7)
- 网站收藏 (8)
- 测试框架 (1)
- iframe 专题 (6)
- JSTL (2)
- 各种插件收集 (2)
- 权限设计模型探讨 (1)
- DWR (1)
- log4j (3)
- java (11)
- java 格式化 (1)
- 软件工程 (2)
- 乱码专题 (1)
- UML (4)
- java 设计模式 篇 (1)
- 用法收集 (0)
- sourceforge apache solutions (2)
- Struts2 + JPA + Spring 开发 (1)
- 自定义工具箱 (0)
- IDE (4)
- opencms (1)
- jeecms (1)
- ant (0)
- maven (2)
- 数据库连接池 (0)
- spring MVC (0)
- android (1)
- web-server (1)
- iphone-开发环境 (1)
- iphone-软件开发 (6)
- iPhone-软件设计 (1)
- iphone-应用 (3)
- iPhone-设置 (2)
- iphone-软件开发-设计模式篇 (0)
- iphone-软件开发-OC基础 (9)
- iphone-软件开发- UI篇 (9)
- iphone-软件开发-工具类篇 (1)
- iphone-软件开发-第三方篇 (0)
- iphone-软件开发-特效篇 (2)
- iphone-软件开发-动画篇 (1)
- oracle (1)
- Java-Security (0)
- Three20 UI (1)
- IOS-HOW-TO-专题 (1)
- Mark-Develope Issues (1)
- iphone-软件开发- 资料参考篇 (1)
- C 语言-基本语法 (0)
- Java Servlet (2)
- Eclipse optimization (1)
- IOS Basic (0)
- ecl (0)
- FRONT-HTML (0)
- FRONT-JS (0)
- PHP (0)
最新评论
-
qq_29862421:
[[color=brown]color=yellow][url ...
java 上传图片同时获得图片的宽和高 -
hhb19900618:
NSString <==> NSNumber 之前 ...
OC 常用数据类型之间的转换 -
baohuan_love:
果然能解决问题,感谢分享
Tomcat Error Page配置 与 Error Page在IE下不能转发的问题 -
唐丽梅6313:
很细致。。
键盘样式风格有关设置-iOS开发 -
olived:
哥哥,为什么我的没有破解成功,总是提示许可文件丢失!!QQ:3 ...
[软件测试解决方案] soapUI 4.0.1破解方法
21.2 约定大于配置
21.2.1 约定大于配置的HelloWorld
先来做一个示例,让大家体会一下什么是约定大于配置。
1 :Convention Plugin
从Struts2.1版本起,Struts2官方就推荐使用Convention Plugin替换Codebehind Plugin来实现零配置。相对Codebehind Plugin而言,Convention Plugin有如下一些特点:
- 通过包的命名习惯来指定Action的位置
- 通过命名习惯来约定Result(包括Jsp、FreeMarker等)的路径
- 类名对应于URL的约定转换
- 包名对应于命名空间的约定转换
- 遵循SEO规范的链接地址,比如:使用test-action来替换TestAction
- 基于注解的Action名称约定
- 基于注解的拦截器约定
- 基于注解的命名空间约定
- 基于注解的XWork包
- 默认action以及默认的Result
等等。总之,使用Convention Plugin来实现零配置,会更灵活、更彻底,基本上可以做到不需要struts.xml来进行配置,甚至不需要注解进行配置,完全由Struts2依靠约定进行自动配置即可。
2 :设置环境
要使用Convention Plugin,需要把struts2-convention-plugin-2.1.8.1.jar包拷贝到web工程的WEB-INF\lib包里面。
3 :最简单的HelloWorld
要示范零配置,当然首先去掉struts.xml文件,缺省情况下,Convention Plugin会约定所有的结果页面都存放在WEB-INF\content文件夹下。
在WEB-INF文件夹下新建一个content文件夹,然后在content文件夹下新建一个名称为helloworld.jsp的文件,内容示例如下:
访问的方式是:在web上下文后面直接访问这个页面,不用加后缀,直接用名字就可以了,也就是URL为:http://localhost:9080/helloworld/helloworld,运行结果如下:
图21.1 约定配置示例
4 :说明
在这个HelloWorld里面,根本就没有写Action,当然也不存在struts.xml文件,完全是按照Convention Plugin的约定来运行,直接到WEB-INF/content文件夹下面,根据请求的url来找到对应的helloworld.jsp,然后直接运行 这个页面就得到了如上的运行结果。
那么对于Convention Plugin来说,到底有哪些约定呢?
21.2.2 常见的约定
1 : 默认把所有的结果页面都存储在WEB-INF/content文件夹下,这个值可以通过在struts.xml或者struts.properties文件中设置struts.convention.result.path这个属性的值来改变到其他路径。示例如下:
这样就将默认的result页面路径设置到了WEB-INF/mypage文件夹里面。
2 : 在应用启动的时候,Convention插件会自动搜索位于action、actions、struts、struts2的包及其子包下的所有Java类,以搜索Action类。
可以通过在struts.xml或者struts.properties文件中设置struts.convention.package.locators这个属性的值来改变搜索的文件夹。示例如下:
上面的示例定义了:在项目中,包路径中包含web和s2的将被视为包含Action类的路径而被搜索。
3 : 在应用启动的时候,Convention插件在上述包及其子包的路径下搜索满足如下条件的类来作为Action类:
(1) 实现com.opensymphony.xwork2.Action的类
(2) 类名以Action结尾的Java类
比如:在cn.javass.testproject.action包下面,有一个HelloAction的类,那么Convention插件会自动把这个HelloAction类当作Action来进行处理。
4 : 在映射Action的名称的时候,通常遵循如下规则:
(1) 如果该Action类名以Action作为后缀,那么会将后缀的Action去掉,其他的不做处理。
(2) 如果该Action类名采用驼峰式的写法,也就是每个单词首字母大写的写法,那么需要把所有字母变成小写,单词与单词之间以中画线隔开。
比如有一个Action的名称为HelloWorldAction,那么对应的映射资源的名称为hello-world。
(3) 如果是单个词的Action名称,那么把它的所有字母变成小写,作为对应的映射资源的名称。比如Action类名为HelloAction,它是以 Action作为后缀的,那么对应的映射资源的名称为先去掉Action后缀,得到Hello,又是单个词的名称,变成小小,那么最终对应的映射资源的名 称为hello。
5 :命名空间 :
从定义的package.locators开始到包结束的部分,就是命名空间。比如有一个Action类位于如下包中:cn.javass.testproject.action.t1.t2,那么命名空间就是/t1/t2。
命名空间对应着访问的url中的path部分,位于web上下文之后,具体的资源名称之前的部分,比如访问的url 为:http://localhost:9080/helloworld/t1/t2/hello-world,其中的helloworld就是web上 下文,而后面的hello-world就是要访问的资源的名称,中间的/t1/t2就是url的path部分。
命名空间还对应着WEB-INF/content文件夹下的子文件夹路径,如果命名空间为/t1/t2,那就以为着对应的result页面,应该放在WEB-INF/content/t1/t2文件夹下。
6 :对应resutl 页面的约定 :
(1) Result页面默认的都以WEB-INF/content作为定位的起点。
(2) 如果没有对应的Action存在,那么访问资源的名称就直接和页面的名称对应,要注意都是小写的
(3) 如果有对应的Action存在,那么对应的方式是:优先按照“Action的URL+Result的字符串+文件类型的后缀”的方式进行对应,如果没有对应的页面,那么也可以按照“Action的URL+文件类型的后缀”的方式进行对应。
7 :Action 链的约定
如果一个Action执行完成后,希望进入到另外一个Action,从而形成Action链,基本的约定如下:
(1) 第一个Action返回的result没有对应的页面存在。
(2) 第二个Action和第一个Action在同一个包中,而且第二个Action映射的URL为:第一个Action映射的URL+返回的result字符串,而且名称采用驼峰式的写法,也就是首字母大写。
21.2.3 示例常见的约定
看了上面的约定,感觉如何,很糟糕是不是,这些约定的规则太抽象了,具体怎么使用呢?接下来就通过示例来说明。
1:没有Action的时候,就如同前面约定大于配置的HelloWorld那样,访问的URL为:http://localhost:9080 /helloworld/helloworld,由于没有对应的Action,因此直接到WEB-INF的content文件夹下面,寻找名称为 “helloworld”,后缀可以为“.jsp”、“.htm”、“.html”等的页面,找到后就直接运行。
2:如果有如下的包结构和类的定义:
图21.2 示例的包结构
(1)如果要运行HelloWorldAction的话,对应的URL应该为:http://localhost:9080/helloworld /t1/t2/hello-world,而且在content文件夹下应该有t1文件夹,t1文件夹下应该有t2文件夹,t2文件夹下应该有相应的 result页面,如下图:
图21.3 t2文件夹示例
像这个示例中,同时存在hello-world-success.jsp和hello-world.jsp,那么会优先匹配到hello- world-success.jsp,如果不存在hello-world-success.jsp才匹配hello-world.jsp。
(2)先看看ConventionAction的实现,示例代码如下:
- public class ConventionAction extends ActionSupport{
- public String msg = "" ;
- public String userId = "" ;
- public String execute() throws Exception {
- System.out.println("now in ConventionAction" );
- if (userId== null || userId.trim().length()== 0 ){
- msg = "用户编号不能为空" ;
- return "toadd" ;
- }
- msg = "用户编号输入正确" ;
- return SUCCESS;
- }
- }
此时在content文件夹下,有如下图所示的页面:
图21.4 content文件夹
如果运行的URL为:http://localhost:9080/helloworld/convention?userId=22,那么会匹配 到ConventionAction 这个类,运行结束后,返回success。接下来到content文件夹下去优先匹配到convention- success.jsp,然后运行这个页面,展示给用户。
如果运行的URL为:http://localhost:9080/helloworld/convention,那么会匹配到 ConventionAction这个类,运行结束后,返回toadd。接下来到content文件夹下去优先匹配到convention- toadd.jsp,然后运行这个页面,展示给用户。
如果此时把convention-toadd.jsp文件去掉,然后再次运行,运行的URL同样为:http://localhost:9080 /helloworld/convention,那么会匹配到ConventionAction这个类,运行结束后,返回toadd 。接下来到 content文件夹下去寻找匹配的页面,没有能匹配上的,那么就会到ConventionAction这个类的同包下,寻找是否有 ConventionToaddAction 这个类,有这个类,那么就会运行这个类,相当于是Action链了。
发表评论
-
Struts1.x 国际化
2012-11-15 13:47 0对于一个面向全球的 Web应用程序,按着不同国家的要求显示相 ... -
struts2 convention配置中常见配置选项及说明
2012-08-20 12:47 2330?xml version="1.0" en ... -
研磨Struts2 之 第十三章 国际化
2012-06-20 18:42 1335视频配套PPT,视频地址【 研磨Struts2视频课程 】 ... -
使用struts2中的codebehind插件
2012-06-17 17:21 1300使用struts2中的codebehind ... -
struts2 WARN OgnlValueStack:49 - Error setting expression
2012-02-23 15:53 0今天我遇到下面这样的异常: WARN OgnlValueSt ... -
struts2日期类型转换【转载】
2012-02-10 15:41 912在Struts2中,一般的内置类型都会在由系统自动进行转 ... -
struts2注解
2011-12-19 22:04 2890一、配置web.xml <filt ... -
Struts2 文件上传 之 文件类型 allowedTypes
2011-12-19 21:59 5639Html代码 '.a' : 'a ... -
struts 2支持注解jar包收藏
2011-12-19 21:50 1256附件:struts2-conversion-plugin-2. ... -
为Struts 2应用程序创建进度条(等待页面)
2011-12-17 21:08 1058Struts 2模拟进度条的原理 对于一些需要较 ... -
struts 2 学习曲线
2011-11-17 12:48 959<说明:以后有待整理 ... -
struts2的struts.properties配置文件详解
2011-11-15 22:45 861【IT168 技术文档】 struts.acti ... -
struts2中几种获得request,session等对象的方法
2011-11-15 22:44 11671、通过ActionContext来获得举例代码如下: ... -
在struts1.2中使用拦截器
2011-08-31 20:41 1081要在struts1.2中使用拦截器,必须使用到以下三个包: ... -
struts1 validator验证框架
2011-07-24 19:49 1422struts1 validator验证框架 ... -
html:cancel按钮的作用,cancel按钮,取消按钮
2011-07-24 16:39 1026struts判断标签 html:cancel html ... -
Struts上传多个及N个文件的例子
2011-07-24 11:28 568一。 web.xml文件 Xml代码 ... -
struts通过javascript使按钮变灰为不可用,灰色按钮
2011-07-24 11:23 2058struts页面用javascript来实现使按钮的变灰 ...
相关推荐
### STRUTS2:零配置插件CodeBehind详解 #### 一、概述 Struts2框架作为Java Web开发中的一款重要工具,在简化Web应用程序开发方面提供了丰富的功能与灵活性。随着框架的发展,Struts2社区不断推出新的插件和技术...
Struts2 约定优于配置 Struts2 框架中,有一个非常重要的概念,即约定优于配置。这个概念的核心思想是,通过约定来减少配置的必要性。Struts2 通过约定优于配置,可以自动映射 Action 路径到 Result 页面路径。 ...
STRUTS2 Convention 零配置是Struts2框架中的一种高级特性,旨在简化应用程序的配置,让开发者能够更快地构建MVC应用。从Struts2.1版本开始,推荐使用Convention插件替代Codebehind插件,因为它更加自动化,几乎无需...
Struts2零配置是Struts2框架的一种简化配置方式,旨在减少XML配置文件的使用,提高开发效率。在传统的Struts2应用中,开发者需要在多个XML文件中配置Action、结果页面、拦截器等,而“零配置”则是对这种繁琐配置的...
"Struts2 零配置"是Struts2的一种特性,允许开发者在不编写大量XML配置文件的情况下,快速搭建和运行应用程序。这主要得益于Struts2的插件机制和注解支持。 首先,Struts2的零配置主要依赖于以下两个核心概念: 1....
6. **约定优于配置**:这是Struts2零配置的核心理念。框架提供了一系列的约定,如Action的命名、结果页面的位置等,遵循这些约定,开发者就可以减少很多配置工作。 7. **灵活性**:虽然零配置提供了很大的便利,但...
Struts2 Convention插件提供了一种全新的、更为简洁的零配置方式,它通过约定而非配置的方式来管理Action及其结果视图,大大简化了Struts2应用的开发流程。通过上述配置和使用方法,开发者可以更高效地构建Web应用...
这个名为"Struts2零配置+FreeMarker用户管理系统(UMS)"的项目,旨在通过注解的方式展示如何在不编写XML配置文件的情况下,利用Struts2和FreeMarker创建一个用户管理系统。 首先,我们来了解一下Struts2框架。Struts...
`Convetion`插件是Struts2实现零配置的核心工具,它基于“约定优于配置”的原则工作。 ### 1. Convention 插件简介 从Struts2.1版本开始,`Codebehind`插件被`Convetion`插件取代,以提供更全面的零配置支持。`...
Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展、模块化且易于管理的企业级应用程序。在当今网络安全日益重要的环境下,使用HTTPS协议来确保数据传输的安全性变得至关重要。Struts2支持HTTPS配置,可以...
4. **Interceptor拦截器**:Struts 2的拦截器是其强大之处,允许开发者在请求处理过程中插入自定义逻辑。书中会介绍默认的拦截器链,如Params、Validation和Execute interceptors,以及如何编写和配置自定义拦截器。...
在Struts2中,注解的引入使得开发者可以摆脱繁琐的`struts.xml`配置文件,实现“零配置”运行。 首先,让我们了解什么是注解(Annotation)。注解是Java提供的一种元数据机制,允许在源代码中嵌入信息,这些信息...
- `struts2-convention-plugin.jar`:约定优于配置的插件,简化Action和结果的配置。 - `struts2-spring-plugin.jar`:Spring集成插件,帮助管理Action的依赖注入。 - `xwork-core.jar`:XWork是Struts2的基础,提供...
`struts.xml` 文件是Struts2的核心配置文件之一,主要负责管理和定义应用程序中的Action映射以及相关的Result定义。具体来说,该文件包括以下几个关键部分: 1. **Action 映射**: - 指定每个Action的名称、执行的...
本文将深入探讨Struts2中的常量配置,包括基本的XML配置以及零配置的Convention模式下的常量设定。 首先,让我们了解Struts2框架中的常量配置。这些常量定义在`struts-default.xml`和`struts-plugin.xml`等配置文件...
然而,随着版本的更新,Struts2引入了一个名为Convention Plugin的新特性,旨在简化配置过程,实现所谓的“零配置”开发。 **什么是Struts2 Convention Plugin?** Convention Plugin是Struts2的一个插件,它基于...
以下是关于Struts2属性配置的详细说明: 1. **struts.xml配置**: Struts2的核心配置文件是`struts.xml`,通常位于类路径(classes根目录下)。这个文件包含了Action配置、拦截器堆栈、常量定义等关键信息。例如,...
在Struts2的版本2.3.1中,引入了一种称为“零配置”的特性,它极大地简化了应用程序的配置过程,使得开发者可以更快地进行开发而无需编写大量的XML配置文件。 "Struts2231零配置"意味着开发者可以不再需要像以前...