Struts 1.2.1新特点简介(1) kui [原作]

转载 2004年07月30日 01:06:00
 

Struts 1.2.1新特点简介(1)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

目前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看,GenericDataSourceGenericConnection接口都已不再提供,从下载的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="/<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />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设置片段:

 

3、通配符

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

/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处

【Struts】——简介 & 原理

truts是对JSPModel2设计标准的一种实现,下面分别从模型(Model)、视图(view)和控制器3个部分介绍Struts的体系结构和工作原理。...
  • u010164936
  • u010164936
  • 2016年01月11日 15:58
  • 882

HEVC新特点一览(1)

1、HEVC特征    同H.264相比,HEVC编码器在压缩率、运算复杂度、抗误码性和编码延迟方面进行取舍和折中。具有两大改进,支持更高分辨率的视频以及改进的并行处理模式。 2、视频编码层  ...
  • u010215648
  • u010215648
  • 2014年11月24日 14:29
  • 837

Struts2(一)——总体介绍

这篇博客开始将总结一下有关框架的知识,在开发中合适的利用框架会使我们的开发效率大大提高。当今比较流行的开源框架: 关注数据流程的MVC框架 (Struts1/2, WebWork, Sprin...
  • liujiahan629629
  • liujiahan629629
  • 2014年03月05日 19:44
  • 18584

Struts旅程(一)Struts简介和原理

struts简介 Struts是Apache软件基金会(ASF)赞助的一个开源项目。它最初是jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用JavaServlet/...
  • lovesummerforever
  • lovesummerforever
  • 2014年02月10日 07:55
  • 92285

【Struts 1】Struts1的基本原理和简介

备注:这里介绍的是Struts1的内容,Struts2的内容,会在后续的博客的予以说明! 一、什么是Struts struts的目标是提供一个开发web应用的开源框架,Struts鼓励基于Model2...
  • u013034889
  • u013034889
  • 2016年06月20日 19:41
  • 572

Hive1.2.1<常用操作示例>

版本:apache-hive-1.2.1 使用到的数据:链接:http://pan.baidu.com/s/1c2xmk1M 密码:uucs1. train 01.创建10min数据托管表。 cre...
  • Gpwner
  • Gpwner
  • 2017年07月01日 21:39
  • 463

Struts中对通配符的配置说明

在Struts的配置文件里面,如果实现有“约定”的话,可以优先考虑通配符,这样可以大大的简化配置量,可以仅仅去考虑控制器和视图的分配就可以了,下面是我对xml配置文件的关于通配符的配置说一下自己的理解...
  • MyCodeDream
  • MyCodeDream
  • 2015年09月29日 20:48
  • 654

Hadoop-1.2.1分布式集群搭建(亲测有效版)

Hadoop-1.2.1分布式集群搭建Hadoop-121分布式集群搭建 环境条件 安装jdk并配置环境 安装ssh-client 安装ssh-server 配置ssh免密登录 安装配置Hadoop-...
  • linukey
  • linukey
  • 2017年03月17日 10:14
  • 505

Struts1——自定义转换器

在struts1中,使用了beanutils来处理类型的一些基本类型的转换。        当需要时候,可以定义自己的转换器,下面以java.util.Date为例来看下如何定义转换器。       ...
  • lhc2207221755
  • lhc2207221755
  • 2015年12月15日 18:54
  • 1839

hadoop1.2.1安装配置

环境:ubuntu13 使用的用户为普通用户。如:用户ru jdk安装略 1、安装ssh (1) Java代码   sudo apt-get ins...
  • hxpjava1
  • hxpjava1
  • 2014年03月01日 13:36
  • 6493
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Struts 1.2.1新特点简介(1) kui [原作]
举报原因:
原因补充:

(最多只允许输入30个字)