目录
JavaEE概述
应用模式演化
基于数据库的应用系统中,应用任务一般可以分为三类:用户界面表示、业务逻辑处理、应用数据存取。
1.单机应用
全部应用任务独运行于一台机器上的应用(如:记事本、画图、MS Word等)在单机应用中,三类应用任务都被部署运用于同一台机器
2.C/S应用
C/S(客户机/服务器)架构中将应用任务分解成多个子任务,由多台通过网络连接的计算机分工完成,通过C/S架构,可以在尽量降低系统通信开销的同时充分利用两端软硬件环境的优势,将应用任务合理分配到客户端和服务器来执行
名称 | 功能 |
---|---|
客户机程序 | 提出服务请求 |
胖客户机:负责用户界面和业务逻辑 | |
瘦客户机:只负责用户界面 | |
服务器程序 | 提供相对应服务的程序 |
C/S应用就是基于C/S架构的应用,客户程序和服务器之间的交互协同一般体现为协议通信
优势 | 缺点 |
---|---|
实现了业务逻辑的分布式处理 | 系统(尤其是客户程序)的安装调试升级和维护存在较大困难 |
交互性好,具有良好的可伸缩性 | 由于业务分布于多个客户程序而不是由服务器集中统一控制所以存在一定的安全隐患 |
3.B/S应用(主流)
B/S架构本质上是一种瘦客户端的C/S架构,只是B/S架构模式将客户端统一为Web浏览器 B/S应用就是基于B/S架构的应用,客户程序和服务器之间的通信协议为HTTP,业务集中于服务器,浏览器主要负责系统的UI渲染和交互 基于数据库的应用系统中,服务器则主要负责UI的服务器端生成(Web服务器)、业务逻辑处理(应用服务器)以及应用数据存取(数据库服务器)。
优势 | 缺点 |
---|---|
可以实现业务逻辑的分布式处理 | 传统模式下的特殊功能、个性化要求(特别是UI方面)的都难以实现 |
开发效率高、升级维护简单方便等 | 在速度和安全性上也存在一定的问题 |
4.云应用
云计算是一种按需付费的服务模式,该模式提供可用、便捷、按需的网络访问。进入可配置的计算资源共享池(包括网络、服务器、存储、应用软件、服务) 云计算通常涉及通过互联网来提供动态易扩展、虚拟化的资源 云应用可以看作是基于云计算概念和架构构建的应用,是云计算技术在应用层的体现 云应用的工作原理是把传统软件“本地安装、本地运算”的方式变成“即取即用”的服务,通过互联网或局域网连接并操控远程服务器集群完成业务逻辑或者运算任务。主要载体为互联网技术,以瘦客户端或者智能客户端的展现形式,可以帮助用户降低IT成本提高工作效率
JavaEE多层架构
表现层(客户端) | 表现层(服务器端) | 业务层 | 持久层 | 数据层 |
---|---|---|---|---|
浏览器(HTML,Applet)桌面系统(Java应用)其他(JavaE客户) | Web容器(JSP, Servlet, JSF, Struts) | 业务容器(一般业务JavaBean, EJB, Spring) | 实体容器(JavaBean(JDBC), iBatis/MyBatis, JPA, Hibernate) | 数据库等 |
客户端 | Web服务器 | 应用服务器 | 应用服务器 | DB服务器/EIS |
经典的框架组合:JSF,EJB, JPA 轻量级框架组合:Struts, Spring, Hibernate,MyBatis
概述
主要实现 | 主要组件 | 常见框架 | 常见容器 | |
---|---|---|---|---|
表现层 | 实现用户交互、界面表示以及页面流程控制等,收集客户请求数据 | JSP和Servlet | Tapestry、Struts、Spring MVC、JSF等 | |
业务层 | 主要实现核心业务逻辑服务。由大量服务组件组成,又称为组件层 | JavaBean(可作为最基础的业务逻辑层技术方案) | Spring、EJB等 | IoC、AOP等 |
持久层 | 主要负责数据库等应用数据存取 | JavaBean(JDBC)(可作为最基础的持久层的技术方案) | Hibernate、MyBatis、TopLink、JPA | Hibernate、JPA等 |
表现层
作为Java EE架构的第一层,表现层的主要功能就是实现用户交互、界面表示以及页面流程控制等 表现层收集客户请求数据,调用处于第二层即业务层中的核心服务,并生成客户请求响应 表现层的主要组件(JSP和Servlet)需要使用Web容器所提供的服务,并由Web容器管理 JSP/Servlet以及辅助JavaBean可作为最基础的表现层技术方案,常见的表现层框架有Tapestry、Struts、Spring MVC、JSF等
业务层
业务逻辑层为Java EE架构的中间层,主要实现核心业务逻辑服务。由大量服务组件组成,亦称为组件层。 业务逻辑层接收来自于表现层的服务请求,向持久层请求数据存取服务,并将处理结果返回给处于表现层的请求者。 作为服务组件的JavaBean可作为最基础的业务逻辑层技术方案,常见的业务逻辑层框架有Spring、EJB等。 基于框架的业务层组件需要使用相应的业务组件容器(如IoC、AOP等)所提供的服务,并由容器来管理业务对象的生命周期。
持久层
持久层构成Java EE架构的第三层,主要负责数据库等应用数据存取。 持久层为业务逻辑层提供对业务数据的存取服务。包括数据存取对象和持久对象的JavaBean(JDBC)可作为最基础的持久层的技术方案,常见的持久层框架有Hibernate、MyBatis、TopLink、JPA等。 基于框架的持久层组件需要使用相应的实体容器(如Hibernate、JPA等容器)所提供的ORM、持久、事务等服务,并由实体容器管理实体对象的生命周期。
JavaEE技术框架
1.组件技术
客户端组件、Web组件、EJB组件
2.服务技术
JNDI、 RMI、 JDBC、 JTA、 JMS etc
3.通信技术
TCP/IP、 HTTP、 OMGP etc
EJB服务器(应用服务器)可以同时充当Web服务器,但是Web服务器是不能充当EJB服务器的
JavaEE编程原理
1.编程思想
2.应用部署
名称 | 主要负责内容 |
---|---|
应用组件提供者 | 创建组件(如Web组件,EJB组件等) |
应用集成者 | 把应用组件组装成一系列的模块、应用和描述文件 |
部署者 | 安装打包的应用程序到服务器并且根据运行环境进行配置 |
JavaEE应用开发演化
概述
原始阶段 | CGI、Servlet、JSP | |
模型阶段 | JSP/Servlet + JavaBean(MV) | 业务逻辑处理、数据库存取等部分抽取为JavaBean;JSP或Servlet则主要负责用户请求接收、页面跳转控制、用户响应生成及输入/输出表示 |
JSP + Servlet + JavaBean(MVC) | MVC模式中,对MV模式中JSP/Servlet的代码做进一步分割,输入/输出UI表示纳入JSP组件,用户请求接收、页面跳转控制及用户响应生成则纳入Servlet组件 | |
框架阶段 | JSF + EJB + JPA(经典框架组合) | |
Struts + Spring + Hibernate、Spring MVC + Spring + MyBatis(轻量级框架组合) |
1.原始阶段
CGI、Servlet、JSP Servlet的各个用户请求对应于一个线程,处理请求的开销比CGI明显降低,且具有面向对象、可移植等特点。 JSP可看做是嵌入了Java代码的HTML页面,与Servlet本质上相同,只是降低了动态网页开发的技术门槛。 本阶段的Java Web应用开发就是采用Servlet或JSP,将处理用户请求的请求数据接收、逻辑处理、数据库存取以及用户响应等的所有代码置于一个文件中,程序中的HTML脚本与Java代码混在一起,可读性极差,也难以维护。
2.模型阶段
JSP/Servlet + JavaBean(MV) 、JSP + Servlet + JavaBean(MVC) MV模式中,业务逻辑处理、数据库存取等部分抽取为JavaBean;JSP或Servlet则主要负责用户请求接收、页面跳转控制、用户响应生成及输入/输出表示
MVC模式中,对MV模式中JSP/Servlet的代码做进一步分割,输入/输出UI表示纳入JSP组件,用户请求接收、页面跳转控制及用户响应生成则纳入Servlet组件
随着所应对的业务越来越复杂,易于开发和维护成为了应用系统的首要技术指标,进而演变为基于模型的开发方式。 所谓基于模型的Java Web开发方式,就是将原处于同一个Servlet或JSP文件中的UI表示、业务逻辑以及输入输出响应分割为不同类型的组件,并通过这些组件的协同实现应用业务。
3.框架阶段
经典框架组合:JSF + EJB + JPA 轻量级框架组合 :Struts + Spring + Hibernate、Spring MVC + Spring + MyBatis 框架: 整个或部分系统的可重用设计,是可被应用开发者定制的应用骨架。 应用框架并不是包含构件应用程序本身,而是实现某应用领域通用完备功能(相对于应用所独有的业务功能等)的底层服务及各部分组件交互规范。
应用框架 |
---|
实现某应用领域通用完备功能(相对于应用所独有的业务功能等)的底层服务及各部分组件交互规范 |
1.框架是一种规范,规定了所包括组件构成及其之间的交互规范 |
2.框架又是一种基础服务的实现,为应用开发人员提供相应API及配置进行基于框架的应用系统开发 |
针对Java EE应用开发,目前存在很多框架: 应对UI交互、页面流程跳转等的框架如Struts、JSF 等; 应对业务逻辑处理的框架如Spring、EJB等; 应对数据持久的框架如Hibernate、MyBatis、JPA 等。 需根据项目的自身特点和具体需求选择合适框架组合。
目前主流的Java EE应用开发框架组合可分为两类: 经典(JSF+EJB+JPA):主要适用于对分布和可伸缩性要求较高的企业级Java EE应用开发 轻量级(Struts+Spring+Hibernate,SSH)/(Spring MVC+Spring+MyBatis,SSM):Java Web应用开发,开发效率较高
小结
小结 |
---|
随着计算机技术的发展以及需求的变迁,应用模式由早期的单机模式过渡到C/S架构和B/S直至当前的云应用 |
为了应对应用系统业务和技术的复杂性,Java EE采用多层架构(即表现层、业务层、持久层和数据层) |
Java EE应用中Applet、应用(Application)、JSP/Servlet、EJB等组件由相应的服务器作为Applet、应用、Web和EJB等容器提供运行环境和底层系统服务 |
Java EE基于“容器+组件”的编程原理,组件程序完成开发后需部署到相应的容器之中,才能被运行和访问 |
Java EE应用开发经历了从基于JSP/Servlet的原始阶段到基于业务分割的模型阶段到基于规范和基础服务的框架阶段 |
Java EE应用基于B/S架构,根据服务器端所开发的是Web组件还是EJB组件,分类为Java Web应用和Enterprise应用 |
Java Web应用开发和Enterprise应用开发基于相同的开发环境,区别在于运行环境方面前者由Web服务器充当Java EE服务器,而后者则相应地由应用服务器充当 |
JSP技术与MV模式开发
Java Web应用概述
基本概念
web开发:
1.web:网页 2.静态web:html、css(提供给所有人看的数据始终不会发生变化) 3.动态web:提供给所有人看的数据始终会发生变化,每个人在不同的时间,不同的地点看到的信息各不相同 技术栈:Servlet/JSP,ASP,PHP
web应用程序
静态web 缺点: 1.web页面无法动态更新,所有用户看到的都是同一个页面 2.无法与数据库交互(数据无法持久化,用户无法交互)
动态web 缺点: 1.加入服务器的动态web出现了错误的话我们需要重新编写我们的后台程序重新发布
静态网页 | 动态网页 |
---|---|
静态网页不是简单的静止不动的网页,主要指的是网页中没有程序代码只有HTML标记的代码 | 采用动态网页技术,具有良好的浏览器和服务器交互性,根据不同的要求动态产生页面内容 |
当Web服务器接收到对静态网页的请求时,服务器直接将静态网页发送给客户浏览器,不进行任何处理 | 支持后台数据库,将数据永久的保存在数据库,有利于数据的查找 |
静态网页内容相对固定,且不需要连接数据库,因此响应速度较快 | 使用动态页面,页面量减少,降低了网页的维护工作量,提高了工作效率 |
Java Web应用体系结构
1.一个Web应用程序是由完成特定任务的各种Web组件构成的,并通过Internet将服务展示给外界 2.在Java Web中,Web应用程序是由多个Servlet组件、JSP页面、HTML文件以及图像文件等组成。所有这些组件相互协调为用户提供一组完整的服务
Web组件技术:1.Servlet技术 2.JSP技术
角度 | SERVLET技术 | JSP技术 |
---|---|---|
功能 | 没有本质区别 | 可以相互转换 |
运行角度 | Servlet是JSP的基础 | JSP要转换为Servlet,才编译运行 |
用纯Java代码编写,便于调用Java的其它组件,适用于进行业务处理 | 将Java代码嵌入到HTML代码中,易于生成复杂Web页面,适用于提供输入界面或显示处理结果 |
Java Web应用基本组成 Java Web应用程序由一组Servlet组件、JavaBean类、JSP页面、HTML页面及其它相关的资源组成,它必须运行在实现了Servlet规范的容器中
Java Web应用文档结构
目录/文件 | 说明 |
---|---|
WebApp | 该应用的根目录,也是该应用部署后的访问起点。目录中存放了所有与该应用相关的资源,如:HTML网页、CSS文件、JavaScript文件、图片视频等 |
WebApp/WEB-INF | 存放受保护文件。该目录中保存的内容不能被客户端直接访问,只能由Web应用访问 |
WebApp/WEB-INF/classes | 保存编译后的Java类文件,如Servlet和JavaBean |
WebApp/WEB-INF/lib | 存放Web应用运行所必须的第三方JAR |
WebApp/WEB-INF/web.xml | 包含Web应用的配置及部署信息 |
注:HTTP协议
1.简单快速:客户向服务器请求服务时,只需传送请求方法、路径及所需的参数
2.灵活:HTTP允许传输任意类型的数据对象,传输类型由Content-Type加以标记
3.无状态:HTTP是无状态协议,所以速度较快
4.HTTP请求
A.GET 将请求数据添加到URL之后发给特定资源 发送数据量较小、安全性较差、处理速度较快
B.POST 以HTTP包方式向指定资源提交数据(表单、文件) 发送数据量较大、安全性较好、处理速度较慢
C.OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT
5.HTTP响应
A.正常响应
B.异常响应,返回HTTP错误状态码。 404:Not Found,请求资源未被在服务器上发现。 500:Internal Server Error,服务器端源代码出现错误。
EL与JSTL技术
MV开发模式
JSP/SERVLET | JAVABEAN |
---|---|
用户请求接收 | 业务逻辑处理 |
页面跳转控制 | 数据库存取 |
用户响应生成 | |
输入/输出UI表示 |
工作流程: 1.JSP/Servlet接收用户请求 2.调用JavaBean进行业务处理和数据存取 3.生成响应返回给客户端
小结
1.Java Web应用使用JSP和Servlet等Web核心技术来开发,一个Java Web应用程序由多个Servlet组件、JSP页面、JavaBean类、HTML文件以及图像文件等组成
2.JSP页面第一次被客户端请求访问时,将被转换为Servlet类文件,再被编译为相应的class文件
3.JSP页面的组成元素包括HTML元素和JSP元素,后者又分为脚本元素、指令元素、动作元素和注释元素
4.JSP内置对象有page、request、session和application等9种,可以不用声明直接使用。JSP对象范围从小到大依次为page、request、session和application范围
5.Java语言提供JDBC技术支持数据库应用开发,JDBC是Java EE重要的服务技术,提供到不同关系数据库统一的访问接口,并实现对数据库的透明访问
6.JDBC数据库编程有基于驱动程序的基础方法、基于连接池的改进方法和基于SQL标签库的简化方法
7.在Web开发中,结合EL和JSTL可以大大简化Web应用程序的开发,使得页面设计人员可以通过EL和JSTL将服务器端数据显示到JSP页面,并降低代码的耦合度
8.MV模式(JSP/Servlet+JavaBean)将用户请求接收、页面跳转控制、用户响应生成、输入/输出表示由JSP/Servlet组件负责,而JavaBean组件负责业务逻辑处理、数据库存取
Web服务器
技术讲解
ASP
1.在HTML中嵌入了VB的脚本,ASP+COM 2.在ASP的开发中基本一个页面都有几千行的业务代码,页面非常杂乱 3.维护成本高
PHP
1.开发速度很快,功能很强大,跨平台 2.代码很简单 3.无法承载大访问量的情况(局限性)
JSP/Servlet
B/S C/S 客户端和服务器 1.基于Java语言 2.可以承载三高问题带来的影响 3.语法像ASP
Web服务器
服务器是一种被动的操作,用来处理用户的一些请求和给用户一些响应信息
Tomcat
技术先进,性能稳定 是一个免费的开放源代码的web应用服务器,属于轻量级应用服务器。在中小型系统和并发访问用户不是很多的情况下杯普遍使用,是开发和调试JSP程序的首选
关于tomcat: 1.tomcat的文件夹的作用
2.可能遇到的问题 a.Java环境变量没有配置 b.闪退问题:需要配置兼容性 c.乱码问题:配置文件中设置
3.核心文件 conf/server.xml
4.可以配置启动的端口号 a.tomcat的默认端口号是8080 b.mysql:3306 c.http:80 d.https:443
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
5.可以配置主机的名称 默认的主机名称是:localhost->127.0.0.1 默认网站应该存放的位置是:webapps
<Host name="www.qinjiang.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
网站是如何访问的
1.输入一个域名然后回车 2.检查本机的C:\Windows\System32\drivers\etc\hosts配置文件下有没有这个域名映射; 如果有的话直接返回对应的ip地址,这个地址中有我们需要访问的web程序,可以直接访问 如果没有的话去DNS服务器找,找得到的话就返回,找不到的话就返回找不到