首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Struts,MVC 的一种开放源码实现(2)请别在我的 HTML 中加入太多的 Java 代码

Struts,MVC 的一种开放源码实现(2)请别在我的 HTML 中加入太多的 Java 代码

请别在我的 HTML 中加入太多的 Java代码在清单 1 中,不是 Java 代码中有大量的 HTML,而是在 HTML文件中有大量的 Java 代码。从这个观点来看,除了允许网页设计人员编写Java 代码之外,我实际上没做什么。但是,我们并不是一无所有;在 JSP1.1 中,我们获得一种称为“标记”的新特性。
JSP 标记只是将代码从 JSP 文件中抽取出来的一种方式。有人将 JSP标记看作是 JSP 文件的宏,其中用于这个标记的代码包含在 servlet中。(宏的观点在很大程度上是正确的。)出于同样的原因,我不希望在Java 代码中看到 HTML 标记,我也不希望在 JSP 文件中看到 Java代码。JSP 技术的整个出发点就是允许网页设计人员创建servlet,而不必纠缠于 Java 代码。标记允许 Java 程序员将 Java代码伪装成 HTML 来扩展 JSP 文件。图 3 显示了从 JSP网页中抽取代码并将它们放入 JSP 标记中的一般概念。
图 3. JSP 标记清单 2 是用来说明 Struts 标记的功能的一个例子。在清单 2中,正常的 HTML         <form> 标记被用 Struts         <form:form> 标记替换。清单 3显示了浏览器接收到的结果 HTML。浏览器获得 HTML         <form> 标记,但带有附加代码,如JavaScript。附加的 JavaScript 激活         email 地址域。服务器端的         <form:form> 标记代码创建适当的 HTML,并使网页设计人员不再接触 JavaScript。      
清单 2. Struts 的 form 标记
1
2
3
4
<form:form action="join.do" focus="email" >
    <form:text   property="email" size="30" maxlength="30"/>
    <form:submit property="submit" value="Submit"/>
</form:form>




清单 3. 发送给浏览器的结果 HTML
1
2
3
4
5
6
7
8
9
<form name="joinForm" method="POST" action="join.do;jsessionid=ndj71hjo01">
    <input type="text" name="email" maxlength="30" size="30" value="">
    <input type="submit" name="submit" value="Submit">
</form>
<script language="JavaScript">
<!--
    document.joinForm.email.focus()
// -->
</script>




有关 JSP 标记的注意事项:
  • JSP 标记需要一个运行 JSP 1.1 或更高版本的容器。
  • JSP 标记在服务器上运行,而不像 HTML标记那样由客户机解释。
  • JSP 标记提供了适当的代码重用机制。
  • 可以使用一种称为           include 的 JSP 机制将 HTML 和JavaScript 添加到网页中。但是,开发人员常常会创建巨大的 JavaScript库文件,这些库文件被包含在 JSP 文件中。结果返回给客户机的 HTML网页要比必需的 HMTL 网页大得多。           include 的正确用法是仅将它用于生成诸如页眉和页脚这类内容的 HTML代码段。
  • 通过抽取出 Java 代码,JSP 标记使开发角色更加专业化。
模型-视图-控制器 (MVC)JSP标记只解决了部分问题。我们还得处理验证、流程控制和更新应用程序的状态等问题。这正是MVC 发挥作用的地方。MVC通过将问题分为三个类别来帮助解决单一模块方法所遇到的某些问题:
  • Model(模型)
    模型包含应用程序的核心功能。模型封装了应用程序的状态。有时它包含的唯一功能就是状态。它对视图或控制器一无所知。
  • View(视图)
    视图提供模型的表示。它是应用程序的           外观。视图可以访问模型的读方法,但不能访问写方法。此外,它对控制器一无所知。当更改模型时,视图应得到通知。
  • Controller(控制器)
    控制器对用户的输入作出反应。它创建并设置模型。
MVC Model 2Web向软件开发人员提出了一些特有的挑战,最明显的就是客户机和服务器的无状态连接。这种无状态行为使得模型很难将更改通知视图。在Web上,为了发现对应用程序状态的修改,浏览器必须重新查询服务器。
另一个重大变化是实现视图所用的技术与实现模型或控制器的技术不同。当然,我们可以使用Java(或者 PERL、C/C++ 或别的语言)代码生成HTML。这种方法有几个缺点:
  • Java 程序员应该开发服务,而不是 HTML。
  • 更改布局时需要更改代码。
  • 服务的用户应该能够创建网页来满足它们的特定需要。
  • 网页设计人员不能直接参与网页开发。
  • 嵌在代码中的 HTML 很难看。
对于 Web,需要修改标准的 MVC 形式。图 4 显示了 MVC 的 Web改写版,通常也称为 MVC Model 2 或 MVC 2。
图 4. MVC Model 2
返回列表