J2EE Architecture(6)

1、企业解决方案
很多企业在发展过程中,购置或自行开发了多种应用软件,这些软件,可能基于不同的硬件,使用互不兼容的操作系统,经专用协议与其它应用程序交流信息。
为了满足这些应用程序的异步通信要求,一批中间件解决方案应运而生。如IBM的MQ系列、TIBCO公司的TIBCO、微软的MSMQ,但这些方案带来了其它的问题。因为无论是否使用了中间件,这些解决方案都缺少规范约束,企业也不愿接受这种思维。
注:MSMQ(Microsoft Message Queue,微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位置。其实现原理是:消息的发送者把自己想要发送的消息放入一个容器中(称之为Message),然后把它保存至一个系统公用空间的消息队列(Message Queue)中;本地或者是异地的消息接收程序再从该队列中取出发给它的消息进行处理。
J2EE是很好的企业解决方案。在J2EE上,可以快捷地开发和部署企业应用程序,可将应用程序部署为“组件”,并在“容器”环境中部署这些组件。
2、J2EE规范
J2EE规范本质上是文档记录,详细描述一些约束企业平台行为的规则和条件。J2EE规范主要面向一下两类专业人员:
1)J2EE平台和解决方案厂商
2)企业应用程序架构师和开发人员
3、Servlet规范
1)Servlet是运行在Web服务器上的Java程序,用于响应客户请求。
Servlet是Java组件,部署在Web服务器上,能在请求/响应通信模式下有效工作。
2)GenericServlet是独立于协议的Servlet。按照需要扩展GenericServlet后可以实现与协议相关的Servlet。HttpServlet就是一个典型例子,它扩展了GenericServlet,并将HTTP作为通信协议。
3)Servlet2.3文档的Servlet规范
4、Servlet规范详解
1)Servlet接口
可使用两种方式之一创建Servlet:
(1)实现Servlet接口
(2)扩展的GenericServlet类或javax.servlet.http.HttpServlet类
在创建Servlet后,还要描述Servlet细节,以及在运行时环境中,Servlet及Web应用程序中其它关联Web组件的附加信息。
规范将XML文档中嵌入的这些信息称为部署描述符,供Web容器在部署组件时使用。在创建和部署Servlet后,Servlet成为Web服务器“容器”中的“实例”。
Web组件设计人员可按照设计标准,选择创建一下两类Servlet:
(1)单线程Servlet
(2)多线程Servlet
多线程Servlet是Web服务器“容器”的“单个实例”,Web容器将所有客户请求转发给一个实例。规范也允许创建多个Servlet实例,以便为各个客户请求提供服务。此时的Servlet类需要实现SingleThreadModel接口。
Servlet容器厂商需要确保合理地加载和实例化Servlet。
第一种方法是在部署期间,在启动容器本身时,由Servlet引擎加载和实例化Servlet;
第二种方法是在第一个客户请求到达容器时,加载和实例化Servlet。
2)Servlet生命期
Web容器的Servlet组件的生命期可分为3个阶段:
(1)Servlet开始
Servlet会经历一个简单的生命历程。init()方法使Servlet进入“就绪”状态;之后,Servlet可接收服务请求;当容器决定销毁Servlet时,将调用destroy()方法。
在初始化过程中,init()方法使用ServletConfig对象。它包含Servlet需要的初始化参数的名-值对。通常,目录、文件路径及其它资源信息将写入这个对象。
未初始化的Servlet由容器卸载,不经历通常定义的Servlet生命期。
未初始化的Servlet不能接收客户端的任何请求,也不能对它运行destroy()方法。
(2)Servlet服务
Servlet容器可能通过Servlet的service()方法发送多个并发请求,故在设计service()方法时,需要考虑并发处理多个线程,还要注意灵活地“同步”全部或部分service()方法,尽量避免性能的大幅下降。
在Servlet生命期,服务线程的执行可能引发异常。
出现异常时,Servlet会变得临时不可用,或长期不可用。如长期不可用,则容器需要运行Servlet的destroy()方法,并释放资源。如果Servlet是临时不可用,容器将异常返回客户端,并显示消息,要求在一定时间后重试。
(3)Servlet结束
容器可在任意长的时间内使用一个Servlet实例,或SingleThreadModelServlet的多个实例。Servlet实例可一直延续到Servlet容器本身的生命期结束为止。
当容器认定不再需要某个Servlet时,可以调用Servlet的destroy()方法,释放Servlet占用的所有容器资源。
注意:容器不能调用活动的Servlet的destroy()方法,在调用Servlet的destroy()方法前,容器需要确保以下两点:
一是阻塞更多新请求;
二是完成所有待处理请求。

转载于:https://www.cnblogs.com/yangjin-55/archive/2007/05/12/2787004.html

J2EE Architecture(6)相关推荐

  1. J2EE Architecture(4)

    J2EE Architecture(4) 在Java语言从客户机/服务器环境发展为分布式平台后,J2EE应运而生. 1.J2EE要素 1)J2EE规范和API J2EE规范旨在提供一个基于标准的组件框 ...

  2. ffmpeg architecture(下)

    ffmpeg architecture(下) 第3章-转码 TLDR:给我看代码和执行. $ make run_transcoding 我们将跳过一些细节,但是请放心:源代码可在github上找到. ...

  3. ffmpeg architecture(中)

    ffmpeg architecture(中) 艰苦学习FFmpeg libav 您是否不奇怪有时会发出声音和视觉? 由于FFmpeg作为命令行工具非常有用,可以对媒体文件执行基本任务,因此如何在程序中 ...

  4. ffmpeg architecture(上)

    ffmpeg architecture(上) · 视频-您看到的是什么! · 如果您有一系列图像序列,并以给定的频率(例如每秒24张图像)进行更改,则会产生运动的错觉.总之,这是视频背后的基本概念:一 ...

  5. 编译器架构Compiler Architecture(下)

    编译器架构Compiler Architecture(下) Combining Scanning and Parsing 实际上没有必要将扫描(词法分析/标记化)与解析(语法分析/树生成)分开.基于P ...

  6. 编译器架构Compiler Architecture(上)

    编译器架构Compiler Architecture(上) 编译器是程序,通常是非常大的程序.它们几乎都有一个基于翻译分析综合模型的结构. CONTENTS Overview • Compiler C ...

  7. 应用Rational工具简化基于J2EE项目(四)分析和工具的进展

    第 4 部分 :分析和工具的进展 Steven Franklin 软件设计师和过程专家 2004 年 4 月 在这个展示了 RUP 和其他 Rational 工具使用的样例项目的接下来的阶段,用例通过 ...

  8. J2EE总结(二)——与servlet从相识到相知

    话说这J2EE视频看的本身每天活蹦乱跳的我是天天都像得了重病似的,怎么也犯不过劲儿来.里面接触了大量关于Java的专业词汇,如JNDI,ANT,servlet,Java Bean等等.让人一时难以消化 ...

  9. J2EE技术(三)——JMS

     一.JMS基本思想 JMS(Java Message Service)即java消息服务,提供了一组标准的java API,用于企业级的消息处理.通过JMS可以在java程序之间发送和接受消息以达到 ...

最新文章

  1. 前端(jQuery)(5)-- jQuery AJAX异步访问和加载片段
  2. 齐聚上海,get多媒体开发新技能(内附讲师资料下载)
  3. java 利用ManagementFactory获取jvm,os的一些信息--转
  4. 机器学习基础 --- numpy的基本使用
  5. VTK:图表之MutableDirectedGraphToDirectedGraph
  6. java8新特性_乐字节-Java8新特性-函数式接口
  7. 初识c语言教程,第1课C语言教程一: 初识C程序.doc
  8. 常见浏览器bug以及解决方法
  9. 别动我的代码!聊聊那些代码保护的艺术
  10. atitit. 统计功能框架的最佳实践(1)---- on hibernate criteria
  11. HTML+CSS静态页面网页设计作业:我的家乡网站设计——我的家乡-莆仙(6页)
  12. 人工智能 - 电子书下载(高清版PDF格式+EPUB格式)
  13. 小米笔记本关闭UEFI secure boot
  14. 键盘数字测试软件,KeyboardTest(键盘测试工具)官方版
  15. 做外贸如何免费申请企业邮箱?
  16. 用二分法定义平方根函数(Bisection method Square Root Python)
  17. 小甲鱼python入门_python基础笔记(非系统/自用/参考小甲鱼的零基础入门学习python)上...
  18. 如何优化我的世界服务器,我的世界服务器怎么优化 服务器优化建议
  19. 浅谈技术管理者的角色认知与自我管理
  20. [AcWing] 905. 区间选点(C++实现)贪心---区间问题例题

热门文章

  1. 动态内存分配(malloc函数)
  2. 质量属性效用树_知识之森-数据化你的quot;知识树”
  3. Leetcode-496-下一个更大元素 I
  4. Android开发环境搭建(Android Studio安装)
  5. 如何做到“对扩展开放、修改关闭”?
  6. 缓冲池、顺序读取与随机读取
  7. redis数据类型之String入门
  8. sqark sql练习之统计UV
  9. 删除链表中重复的节点
  10. 搭建Discuz论坛的两种方式