分享
 
 
 

Struts 1.2.1新特点简介(1)

王朝java/jsp·作者佚名  2006-01-30
窄屏简体版  字體: |||超大  

Struts 1.2.1新特点简介(1)

目前Struts得到了广泛的应用,有人称它为Java Web框架默认的事实标准,自2003年6月apache推出Struts 1.1版本以来,apache对Struts修改和升级工作,其中Struts 1.2.1版本是这一年修改和升级工作的直接结果。Struts 1.2.1版本改正了Struts 1.1版本中存在的错误和不足,同时,增强、改进以及增加了许多新的功能,这些特点,值得广大Struts学习、开发者的关注。建议有条件的开发人员,可升级到Struts 1.2.1版本来开发,这样能充分利用Struts的新功能。有关Struts 1.2.1版本的介绍,可到Struts官方网站http://struts.apache.org/userGuide/release-notes-1.2.1.html查看,还可以到http://cvs.apache.org/dist/struts/v1.2.1/下载。JavaWebStudio开发工具的Visual Struts最新版本也完全支持Struts 1.2.1版本的开发(http://javawebstudio.51.net/)。

1、不再提供GenericDataSource和GenericConnection接口

从http://struts.apache.org/userGuide/release-notes-1.2.1.html看,GenericDataSource和GenericConnection接口都已不再提供,从下载的jakarta-struts-1.2.1也看出,已去掉了Struts1.1中的struts-legacy.jar,即整个legacy都去掉了。但struts.jar中还是保留了DataSourceConfig类。还保留了datasources管理功能。

GenericDataSource并不是非常必要的好用,其中因为之一是这个datasource需要用ActionServlet中定义的方法从Action类访问数据源,不能从其它类中用它。

在Struts实现自定义数据库连接池的方法很多,其中JavaWebStudio(详情可参考《Struts开发实例》)提供的自定义数据库连接池,通过web.xml配置引入是一种方法,另外,也可采用Struts1.2.1建议的通过Plug Ins Configuration (插件配置)的方法实现,例如struts自带例子struts-config.xml中的配置:

<plug-in className="org.apache.struts.webapp.example.memory.MemoryDatabasePlugIn">

<set-property property="pathname" value="/WEB-INF/database.xml"/>

</plug-in>

另外,Jakarta的DBCP也是一个选择。

2、增加的数据验证组件(Validator enhancements)

· ValidWhen:Struts的 Validator支持 ValidWhen 规则,可实现一个数据的验证依赖于另一个数据的验证;

· IntRange:可验证单选select-one标签和radio标签功能. Example: This allows populating combo boxes with valid choices plus one additional choice with a caption something like "Choose one" and a value 0f "-1". Then when the user attempts to submit the form, you can look for the value of "-1" and advise if nothing was selected.

· 可强制客户端Javascript validation去较验所有的约束,代替在第一次出错造成的中断。

· "required" 数据的验证处理checkboxes, radio,select-one, 和 select-multiple标签.

· 标准的validateUrl规则可检查URL的有效性.

Designing Complex Validations with validwhen

一个常用的数据验证设计是验证一个数据域依赖于另一个数据域的情况(例如,如果你要用户输入两次密码,如果这两个密码相同才能通过),还有就是只有当某一个数据域依赖于有效时其它的一个数据域才有效. validwhen 数据验证规则提供上述情况的实现方法.

例如:

(1)

<field property="emailAddress" depends="validwhen">

<arg0 key="userinfo.emailAddress.label"/>

<var>

<var-name>test</var-name>

<var-value>((sendNewsletter == null) or (*this* != null))</var-value>

</var>

</field>

(2)

<field property="quantity" indexedListProperty="orderLines" depends="validwhen">

<arg0 key="orderform.quantity.label"/>

<var>

<var-name>test</var-name>

<var-value>((orderLines[].partNumber == null) or (*this* != null))</var-value>

</var>

</field>

(3)

<field property="nbaPointGuard" depends="validwhen">

<arg0 key="careers.nbaPointGuard.label"/>

<var>

<var-name>test</var-name>

<var-value>((heightInInches >= 60) or (*this* == null))</var-value>

</var>

</field>

Unstoppable JavaScript Validations

可强制客户端Javascript validation去较验所有的约束,代替在第一次出错造成的中断。通过设置一个新的属性stopOnFirstError在Validator PlugIn实现来完成第一次出错设置. 例如struts-config.xml设置片段:

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">

<set-property property="pathnames"

value="/WEB-INF/validation.xml,/WEB-INF/validator-rules.xml"/>

<set-property property="stopOnFirstError" value="false"/>

</plug-in>

3、通配符

在action-mappings配置中,可采用通配符的配置方式,例如Struts自带的例子中的struts-config-registration.xml文件中有:

<!-- Generic edit* mapping -->

<action

path="/edit*"

type="org.apache.struts.webapp.example.Edit{1}Action"

name="{1}Form"

scope="request"

validate="false">

<forward

name="failure"

path="/mainMenu.jsp"/>

<forward

name="success"

path="/{1}.jsp"/>

</action>

“/edit*”代表了所有以“edit”开头的路径,{1}代表了“*”在实际表单提交中的内容(字符串)。

通配符模式可包含一个或多个如下的专门符号:

*

不含斜线 ('/') 字符.

**

含斜线 ('/') 字符.

\character

反斜线字符用于分隔顺序. \* 匹配 ('*'), and \\匹配('\').

在action mapping 和 action forwards中, 通配符{N}的序号取值N 可取从 1 到 9 . 所有的请求 URI 可采用通配符{0}.

目前action mapping支持通配符的属性有:

· type

· name

· roles

· parameter

· attribute

· forward

· include

· input

action mapping将要支持通配符的属性有:

· path

4、Maven 项目文件

在Struts项目本身的开阶段就已用到了Maven的管理. 核心JAR 和 TLDs可利用Maven编译生成. 在Struts 源代码概目录中我们可看到当前的 maven.xml and project.xml 文件. 当然,在当前,原来的Ant编译文件还是官方编译Struts的方法.

值得关注的是,Maven将为我们的项目开发带来很大的方便,详细情况可参考http://maven.apache.org/start/use.html

5、新的 Configuration DTD

Configuration 1.1 DTD 已不推荐使用, struts-config_1_2.dtd 成为首选,struts-config_1_2.dtd为struts-config新增了两个元素<display-name> 和 <description>.可用于描述项目(或配置)的版本号等信息。例如:

<display-name><![CDATA[

account maintenance

]]>

</display-name>

<description><![CDATA[

Allows the updating of users accounts and subscriptions.

]]>

</description>

6、Session-scoped ActionMessages

可在session中保存ActionMessages及在第一次使用后进行清除。通过 Action.saveMessages() 保存信息到 session中.可通过 ActionMessages.isAccessed() 返回已保存的信息. 如果要清除信息,RequestProcessor.processCachedMessages() 通过 isAccessed()进行检查.

这一功能对于信息的重复使用是非常有效的。

7、JA Mailreader

Struts 自带的例子Mailreader Example包含了日本资源文件,虽然我们不需要日本资源,但它对于我们学习如何实现“国际化信息”是非常有好处的,实现方式很简单,例如自带的例子welcome.jsp有如下语言类型选择:

<ul>

<li><html:link action="/Locale?language=en">English</html:link></li>

<li><html:link action="/Locale?language=ja" useLocalEncoding="true">Japanese</html:link></li>

<li><html:link action="/Locale?language=ru" useLocalEncoding="true">Russian</html:link></li>

</ul>

在LocaleAction.java中进行处理:

public ActionForward execute(ActionMapping mapping,

ActionForm form,

HttpServletRequest request,

HttpServletResponse response)

throws Exception {

String language = request.getParameter(LANGUAGE);

String country = request.getParameter(COUNTRY);

Locale locale = getLocale(request);

if ((!isBlank(language)) && (!isBlank(country))) {

locale = new Locale(language, country);

}

else if (!isBlank(language)) {

locale = new Locale(language, "");

}

HttpSession session = request.getSession();

session.setAttribute(Globals.LOCALE_KEY, locale);

String target = request.getParameter(PAGE);

if (!isBlank(target)) return new ActionForward(target);

target = request.getParameter(FORWARD);

if (isBlank(target)) target = mapping.getParameter();

if (isBlank(target)) {

log.warn(LOCALE_LOG);

return null;

}

return mapping.findForward(target);

}

.

8、Tiles EL

Tiles标签支持基于JSTL 的Struts EL标签库.

9、truts-mailreader

对struts 自带例子struts-mailreade进行改进。特别是增加了Welcome页。

在index.jsp中,只有两行代码,主要是实现到"/Welcome"的转发功能。

<%@ taglib uri="/tags/struts-logic" prefix="logic" %>

<logic:redirect action="/Welcome"/>

从struts-config.xml可看出"/Welcome"的Action处事文件是WelcomeAction.java文件:

<action path="/Welcome"

type="org.apache.struts.webapp.example.WelcomeAction">

<forward name="failure" path="/Error.jsp" />

<forward name="success" path="/welcome.jsp" />

</action>

WelcomeAction.java文件的execute()函数如下:

public ActionForward execute(

ActionMapping mapping,

ActionForm form,

HttpServletRequest request,

HttpServletResponse response)

throws Exception {

// Setup message array in case there are errors

ArrayList messages = new ArrayList();

// Confirm message resources loaded

MessageResources resources = getResources(request);

if (resources==null) {

messages.add(Constants.ERROR_MESSAGES_NOT_LOADED);

}

// Confirm database loaded

UserDatabase userDatabase = getUserDatabase(request);

if (userDatabase==null) {

messages.add(Constants.ERROR_DATABASE_NOT_LOADED);

}

// If there were errors, forward to our failure page

if (messages.size()>0) {

request.setAttribute(Constants.ERROR_KEY,messages);

return findFailure(mapping);

}

// Forward to our success page

return findSuccess(mapping);

}

其中核心代码是:

UserDatabase userDatabase = getUserDatabase(request);

if (userDatabase==null) {

messages.add(Constants.ERROR_DATABASE_NOT_LOADED);

}

用户检查用户数据是否已存在。

10、Action 包

Action Package是修改最多的部分,其中大的修改有25处,

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有