J2ME之家

匿名投稿 投稿指南 RSS订阅 J2ME通告:
搜索: 您的位置主页>Java技术>Struts>

Struts,MVC 的一种开放源码实现

2008-7-28 20:35:49 来源:本站整理 责任编辑: 【 点击: 我要投稿 [进入论坛]

  • HTML 表单
  • <form:form action="join.do" focus="email" >

     

     

      • JSP <form> 标记和属性替代了 HTML <form> 标记和属性。 <form action="join.jsp" name="join"> 已更改为 <form:form action="join.do" focus="email" > 。
      • HTML <input> 标记已替换为 <form:text/> 。
      • HTML <submit> 标记已替换为 <form:submit/> 。

      模型 -- 会话状态

    JoinForm 扩展了 ActionForm 并包含表单数据。本例中的表单数据只有电子邮件地址。我已为电子邮件地址添加了一个写方法和读方法,以供框架访问。为了便于说明,我重写了 validate() 方法,并使用了 Struts 的跟踪功能。Struts 将创建 JoinForm 并设置状态信息。

      模型 -- 业务逻辑

    如前所述, Action 是控制器和实际业务对象之间的接口。 JoinAction 包装了对 business.jar 的调用,这些调用最初在 join.jsp 文件中。 JoinAction 的 perform() 方法在清单 5 中列表。


      清单 5. - JoinAction.perform()

     

    public ActionForward perform(ActionMapping mapping,

                                 ActionForm form,

                                 HttpServletRequest request,

                                 HttpServletResponse response)

                                 throws IOException, ServletException {

        // 抽取我们将会用到的属性和参数

        JoinForm joinForm = (JoinForm) form;

        String email = joinForm.getEmail();

        ActionErrors errors = new ActionErrors();

        // 存储输入....

        try {

            business.db.MailingList.AddEmail(email);

        } catch (Exception e) {

            // 记录日志,打印栈

            // 将错误回显给用户

            errors.add("email",new ActionError("error.mailing.db.add"));

        }

        // 如需任何消息,请将指定的错误消息键保存到

        //  HTTP 请求中,以供 <struts:errors> 标记使用。

        if (!errors.empty()) {

            saveErrors(request, errors);

            // 返回到初始表单

            return (new ActionForward(mapping.getInput()));

        }

        // 将控制权转交给 Action.xml 中指定的 'success' URI

        return (mapping.findForward("success"));

    }

     

     

        注: perform() 返回一个称为 ActionForward 的类,该类通知控制器下一步该执行什么操作。在本例中,我使用从控制器传入的映射来决定下一步的操作。

      控制器

    我已修改了 JSP 文件,并创建了两个新类:一个类用来包含表单数据,一个类用来调用业务包。最后,我通过修改配置文件 struts-config.xml 将它们整合起来。清单 6 显示了我添加的 action 元素,这个元素用来控制 joinMVC.jsp 的流程。



      清单 6. Action 配置

    <action  path="/join"

             name="joinForm"

             type="web.mailinglist.JoinAction"

            scope="request"

            input="/joinMVC.jsp"

         validate="true">

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

    </action>

     

     

        action 元素描述了从请求路径到相应的 Action 类的映射,应该用这些类来处理来自这个路径的请求。每个请求类型都应该有相应的 action 元素,用来描述如何处理该请求。对于 join 请求:

    1. joinForm 用来容纳表单数据。
    2. 因为 validate 被标记为 true,所以 joinForm 将试图进行自我验证。
    3. web.mailinglist.JoinAction 是用来处理对这个映射的请求的 action 类。
    4. 如果一切顺利,该请求将转到 welcome.jsp 。
    5. 如果出现业务逻辑故障,流程将返回到 joinMVC.jsp ,这是最初发出请求的网页。为什么会这样呢?在清单 6 的 action 元素中,有一个称为 input 的属性,其值为 "/joinMVC.jsp" 。在我的 JoinAction.perform() (如清单 5 所示)中,如果业务逻辑失败, perform() 就返回一个 ActionForward ,并以 mapping.getInput() 作为参数。本例中的 getInput() 是 "/joinMVC.jsp" 。如果业务逻辑失败,它将返回到 joinMVC.jsp ,这是最初发出请求的网页。

     

      使用 Struts 前后的比较

    正如我们在图 9 中所看到的那样,复杂性和层都有显著增加。不再存在从 JSP 文件到 Service 层的直接调用。

    Before and after Struts

        图 9. 使用 Struts 前后的比较

    Struts 的优点

    • JSP 标记机制的使用
      标记特性从 JSP 文件获得可重用代码和抽象 Java 代码。这个特性能很好地集成到基于 JSP 的开发工具中,这些工具允许用标记编写代码。
    • 标记库
      为什么要另发明一种轮子,或标记库呢?如果您在库中找不到您所要的标记,那就自己定义吧。此外,如果您正在学习 JSP 标记技术,则 Struts 为您提供了一个起点。
    • 开放源码


      您可以获得开放源码的全部优点,比如可以查看代码并让使用库的每个人检查代码。许多人都可以进行很好的代码检查。
    • MVC 实现样例
      如果您希望创建您自己的 MVC 实现,则 Struts 可增加您的见识。
    • 管理问题空间
      分治是解决问题并使问题可管理的极好方法。当然,这是一把双刃剑。问题越来越复杂,并且需要越来越多的管理。


    Tag:实现 源码 开放   < " Struts JSP 一个 文件
    责任编辑:
  • 上一篇:没有了  下一篇:Struts架构中的Session对象创建和控制
    用户名: (新注册)密码: 匿名:  请文明参与讨论,禁止漫骂攻击。
    评论总数: [ 查看全部 ] 网友评论
    关于我们 - 在线帮助 - 网站动态 - 版权声明 - RSS订阅 - 网站地图 - 返回顶部