• 1. * 一 般 知 识 *一、计算机应用程序的一般特点 : 大多数应用,从PC机上的简单报表程序到大型机上的复杂计算,都由三部分组成: 用户界面部分:表示层 应用逻辑部分:业务逻辑层 数据访问部分:数据访问层 二、应用程序开发模型的变迁过程: 单层 两层 三层 N层 1231231231234
  • 2. 主机系统或单层结构数据访问、表示和业务逻辑在一个应用中 功能紧紧耦合在一起 代码复用、代码可维护性、和代码的修改十分困难。 不是分布式的,不具有可伸缩性。
  • 3. 服务器的数据库必须同每一个活动的客户保持连接,消耗大量的运算资源,随着客户数目的增加性能不断下降,且存在死锁及崩溃的可能 数据模型“紧耦合”在每一客户端,数据库结构改变将导致全体客户端改变,不利于更新和维护 用户界面和程序逻辑绑在一起,代码难以重用 不适应在多用户、多数据库、且非安全的网络环境,可扩展性差胖客户端: 表示逻辑 业务逻辑 业务数据模型 通讯Fat clientFat client传统的客户/服务器: “胖”客户端
  • 4. 三层分布式对象架构客户端:业务数据模型与用户界面分离 ,“瘦” 业务逻辑在中间层,成为“对象服务” 中间层可以处理多客户端和多数据库
  • 5. 三层Web应用程序模型第一层浏览器是表示层,完成用户接口功能。更“瘦” 第二层Web服务器是功能层,完成客户的应用功能。 第三层数据库服务器是数据层,完成数据处理请求。 Web服务器接受客户请求,建立数据库连接,请求数据处理,而后数据库结果返回Web服务器,再传至客户端。
  • 6. 三层Web应用程序模型功能层的缺点: *体积庞大、功能臃肿、复用性差 *须自己考虑诸如分布处理、负载平衡、事务逻辑、持久性和安全性等诸多问题
  • 7. N层应用模型一分为二:显示逻辑层和业务逻辑层 显示逻辑层:接受客户请求,调用业务逻辑层的服务,并将结果呈现给客户端。 业务逻辑层:完成具体的业务处理。其中隐含了分布处理、负载平衡、事务逻辑、持久性和安全性等技术。
  • 8. 从逻辑角度看,系统分成客户端、Web服务器、应用服务器、数据库服务器四层应用模型
  • 9. 为什么需要J2EE 在企业级应用开发中所面临的而且必须解决的问题: 分布式 可移植 面向Web体系 可装配 能满足企业计算要求 一致性 事务性 安全性 还要有好的特性 可伸缩 可扩展 易维护
  • 10. 为什么需要J2EE J2EE提供了一套完整的解决所有这些问题的框架方案: 提供了分布式、可移植构件的框架 简化了服务器端中间层构件的设计(容器的机制) 为构件与应用服务器提供标准API(与现有的企业信息系统集成) 获得了业界的广泛支持(全球70%的分布式应用是由J2EE体系支撑)
  • 11. Open and standard based platform for developing, deploying and managing n-tier, Web-enabled, server-centric enterprise applications 开放的、基于标准的平台,用以开发、部署和管理N层结构、面向Web的,以服务器为中心的企业级应用 什么是J2EE
  • 12. 客户层Web层业务层 中间层J2EE服务器(服务器方中间层)EIS层 遗留 系统EIS 系统数据库客户方 计算机EIS/数据库服务
  • 13. J2EE的四层模型浏览器Java BeanAppletWeb服务器JSPServeletJSPEJB容器EJB桌面Java应用ServeletEJB数据库数据库客户端显示逻辑商业逻辑企业信息系统EJBEJB
  • 14. 四层结构客户层:面向客户的应用和applet Web层:包含用于扩展传统http web服务器的组件,通过java servlet和jsp实现 业务层:包含以EJB形式来提供业务逻辑的组件 企业信息系统层:J2EE的connector结构使得J2EE产品能同EIS层上的企业信息系统进行集成 通常,web和业务层在同一台server(J2EE SERVER)上运行,它们被认为是中间层的子层 J2EE应用通常被认为是三层结构
  • 15. J2EE在现实环境中的典型应用
  • 16. 支持J2EE标准的厂家IBM HP Sun Oracle BEA Inprise Macromedia
  • 17.    一些比较小的、可以用来做学习和研究的、提供源代码的产品,如OpenEjb、EJBoss、JonAS、Enhydra。
  • 18. 基本概念组件 模块 容器
  • 19. 组件J2EE中的组件实际是标准的java类 与传统java类的差别:组件是特意作为可重用,独立的程序单元创建的,它们可进行组装形成J2EE应用 最终要部署到合适的层上,在层上的对应容器中执行 容器为组件提供访问特定的,标准化的服务和API的能力 一旦对组件进行了部署,就可对其进行配置
  • 20. 组件客户组件:构建J2EE客户 Applet:在浏览器中运行 标准java应用:在浏览器外独立运行 Web组件:处理客户请求,并为其创建和返回一个合适的响应 Servlet, JSP, web过滤器,web事件监听器 在web容器里面执行 EJB
  • 21. 模块为了对组件进行部署,组件必须首先组装到模块中,模块是J2EE应用的基本组成单元 模块是J2EE的软件单元,由一个或多个相同组件类型的组件组成,这些组件连同相应的部署描述文件一同绑定到java Archive(JAR)文件中 部署描述文件是XML文件,包含声明语句(非程序代码),描述模块中的每个组件及相关配置或定制需求——包括与其他模块的依赖 J2EE应用由一个或多个模块组成,它们被打包成带有.ear的JAR文件
  • 22. JAR文件JAR文件是组合到一个单一的,平台无关的文件中的文件集合,为开发人员提供一种有效方式来聚集和管理J2EE应用功能集 企业应用档案(ear):对组成J2EE应用的各种模块打包 Web应用档案(war):将web层组件打包到war模块 资源适配器档案(rar):将资源适配器组件和相关联的(用于特定EIS的connector)信息打包成RAR模块
  • 23. Web页面, Applet, 可选的 javaBean过滤器事件监听器servletJSPEJB容器 EJBWeb容器WEB服务器J2EE服务器数据库HTTPS, HTML, XML
  • 24. 容器J2EE受到执行它的容器的管理与支持 容器作用是为组件提供与部署,执行,生命周期管理,安全和其他组件需求相关的服务 不同类型的容器为其所管理的组件提供附件服务,如EJB容器为其EJB提供事务服务和持久性服务 对每一种主要组件类型定义相应的容器类型
  • 25. 容器 一致性 安全性 可获得性 可伸缩性 事务性 分布性 生命周期管理 (持久性)
  • 26. EJB 容器的责任
  • 27. 容器类型 J2EE服务器:是J2EE产品的运行部分。一个J2EE服务器提供EJB容器和Web容器。 Enterprise JavaBeans(EJB)容器:管理J2EE应用程序的enterprise bean的执行。Enterprise bean和它的容器运行在J2EE服务器中。 Web容器:管理J2EE应用程序的JSP和Servlet组件的执行。Web组件和它的容器也运行在J2EE服务器中。 客户端应用程序容器:管理应用程序客户端组件的运行。 Applet容器:管理applet的执行。由运行在客户端的一个Web浏览器和Java插件一同组成。
  • 28. J2EE平台
  • 29. J2EE架构及核心技术
  • 30. 公共服务JNDI (名字和目录服务):共享用户,网络设备,软件组件,应用模块,服务及其他信息 RMI/IIOP (支持IIOP协议的远程方法调用): 访问与RMI编程规则兼容的CORBA服务 JMS(消息服务):在企业中异步交换业务数据和事件的灵活而可靠的机制 JDBC (数据库连接服务) JTS(java transaction service)/JTA (java transaction API) JavaMail和JAF(JavaBeans Activation Framework) JCA/JCE/JSSE/JAAS(安全服务体系)//Cryptography 使用JAXP(Java API for XML Parsing)的XML解析服务 Web Services - J2EE 1.4规范新特性 ············
  • 31. Web组件
  • 32. Servlets(=Server +Applet):是一些运行于Web服务器端的Java小程序,用来扩展Web服务器的功能。 Servlets用特定的Java解决方案替代了其它的Web服务器方编程模式(如:CGI,ISAPI等),继承了Java的所有特性(跨平台、多线程、OO),能够访问整个Java API库。 Servlets使用HTTP协议与客户端进行通讯,所以有时也称Sevlets为“HTTP Servlets”。Servlet技术
  • 33. 请求的处理每当有客户请求时,容器会将其封装成一个HttpServletRequest对象,然后传给Servlet对应的服务方法,有doGet, doPost等 GET调用:获取服务器信息,并将其作为响应返回给客户端 POST调用:用于客户端把数据传到服务器
  • 34. HTTP Servlet请求
  • 35. 1加载,实例化和初始化servlet: 容器首先判断servlet的实例是否存在,若不存在,则容器加载该servlet,并从该servlet类创建实例.接着,容器调用init方法对该servlet实例进行初始化 2调用该servlet的service方法: 假定该servlet实例存在,且已进行了初始化.则容器调用service方法,用其将一个请求对象和一个响应对象传给该servlet.
  • 36. 3 清除servlet的响应,将控制权返回给web服务器: Servlet处理了请求后,响应被交给容器。在容器将控制权返回给web服务器前,会将响应清除,然后由web服务器将该响应传送给客户
  • 37. public class SimpleCounter extends HttpServlet { int count = 0; public void doGet(HttpServletRequest req, HttpServletResponse res) { res.setContentType("text/plain"); //建立输出的类型 PrintWriter out = res.getWriter(); //得到输出流 int local_count; synchronized(this) { //local_count在多线程环境下同步 local_count = ++count; } //构造一个返回给客户浏览器的HTML页 out.println(""); out.println(""); out.println(""); out.println("
    " + ""); out.println("Since Web server has startuped, the servlet has been accessed " + "

    " + local_count + " times" + "

    "); out.println("
    "); out.println(""); } }
  • 38. 在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标记(tag),就构成了JSP网页(*.jsp) JSP是服务器端的脚本语言,是以Java和Servlet为基础开发而成的动态网页生成技术,它的底层实现是Java Servlet。 JSP由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端所请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。 一般和JavaBeans结合使用,从而将界面表现和业务逻辑分离。 JSP技术
  • 39. JSP生命周期翻译:建立JSP请求时,容器寻找相应servlet类,若相应类不存在,则该JSP页面由其容器动态翻译成servlet代码,接着编译成java代码 编译:java代码被编译成servlet类 执行:由容器调用 下同serlvet
  • 40. <%@ page import=" java.math.*, javax.naming.*" %> Converter

    Enter an amount to convert:


    <% String amount = request.getParameter("amount"); if ( amount != null && amount.length() > 0 ) { BigDecimal d = new BigDecimal (amount); %>

    <%= amount %> dollars are <%= converter.dollarToYen(d) %> Yen.

    <%= amount %> Yen are <%= converter.yenToEuro(d) %> Euro. <%}%>

  • 41. (本页无文本内容)
  • 42. 浏 览 器Servlet容器 servletservletJSPEJBEJB1客户端经由HTTP进行请求 2 web server将请求传送给容器 3 容器执行servlet 4 servlet产生响应(根据需要同其他web组件和业务组件进行交互) 5 web sever将响应返回给客户
  • 43. 两者都是基于Java的技术,所以都继承了Java的所有特性(跨平台、多线程、OO ),都可以使用Java强大的API。 两者工作方式相似:JSP代码先被JSP容器转换为Servlet代码再编译为类。 两者在J2EE体系结构中的工作层次相同,都负责与客户端的连接。 都是Web服务器的功能扩展,Servlet创建动态页面;JSP可动态,静态创建页面 Servlets是一些运行于Web服务器端的Java小程序;而JSP是脚本,编写起来更简单容易。 Java Servlet和JSP的比较
  • 44. JavaBean是基于Java的组件模型,类似于Microsoft的COM组件。 通过JavaBean可以实现代码的重复利用,扩充Java程序的功能,快速生成新的应用程序以及使程序更容易维护。 JavaBean传统的应用在于可视化的领域,如AWT下的应用。自从JSP诞生后,JavaBean更多的应用在了非可视化领域,在服务器端应用方面表现出来了越来越强的生命力。 JavaBean技术
  • 45. Java Beanpackage tax; public class TaxRate { String Product; double Rate; public TaxRate(){ this.Product = "A001"; this.Rate = 5;} public void setProduct (String ProductName) { this.Product = ProductName; } public String getProduct() { return this.Product; } public void setRate (double rateValue) { this.Rate = rateValue; } public double getRate() { return this.Rate; } }
  • 46. Java Bean<%@ page language="java" import="tax.*" %> 修改前:
    产品 :
    税率 : 修改
  • 47. Java Bean 修改后:
    产品 :
    税率 :
  • 48. Java Bean修改前: 产品 : A001 税率 : 5 修改后: 产品 : Hello 税率 : 2.9