- 浏览: 227016 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
thebye85:
引用 另外一个需要注意的问题,就是SessionMap和隐藏对 ...
WebWork深度探索之Session -
lanxiaoshuang:
写的真好
说的都是概念——有关编程范式 -
lhz:
grep unique wc你需要的只是这么几个小工具而已
努力做个Pragmatic Programmer
看到这样的题目,看到“配置”这个key word,你的脑海中是不是会呈现出一堆堆的XML、properties文件呢?是的,我说的配置,就是各位平常在做项目的时候经常碰到的配置文件。在一个项目中,配置文件是很重要的,不管它是简短的还是冗长的。配置文件指出了一个系统中可变化、可设定的部分,也就是说一个系统将其中一部分信息独立出来,将设定这些信息的权利交给了用户,这样用户就可以根据自己的需要来进行设定,从而增强了系统的灵活性及适应性。
虽然配置文件很重要,但是它通常都给人以冗长而繁琐的感觉。哪怕现在绝大多数的配置文件都是XML,哪怕XML本身也是自描述的,配置文件都很难给人以一种美感,它在大部分情况下实在是太冗长了。在我现在所做的一个使用Portal的项目中,配置文件portlet.xml的行数就高达六千行以上,web.xml也有近三千行!这样的配置文件除了给机器看之外,没有人愿意去看它了。难道配置文件由始至终都是那样丑陋吗?在接触WebWork之前,我确实就是这样认为的,但是当WebWork的配置文件呈现在眼前的时候,我的偏见彻底被颠覆了,我发现配置文件原来也可以那样的美。不信?让我们看看去!
与WebWork相关的配置文件有三个:通用的web.xml、xwork.xml和webwork.properties。web.xml中的配置跟其他的框架一样,保持着简练的风格。如果你不打算使用WebWork的标签库,就只需要在web.xml中定义好作为Request Dispatcher的Servlet即可:
<servlet>
<servlet-name>webwork</servlet-name>
<servlet-class>com.opensymphony.webwork.dispatcher.ServletDispatcher</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>webwork</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
而webwork.properties中则是定义了很多与Web Application相关的属性,便于你进行配置。在应用程序中你可以直接通过Configuration类的getString方法访问到文件中定义的属性值,非常方便。同时,这些属性涵盖的面很广,除了常见的locale、encoding等,还有以下几个特别的属性:
webwork.custom.properties:用于指定外部的properties配置文件。应用程序可以通过Configuration类的getString方法很容易地访问到外部配置文件中的属性值,这跟访问webwork.properties文件中属性值的方式是完全一致的。webwork.custom.properties属性是相当有用的,当你需要增加一些应用程序所特有的属性值时,你可以把这些属性值定义在一个或者几个properties文件中,还可以将这些properties文件存放到相应的module里面,这样就会使得你的应用程序结构更加清晰,更易于管理。以下是一个简单的例子。譬如应用程序有两个module:一个是Investment(代码存放在com.fantasysoft.investment中),另一个是Banking(代码存放在com.fantasysoft.banking中)。我们为这两个module创建相应的properties文件:investment.properties和banking.properties,而这两个配置文件可以分别存在各自的package中。最后我们只要将webwork.custom.properties的值作如下设定,就可以访问这两个.properties了:
webwork.action.extension:用于改变action对应的扩展名。在默认的情况下,action对应的扩展名是action,但是你也可以改为你喜欢的名字,譬如do。如果你改变了这个值之后,别忘了更新web.xml中servlet-mapping的设置哦;
webwork.tag.altSyntax:用于设置使用哪一种JSP Syntax,可选值为true或者false。详情请参见我之前的Post——关注WebWork(三);
webwork.configuration.xml.reload:用于设置是否支持配置文件在运行期的重新装载,可选值也是true或者false,默认值为false。一旦将这个属性设为true,在你修改了任何配置文件之后,WebWork都会自动装载最新的内容,这免去了重新启动项目或者服务器的繁琐过程,大大提高了开发效率。
webwork.properties就讲到这里,接下来轮到三个配置文件中的最重量级成员——xwork.xml出场了。xwork.xml可以说是WebWork配置文件的核心部分,因为action、result以及interceptor都是在这里定义的。这样乍一听,你或许会觉得一个大型项目中的xwork.xml一定会很庞大。嗨,你可别忘了这篇Post的标题是配置之美噢,冗长又何来美呢?
xwork.xml的最大特点是:它很灵活,一切都从如何减少配置的重复性去考虑;它具有很多面向对象的概念,譬如继承、组合、namespace和package等等。一个简单而实用的xwork.xml是这样的:
<include name="webwork-default.xml"/>
<package name="default" extends="webwork-default">
<default-interceptor-ref name="defaultStack"/>
<action name="login" class="com.fantasysoft.Login">
<result name="input">login.jsp</result>
<result name="success" type="redirect">loginSuccess.jsp</result>
</action>
</package>
</xwork>
这里包含了几个知识点:
1、action的定义:这一点很简单,只需要提供action的名字和对应的Java类即可;
2、result的定义:result的定义也很简单,提供result的名字、result的值(也就是login.jsp和loginSuccess.jsp)和result的type(redirect)即可。对于第一个名为input的result,虽然没有没有定义type,但是使用了默认的type:dispatcher。至于这个默认的type存在哪里呢?在以下的内容将会详细介绍;
3、interceptor的引用:XML中的<default-interceptor-ref name="defaultStack"/>就是对interceptor或者是interceptor栈的引用。从tag的命名default-interceptor-ref可以知道这个interceptor(interceptor栈)是默认的设置,也就是所有的action在没有定义自己特有的interceptor引用的时候,都会使用这个默认的interceptor引用;
4、include标签的使用:通过include标签可以xwork.xml包含另外的XML文件,当然被包含的XML也必须符合同样的DTD。这个特性是相当有用的,因为一个大型的应用程序需要划分为众多小型模块进行开发,而每个小模块又可以拥有自己的xwork.xml文件,模块之间互不影响。到了将这些小模块合并的时候,只需要将这些小模块各自的xwork.xml文件改名并且通过include标签包含到全局的xwork.xml即可,从而简化了应用程序的打包发布过程。
5、package的使用:所有的关于action、result、interceptor等等的设置都是囊括在package之下的,一个合法的xwork.xml必须指明使用的package。对于package的概念,关键是extends的使用。通过extends声明就可以引入被扩展的package所定义的设置,这跟OO中的继承是相当类似的。当一个配置在当前的package找不到的时候,就会到父package中查找,如果还是找不到,就将一直追溯到package继承体系的根节点了。上面的第二点所说的默认result type就是在webwork-default这个package中被定义的。对于package还有一个重要的知识点需要记住:package名字在整个应用程序中不能被重复定义,必须是唯一的。
一个简单的xwork.xml里面确实暗藏乾坤啊,而这里也只是讲述了部分内容。但是从这些简单的内容,你应该可以感觉到WebWork设计者的一番良苦用心:竭力减少冗余,促进模块化。而事实上,他们确实做到了,因为呈现在我们面前的配置文件简单明了而且脉络清晰。
发表评论
-
在String的面前丢脸
2004-06-18 00:39 1262重返C++的世 ... -
Summary of function parameter
2004-07-14 02:33 1141对C++这位入 ... -
此Vector非彼Vector
2004-08-05 15:51 1046在学习STL的过程中,我发现了一个熟悉的面孔— ... -
模板——泛型和STL的基础
2004-08-07 01:01 1325所谓泛型,从字面上可以猜想,就是泛化的类型(型 ... -
让人头痛的Vector(提问篇)
2004-08-07 16:55 1228在写完了此Vector非彼Vector这篇随笔 ... -
我该怎样shuffle呢
2004-08-10 01:47 1179在STL的Algorithm中有着这样的一种算 ... -
WebWork初体验
2004-08-11 17:43 1290在这篇ASP.NET ... -
WebWork深度探索之盲人摸象
2004-08-12 23:54 1127昨天尝试着利用WebWork做了一个小功能[1 ... -
WebWork深度探索之号外
2004-08-14 09:03 1039昨天开始对WebWork进行了一些初步的探索[ ... -
WebWork深度探索之标签库
2004-08-15 00:28 1530由于WebWork本身提供了一套自定义的标签库 ... -
什么是Law of Demeter
2004-08-15 14:22 1231今天一如昨日,继续对WebWork进行小打小闹 ... -
所谓的Dumb Question
2004-08-15 17:16 1033为了能够更 ... -
WebWork深度探索之标签库(续)
2004-08-16 15:58 1128昨日对WebWork的标签库进行了小小的研究[ ... -
WebWork深入探索之初见端倪
2004-08-19 16:35 893使用WebWork进 ... -
建网站的小Tips
2004-08-20 23:58 1034这几天都在忙着做一个小网站,从网页美工到后台处 ... -
URL与RequestDispatcher
2004-08-21 23:58 1002今天照例继续自己的网站建设之旅,原本以为可以大 ... -
WebWork深度探索之Pitfall
2004-08-25 14:31 957在使用WebWork进行开发的过程中,她的种种 ... -
WebWork深度探索之Session
2004-08-26 15:38 1523昨天上午刚 ... -
搞笑的textarea标签
2004-08-31 18:17 1582很久没有用 ... -
两天四疑问
2004-09-03 10:56 9939月份的前两天,我仍然做着网站开发的工作。在开 ...
相关推荐
1. **Action配置**:在这个文件中,你可以声明和配置你的Action类,指定它们的类名、映射路径、以及与之关联的业务逻辑。例如,你可以定义一个名为`UserAction`的类,映射到`/user/save`路径上,这样当用户访问这个...
在这个“WebWork2配置”主题中,我们将深入探讨如何设置和优化WebWork2框架,以便在你的项目中实现高效且可维护的代码。 首先,WebWork2的配置主要涉及到以下几个方面: 1. **web.xml配置**:这是所有Java Web应用...
标题 "spring+hibernate+webwork相关配置" 指的是一个集成开发环境的配置,其中涵盖了三个关键的技术框架:Spring、Hibernate和WebWork。这些框架在Java Web开发中非常常见,主要用于实现依赖注入、持久化管理和MVC...
Struts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MV
Struts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MV
Struts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MV
Struts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MV
Struts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MV
Struts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MV
Struts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MV
Struts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MV
Struts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MV
Struts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MV
Struts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MV
Struts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MVStruts2.1权威指南——基于WebWork核心的MV
《Struts 2.1权威指南》特点为:1.经验丰富,针对性强 《Struts 2.1权威指南》凝聚了作者大量的实际开发经验和感悟。作者依照读者的学习规律,首先介绍基本概念和基本操作,然后对内容进行深入讲解。...
`xwork-default.xml` 包含了 WebWork 的默认配置,而自定义配置可以通过 `include` 元素引入。在提供的配置中,创建了一个名为 "default" 的包,并扩展了 "webwork-default" 包,这意味着它继承了父包的所有配置。 ...
至于`xwork.xml`,这是WebWork的配置文件,定义了Action、拦截器等核心元素。在实际项目中,这个文件通常会包含Action的配置、拦截器链、类型转换规则等信息。不过,由于提供的内容不完整,这里无法详细展开。 整合...