侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

实例讲解JSP Model2体系结构(上)

Java  /  管理员 发布于 7年前   158

最近已经有了很多相关的介绍,JSP正在成为一种卓越的Java技术,可用于创建动态Web应用程序。Java程序员之所以喜爱JSP有数不清的理由。有些人喜欢它为交互式页面带来的“一次编写,处处使用”的方式;还有些人欣赏它是因为它容易学习,并且使他们可以把Java作为一种服务器端脚本语言来使用。但更多的还都是因为一个共同原因DD使用JSP的最大好处是它能帮助你有效地把表达与内容分离开。在本文中,我对下面的问题作了深入探讨,那就是,如何使用JSP Model 2体系结构获得最佳的表达-内容分离效果。这个模型也可以被看作是通用MVC设计模式在服务器端的一个实现。请注意,在阅读本文之前,你需要熟悉基本的JSP和servlet编程,因为文中将不会涉及到任何语法规则问题。

Servlets有什么问题?
  尽管JSP在动态Web内容服务和分离内容与表达上可以做得非常好,但仍然会有人置疑,为什么要把servlets丢在一边呢?其实servlets的作用不容置疑。它们在服务器端处理上做得很优秀,而且,由于它们已有了坚实的基础,所以仍将被保留。实际上,从结构上讲,你可以把JSP看作是servlets的一种高级抽象,就像Servlet2.1 API的一种扩充一样来实现。然而,你也不应当滥用servlets,它们并非对每个人都适用。举个例子,如果网页设计者能够很容易地用传统HTML或XML工具写出JSP页的话,servlets就更适合那些后台程序的开发者,因为servlets通常是用集成开发环境(IDE)编写的DD一般来说这种方式需要更高级的编程技能。在运用servlets时,即使是开发者也必须小心谨慎以确保表达和内容不存在紧密的联系。要做到这一点,你通常可以使用第三方HTML包(比如htmlKona)来混合代码。但即便是这种方法,尽管它通过简单的屏幕变换带来了一些灵活性,却无法帮你避免表达格式本身的改动。例如,如果你的表达格式从HTML变为DHTML,你就必须确保那些语言包适应新的格式。假设一种最坏的情况,如果一个包不可用,你也许将不得不忙于在动态内容中艰难地编写表达,这会把你累死。那么,如何解决这个问题呢?接下来你将看到,使用JSP与servlets技术相结合是构建应用系统地一种好方法。

不同的体系
  早期的JSP规范提出了两种用JSP技术建立应用程序的方式。这两种方式在术语中分别称作JSP Model 1 和JSP Model 2,它们的本质区别在于处理批量请求的位置不同。在Model 1体系中,如图1所示,jsp页面独自响应请求并将处理结果返回客户。这里仍然存在表达与内容的分离,因为所以的数据存取都是由bean来完成的。尽管Model 1体系十分适合简单应用的需要,它却不能满足复杂的大型应用程序的实现。不加选择地随意运用Model 1,会导致JSP页内被嵌入大量的脚本片段或Java代码,特别是当需要处理的请求量很大时,情况更为严重。尽管这对于Java程序员来说可能不是什么大问题,但如果JSP页面是由网页设计人员开发并维护的DD通常这是开发大型项目的规范DD这就确实是个问题了。从根本上讲,将导致角色定义不清和职责分配不明,给项目管理带来不必要的麻烦。


  图1:JSP Model 1 体系结构

  图中文字:BROWSER:浏览器;Request:请求;Response:响应;Application Server:应用服务器;Enterprise Servers/Data Sources:企业服务器/数据源。

  Model 2体系结构,如图2所示,是一种把JSP与servlets联合使用来实现动态内容服务的方法。它吸取了两种技术各自的突出优点,用JSP生成表达层的内容,让servlets完成深层次的处理任务。在这里,servlets充当控制者的角色,负责管理对请求的处理,创建JSP页需要使用的bean和对象,同时根据用户的动作决定把那个JSP页传给请求者。特别要注意,在JSP页内没有处理逻辑;它仅负责检索原先由servlets创建的对象或beans,从servlet中提取动态内容插入静态模板。在我看来,这是一种有代表性的方法,它清晰地分离了表达和内容,明确了角色的定义以及开发者与网页设计者的分工。事实上,项目越复杂,使用Model 2体系结构的好处就越大。


  图2:JSP Model 2体系结构

  图中文字:instantlate:瞬间延时;Controller、View、Model分别为MVC设计模式中的控制者、试图、模型;其他同图1。

  为了进一步阐明Model 2体系结构的概念,我们来看一个用它实现的例子:一个叫做“音乐无国界”的网上音乐商店。


  • 上一条:
    实例讲解JSP Model2体系结构(中)
    下一条:
    一个用JSP做的日历
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在java中实现的脱敏工具类代码示例分享(0个评论)
    • zookeeper安装流程步骤(0个评论)
    • 在java中你背的“八股文”可能已经过时了(2个评论)
    • 在php8.0+版本中使用属性来增加值代码示例(3个评论)
    • java 正则表达式基础,实例学习资料收集大全 原创(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-11
    • 2018-03
    • 2020-03
    • 2023-05
    • 2023-11
    • 2024-01
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客