JavaEE 知识体系梳理
目录:
JaEE 介绍:
JavaEE 的 13 种核心技术规范:
1、JDBC(Java Database)数据库连接
2、JNDI(Java Naming and Directory Interfaces)Java 的命名和目录接口
3、EJB(Enterprise JavaBean)
4、RMI(Remote Method Invoke)远程方法调用
5、Java IDL(Interface Description Language)/CORBA(Common Object Broker Architecture)Java 接口定义语言/公用对象请求代理程序体系结构
6、JSP(Java Server Pages)
7、Servlet
8、XML(Extensible Markup Language)可扩展标记语言
9、JMS(Java Message Service)Java 消息服务
10、JTA(Java Transaction API)Java 事务 API
11、JTS(Java Transaction Service)Java 事务服务
12、JavaMail
13、JAF(JavaBean Activation Framework)
Java 开发平台简介
JavaEE 与 JavaSE 区别:
servlet 和 Java EE 结合点
JSP 与 HTML、JAVASE 知识接驳与技术结合的认知实践归纳总结
JavaEE:request 请求和 response 响应
请求和响应 API
使用 GET 和 POST 请求
使用参数
JavaEE 软件开发体系架构
三层架构
MVC
三层架构与 MVC:
Tomcat
JavaEE 介绍:
JavaEE 是一套使用Java进行企业级 Web 应用开发的大家一致遵循的工业标准。
JavaEE 平台提供了一个基于组件的方法来加快设计、开发、装配及部署企业应用程序。相较于 Microsoft 的.NET,Sun 公司的 Java*E 和一系列标准、技术及协议更接近或更满足互联网在智能化 Web 服务方面对开放性、分布性和平台无关性的要求。
来源:Java EE(Java Platform,Enterprise Edition)是 sun 公司(2009 年 4 月 20 日甲骨文将其收购)推出的企业级应用程序版本。这个版本以前称为 J2EE。能够帮助我们开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 3.0 应用程序。
JavaEE 的 13 种核心技术规范:
1、JDBC(Java Database)数据库连接
JDBC 是一组用于执行 SQL 的 Java API ,为访问不同的数据库提供了一种统一的途径,几乎所有的关系型数据库厂商(DBMS)都提供了 JDBC 的服务或驱动。JDBC 对数据库的访问也具有平台无关性。
JDBC 接驳数据库与展现与应用结合,面向数据—信息转换互动,进行实践认知的技术认识和归纳总结
Java EE 之所以那么普及,其中一个重要的因素就是开发人员可以简单地操纵各类数据库。
Java EE 提供多种操纵数据库的方式,其中,最基本的方式是使用 Java 数据库连接接口(Java Database Connectivity,JDBC)。
JDBC 是一组由 Java 类和接口组成的 API, 其设计目的是实现 Java 平台以独立方式访问不同类型的数据库。使用 IDBC,开发人员可以方便地执行 SQL 语句以操作各类数据库。通过 JDBC,开发人员能够实现与一个数据库建立连接, 向数据库发送 SQL 语句,并接受处理数据库返回的结果。
JDBC 驱动:
驱动程序的分类,不同数据库需要各自的数据库驱动程序,用于对数据库进行操纵。根据实现方式和与数据库的交互方式,JDBC 驱动程序可以分为以下四类:
JDBC-ODBC 桥
本地 API 部分 Java 驱动程序
网络纯 Java 驱动程序
本地协议纯 Java 驱动程序
2、JNDI(Java Naming and Directory Interfaces)Java 的命名和目录接口
JNDI 是命名目录服务的抽象接口集合,为企业级应用提供了统一的标准化连接,使 Java 能够无缝地获取任何可目录化的企业信息。在 JavaEE 体系中,JNDI 用来定位各种对象,包括 EJB、数据库驱动、JDBC 数据源及消息连接等。由于 JNDI 是独立于目录协议的,因此还可以用 JNDI 访问各种特定的目录服务,如 LDAP(轻量目录访问协议)、NDS(服务器目录访问服务)。
3、EJB(Enterprise JavaBean)
EJB 组件:JavaBean 是在编程环境(IDE)中能够被可视化处理的可重用组件,是实现分布式业务逻辑的 Java 组件。我们在开发的时候可以利用这些组件,像搭积木一样建立面向对象的分布式应用。
EJB 容器:是 EJB 组件的运行环境,为部署 EJB 组件提供服务,包括事务、安全、远程客户端的网络发布、资源管理等。
EJB 服务器:管理 EJB 容器的高端进程或应用程序,并提供对系统服务的访问。
调用 EJB 组件的应该称为 EJB 客户端,客户端可以运行在 Web 容器中。
4、RMI(Remote Method Invoke)远程方法调用
RMI 协议能够让在某个 Java 虚拟机上的对象,像调用本地对象一样调用另一个 Java 虚拟机中的对象上的方法。它使用了序列化方式在客户端和服务器端传送数据。RMI 是一种被 EJB 使用的更底层的协议。(stub/skeleton 层提供了客户程序和服务程序彼此交互的接口)
5、Java IDL(Interface Description Language)/CORBA(Common Object Broker Architecture)Java 接口定义语言/公用对象请求代理程序体系结构
IDL 是用来描述软件组件接口的一种计算机语言。IDL 通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信交流。
6、JSP(Java Server Pages)
JSP 页面由 HTML 代码和嵌入其中的 Java 代码所组成。服务器在页面被客户端所请求以后对这些 Java 代码进行处理,然后将生成的 HTML 页面返回给客户端的浏览器。
JSP 可以使用 Servlet 提供的 API,一般和 JavaBean 结合使用,从而将界面表现和业务逻辑分离。
7、Servlet
Servlet 是一种小型的 Java 程序,它扩展了 Web 服务器的功能。作为一种服务器端的应用,当被请求时开始执行。Servlet 提供的功能大多与 JSP 类似,不过实现的方式不同。JSP 通常是大多数 HTML 代码中嵌入少量的 Java 代码,而 servlets 全部由 Java 写成并且生成 HTML。
8、XML(Extensible Markup Language)可扩展标记语言
XML 是一种用于标记电子文件使其具有结构性的标记语言。它被用来在不同的商务过程中共享数据。XML 的发展和 Java 是相互独立的,但是它和 Java 有着相同的目标,即平台独立性。通过 Java 和 XML 的组合,可以得到一个完美的具有平台独立性的解决方案。
9、JMS(Java Message Service)Java 消息服务
JMS 是 Java 的消息服务,JMS 的客户端之间可以通过 JMS 服务进行异步的消息传输。JMS 用于和面向消息的中间件相互通信的应用程序接口(API)。它既支持点对点的域,有支持发布/订阅(publish/subscribe)类型的域,并且提供对下列类型的支持:经认可的消息传递,事务型消息的传递,一致性消息和具有持久性的订阅者支持。
JMS 消息系统带来的好处:1、提供消息灵活性;2、松散耦合;3、异步性。
10、JTA(Java Transaction API)Java 事务 API
在 JavaEE 应用中,事务是一个不可或缺的组件模型,它保证了用户操作 ACID(即原子、一致、隔离、持久)属性。对于那些跨数据源(例如多个数据库,或者数据库与 JMS)的大型应用,则必须使用全局事务 JTA。应用系统可以由 JTA 定义的标准 API 访问各种事务监控,JTA 为 JavaEE 平台提供了分布式事务服务,它隔离了事务与底层的资源,实现了透明的事务管理方式。
11、JTS(Java Transaction Service)Java 事务服务
JTS 是一个组件事务监视器。JTS 是 CORBA OTS 事务监控的基本实现。JTS 规定了事务管理器的实现方式。JTS 事务管理器为应用服务器、资源管理器、独立的应用以及通信资源管理器提供了事务服务。
12、JavaMail
JavaMail 是用于存取邮件服务器的 API,它提供了一套邮件服务器的抽象类。不仅支持 SMTP 服务器,也支持 IMAP 服务器和 POP 服务器。
13、JAF(JavaBean Activation Framework)
JavaMail 利用 JAF 来处理 MIME 编码的邮件附件。MIME 的字节流可以被转换成 Java 对象,或者转换自 Java 对象。大多数应用都可以不需要直接使用 JAF。
Java 开发平台简介
java 平台有三个版本,这使软件开发人员、服务提供商和设备生产商可以针对特定的市场进行开发:
Java SE(JavaPlatform,Standard Edition)。JavaSE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,并为 Java Platform,EnterPRise Edition(JavaEE)提供基础。
Java EE(JavaPlatform,Enterprise Edition)。这个版本以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 2.0 应用程序。
Java ME(Java Platform,Micro Edition)。这个版本以前称为 J2ME。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。
J2EE 即 Java2 平台企业版,它提供了基于组件的方式来设计、开发、组装和部署企业应用。J2EE 使用多层分布式的应用模型,这个多层通常通过三层或四层来实现:
客户层,运行在客户计算机上的组件。
Web 层,运行在 J2EE 服务器上的组件。
业务层,同样是运行在 J2EE 服务器上的组件。
企业信息系统层(EIS),是指运行在 EIS 服务器上的软件系统。
以上层次一般也指三层应用,因分布在三个不同位置:客户计算机、J2EE 服务器及后台的数据库或过去遗留下来的系统。
J2EE 也是一个框架,包括 JDBC、JNDI、RMI、JMS、EJB、JTA 等技术。
(1)JDBC(java DatabaseConnectivity)数据库系统
(2)JNDI(java Name and Directory Interface)java 命名和目录接口
(3)JSP(java server Pages)就是在 HTML 文件中加入服务器端的 VB Script 或 jiavaScript 代码,构成动态网页技术
(4)Servlet:servlet 是 Sun Microsystems 公司在 1997 年推出的,用 java 程序来实现动态网页技术
(5)EJB(Enterprise JavaBean)EJB 即企业级的 javaBean
(6)RMI(Remote Method Invoke)RMI 即远程方法调用
(7)IDL(java Interface Defiation Language)IDL 即接口定义语言
(8)XML(Extensible Markup Language)是一种可以用来定义其他标记语言的语言,它被用来在不同的商务过程中共享数据
(9)JMS(java Message Service)JMS 即 java 消息服务,是用于和面向消息的中间件相互通信的应用程序接口(API)
(10)Java 事务 API(JTA)和 java 事务服务(JTS)用于使系统保持在一致的状态
(11)JavaMail:支持 POP3、SMTP 服务,也支持 IMAP 服务器
J2EE 应用程序由组件构成,J2EE 规范定义了下面一些组件:
☆运行在客户端的应用客户程序及小程序。
☆运行于服务器网络的 Servlet&Jsp 组件。
☆运行于服务端的企业逻辑组件——EJB。
JavaEE 与 JavaSE 区别:
Java SE(Java Platform,Standard Edition)。Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,并为 Java Platform,Enterprise Edition(Java EE)提供基础。
Java EE(Java Platform,Enterprise Edition)。这个版本以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 2.0 应用程序。
Java SE 就是做电脑上的运行软件。
Java EE 就是用来做网站的 (例如 JSP、Html5、CSS3)。
servlet 和 Java EE 结合点
JSP 与 HTML、JAVASE 知识接驳与技术结合的认知实践归纳总结
JSP,它使用 Java 代码作为服务器端的脚本,可以使用 Dreamweaver 等网页制作工具来编写,直观方便。另外,部署时直接将 JSP 文件放在 Web 应用的目录下即可,不需要编译,也不需要额外的配置,比编写 Servlet 方便。
JSP 全称为 Java Sever Pages,是一 种动态网页开发技术。其特点是使用 JSP 标签,在 HTML 网页中插入 Java 代码。JSP 标签以“<%”开始并以"%>”结束,通常,称这样的格式为小脚本(Scriptlet)。
使用 JSP 技术开发动态 Web 项目是目前流行的选择。JSP 以 Java 技术为基础,因此同样具有“一次编写,到处运行”的优点,同一个 JSP 应用可以运行在不同的平台上,并且还有很多开源项目可以集成,丰富 Web 应用。
JSP 是一种文本文件,最终会由容器编译为 Java Servlet。 JSP 主要用于实现动态 Web 应用程序的用户界面部分。网页开发人员通过 HTML、XHTML、XML 以及嵌入 JSP 操作和命令来编写 JSP。
JSP 标签可以实现多种功能,比如访问数据库、记录用户填写的表单信息、访问 JavaBeans 组件等,还可以在不同的网页中传递控制信息和共享信息。JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源以获取数据,然后动态地创建网页。
JavaEE:request 请求和 response 响应
请求和响应 API
我们已经知道,接收到客户端请求后,容器会创建 request(请求)对象和 response(响应)对象,根据 HTTP 请求类型,调用相应的 doGet().doPost()等方法,并将 request 对象和 response 对象作为参数传递给这些方法。也就是说,这些方法都需要处理 request 对象和 response 对象。
ServletRequest 接口隶属于 javax.servlet 包,是 HttpServletRequest 接口的父接口,后者隶属于 javax.servlet.http 包,主要处理有关 HTTP 的内容,如 Cookie、Header 和 Session。
HttpServletRequest 接口添加了与 HTTP 协议相关的方法,Servlet 使用这些内容与客户端浏览器进行通信。
Web 服务器接收到客户端的 http 请求,会针对每一次请求,分别创建一个用于代表请求的 request 对象、和代表响应的 response 对象。
request 和 response 对象既然代表请求和响应,那么我们要获取客户机提交过来的数据,只需要找 request 对象,就行了。要向客户机输出数据,只需要找 response 对象就行了。
HttpServletRequest 封装客户端相关信息,服务器 Servlet 程序可以通过 request 对象操作客户端信息
HttpServletResponse 封装服务器向客户端发送响应数据信息,Servlet 程序通过 response 对象向客户端发送响应
response
1.response 常用 API
setStatus:设置响应行当中的状态码
setHeader:设置响应头信息
getOutputStream:获得字节流 --- 输出响应体内容
getWriter:获得字符流 --- 输出响应体内容
2.HttpServletResponse 继承 ServletResponse 接口,ServletResponse 并没有提供与 HTTP 协议相关 API,HttpServletResponse 添加了与协议相关 API
JavaEE API 中并没有提供 HttpServletResponse 实现类---实现类由 tomcat 服务器提供的
3.常用状态码:200 302 304 404 500
200 请求处理成功
302 客户端重定向
304 客户端访问资源没有被修改,客户端访问本地缓存
404 访问资源不存在
500 服务器内部出错
使用 GET 和 POST 请求
HTTP GET 和 HTTP POST 是开发 web 应用的两种最重要的请求方法。两者的区别是 POST 有体(body),而 GET 没有。
POST 与 GET 不同:
POST 没有查询字符串,请求行后面的几行都是请求头。长度不受请求行的限制。
如果用户希望能够收藏网页,GET 能够请求收藏,但 POST 请求不能
两者的安全性也不同,GET 将请求信息放在 URL,POST 放在报文体中
具体用途不同,GET 请求意味着获取信息,进行简单的、周期性的检索。POST 请求亦为之发送需要处理的信息,去更新
GET 和 POST 请求的编程
POST 请求需要表单,在<form>标签中使用 method 属性指定 HTTP 方法为 POST,使用 action 属性指定表单提交的地址。
代码:
GET 请求可以使用两种方式:
第一种方式直接使用超链接,超链接总是使用 GET 请求,代码如下:
第二种方法使用表单,既可以不指定<form>标签的 method 属性,也可以明确指定<form>标签的 method 属性为 GET,代码如下:
使用参数
Servlet 编程中的一个重要环节是接收用户的输入参数,然后才能进行后面的处理环节。接收输入参数的具体方法是调用 request 对象的 getParameter()方法,该方法的输入参数是一个字符串变量,指定参数的名称,该名称对应表单输入组件的 name 属性。例如,对于前面的 login.html,接收参数的代码片段如下:
大部分的表单输入参数都只有单个值,都可以采用上述方法获取参数。但也有例外的情况,如复选框,一个参数可以有多个值。 在这种情况下,就不能再使用只返回单个字符串的 getParameterf()方法,而是要使用 getParameterValues()方法,返回一个字符串数组。
例如,如果表单使用如下的复选框,用户就可以选择多个值。也就是说,单个参数 hobbies 就可以有多个值,具体值的个数取决于用户选中的选项数:
JavaEE 软件开发体系架构
两层架构
传统的客户服务器系统仅只简单地基于两层体系来构建,即客户端(前台)和企业信息系统(后台),没有任何中间件,业务逻辑层与表示层或数据层混在一起。这种两层架构无论从开发、部署、扩展、维护来说,综其只有一个特点——成本高。
三层架构
三层架构自上而下将系统分为表示层、逻辑层、持久层。
表示层由处理用户交互的客户端组件及其容器所组成;
业务逻辑层由解决业务问题的组件组成;
数据层由一个或多个数据库组成,并可包含存储过程。
这种三层架构,在处理客户端的请求时,使客户端不用进行复杂的数据库处理;透明地为客户端执行许多工作,如查询数据库、执行业务规则和连接现有的应用程序;并且能够帮助开发人员创建适用于企业的大型分布式应用程序。
三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。
1.概念简介:
表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、查找等。
2.概述:
在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。
三层结构原理
3 个层次中,系统主要功能和业务逻辑都在业务逻辑层进行处理。
所谓三层体系结构,是在客户端与数据库之间加入了一个“中间层”,也叫组件层。这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有 B/S 应用才是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到一台机器上。
三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过 COM/DCOM 通讯与中间层建立连接,再经由中间层与数据库进行交互。
各层的作用
1:数据访问层:主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务.
2:业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。
3:表示层:主要表示 WEB 方式,也可以表示成 WINFORM 方式,WEB 方式也可以表现成:aspx,如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。
注意:在 Java web 项目中:
dao 层:数据访问层,操作数据库,对数据进行增删改查
service 层:业务逻辑层,对数据进行处理
web 层:表示层,给页面传递数据
具体的区分方法
数据访问层:主要看你的数据层里面有没有包含逻辑处理,实际上他的各个函数主要完成各个对数据文件的操作。而不必管其他操作。
业务逻辑层:主要负责对数据层的操作。也就是说把一些数据层的操作进行组合。
表示层:主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问
1.表现层
位于最外层(最上层),离用户最近。用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。
2.业务逻辑层
业务逻辑层(Business Logic Layer)无疑是系统架构中体现核心价值的部分。它的关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(Domain)逻辑有关,很多时候,也将业务逻辑层称为领域层。例如 Martin Fowler 在《Patterns of Enterprise Application Architecture》一书中,将整个架构分为三个主要的层:表示层、领域层和数据源层。作为领域驱动设计的先驱 Eric Evans,对业务逻辑层作了更细致地划分,细分为应用层与领域层,通过分层进一步将领域逻辑与领域逻辑的解决方案分离。
业务逻辑层在体系架构中的位置很关键,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是“无知”的,改变上层的设计对于其调用的底层而言没有任何影响。如果在分层设计时,遵循了面向接口设计的思想,那么这种向下的依赖也应该是一种弱依赖关系。因而在不改变接口定义的前提下,理想的分层式架构,应该是一个支持可抽取、可替换的“抽屉”式架构。正因为如此,业务逻辑层的设计对于一个支持可扩展的架构尤为关键,因为它扮演了两个不同的角色。对于数据访问层而言,它是调用者;对于表示层而言,它却是被调用者。依赖与被依赖的关系都纠结在业务逻辑层上,如何实现依赖关系的解耦,则是除了实现业务逻辑之外留给设计师的任务。
3.数据层
数据访问层:有时候也称为是持久层,其功能主要是负责数据库的访问,可以访问数据库系统、二进制文件、文本文档或是 XML 文档。
简单的说法就是实现对数据表的 Select,Insert,Update,Delete 的操作。如果要加入 ORM 的元素,那么就会包括对象和数据表之间的 mapping,以及对象实体的持久化。
优缺点
优点
开发人员可以只关注整个结构中的其中某一层;
可以很容易的用新的实现来替换原有层次的实现;
可以降低层与层之间的依赖;
有利于标准化;
利于各层逻辑的复用。
结构更加的明确
在后期维护的时候,极大地降低了维护成本和维护时间
缺点
降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。
增加了开发成本。
MVC
在 MVC 模式中,应用程序被划分为模型层(Model)、视图层(View)、控制层(Controller)三部分。MVC 模型就是把一个应用程序的开发按照业务逻辑、数据、视图进行分离分层并组织代码。MVC 要求把应用的模型按一定的层次规则抽取出来,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。模型层负责封装应用的状态,并实现功能,视图层负责将内容呈现给用户,控制层负责控制视图层发送的请求以及程序的流程。
Servlet+JSP+JavaBean(MVC)这种模式比较适合开发复杂的 web 应用,在这种模式下,Servlet 负责处理用户请求,JSP 负责数据显示,JavaBean 负责封装数据。
基于 JavaEE 架构模式下的 MVC
在这种架构模式下,模型层(Model)定义了数据模型和业务逻辑。为了将数据访问与业务逻辑分离,降低代码之间的耦合,提高业务精度,模型层又具体划分为了 DAO 层和业务层,DAO 即 Data Access Object,其主要职能是将访问数据库的代码封装起来,让这些代码不会在其它层出现或者暴露出来给其它层;业务层是整个系统最核心也是最具有价值的一层,该层封装应用程序的业务逻辑,处理数据,关注客户需求,在业务处理过程中会访问原始数据或产生新数据,DAO 层提供的 DAO 类能很好地帮助业务层完成数据处理,业务层本身侧重于对客户需求的理解和业务规则的适应,总体说来,DAO 层不处理业务逻辑,只为业务层提供辅助,完成获取原始数据或持久层数据等操作。
MVC 模式是一种软件框架模式,被广泛应用在 JavaEE 项目的开发中。MVC 模式很好理解,但也十分重要,在今后的 Web 应用开发中,我们都离不开它。
什么是 MVC
MVC 中各个模块的职责:
MVC 即模型(Model) 、视图(View)、控制器(Controller)。
model 模型:劳动者
-接受 controller 的指令。
-告诉 model 做什么,controller 要拿到什么。
-通过自身功能实现和 DAO 去处理这个事情。
-以最快最准确的方式完成 controller 交给的任务。
model 就是一直和控制器 controller 和数据库 DB 交互的中间件,:里边拿最原始的材料,经过适当的加工成半成品,将这个半成品交给控制器 controller,controller 对半成品做适当的封装交给一线的 view 进一步完善并表现到前端。并且 model 有很多种,数据封装;核心算法、核心业务、关键操作;工具集等。
模型是用于处理数据逻辑的部分。所谓数据逻辑,也就是数据的映射以及对数据的增删改查,Bean、DAO(data access object,数据访问对象)等都属于模型部分。
controller 控制器:
协调 model 和 view 的中间件。
-从 view 拿数据给 model。
-model 处理并控制 DAO 和数据库交互。
-通过 controller 回馈给 view 显示告诉用户程序做了什么。
view->controller->model->db
db->model->controller->view
控制器是模型与视图之间的桥梁,控制着数据与用户的交互。控制器通常负责从视图读取数据,处理用户输入,并向模型发送数据,也可以从模型中读取数据,再发送给视图,由视图显示。
视图(View)
-负责从用户那里拿到 controller 想要获取到的数据
-人机交互。
视图负责数据与其它信息的显示,也就是给用户看到的页面。html、jsp 等页面都可以作为视图。
为什么要用 MVC
看着舒服:前面学习 Servlet 和 JSP 的时候,我们发现这俩东西都是功能和显示混着来,可读性很差,而使用 MVC,Servlet 里都是逻辑代码,JSP 都是显示代码,一目了然。
写着容易:MVC 模式有利于人员的分工合作,不同的开发人员可各自发挥专长,同时开发不同的部分。
改着省心:MVC 可以在一个时间内专门关注一个方面,从而让应用程序的测试与迭代更加方便。所以,复杂的应用程序大都会选择使用 MVC 模式。
上述好处,用一句行话来说,就叫 “高内聚 低耦合”。
设计模式与框架模式
在搜集资料的时候发现很多地方把 MVC 称为一种 “设计模式”,一开始我觉得没什么毛病,从字面上完全说地通,但是仔细一想,“设计模式” 这个词是一个术语,是指工厂模式、单例模式这些东西,是不能乱用的。而 MVC,应该被称作是 “框架模式”。
设计模式,是针对 “代码” 的,如同修筑房屋时砖瓦的层叠方式,是软件开发的基石。
框架模式,是针对 “框架” 的,是面向某些应用场景的可复用的方案,如同医院、商场等不同功能建筑的布局,是比设计模式更宏观一些的概念。在今后的文章中,我将与大家共同学习当前的主流框架。
MVC 实践
在 JavaEE 中,最为经典的 MVC 模式即
Bean(Model) + JSP(View) + Servlet(Controller)
假如有一个需求:实现编辑网页上的信息并与数据库同步
在实现上,可以分为以下几步:
用 Bean 来映射数据表,并编写好 DAO
用负责查询的 Servlet 调用 DAO 查询需要编辑的内容并发送给用于编辑的 jsp 页面
把编辑页面进行修改后的值,再提交给负责更新的 Servlet 调用 DAO 更新数据库
使用另一个负责查询的 Servlet,把查询出来的更新过的内容发送给负责显示的 JSP
JSP:JSP 被用来产生 Web 的动态内容。这层把应用数据以网页的形式呈现给浏览器,然后数据按照在 JSP 中开发的预定的方式表示出来,这层也可以称之为布局层。
Servlet:JSP 建立在 Servlet 之上,Servlet 是 J2EE 的重要组成部分。Servlet 负责处理用户请求,Java Web 项目的所有配置都写在了 web.xml 配置文件里,当项目运行的时候,web.xml 会将 http 请求映射给对应的 Servlet 类。
JavaBean:由一些具有私有属性的 Java 类组成,对外提供 get 和 set 方法。JavaBean 负责数据,负责处理视图层和业务逻辑之间的通信。
Service:业务处理类,对数据进行一些预处理。
DAO:数据访问层,JDBC 调用存储过程,从数据库(DataBase)那里获取到数据,再封装到 Model 实体类中去。
三层架构与 MVC:
相同之处:
三层架构中的 UI 对应 MVC 中的 view(jsp),都是用于显示以及获取界面的数据;三层架构中的 BLL 层和 DAL 层对应 MVC 中的 Model(javabean)层都是用于处理上层传递来的数据以及从数据库获取的数据的;MVC 中的 Controller(Servlet)最多算是三层架构中的 UI 的一部分,也就我们常说的是 Servlet。
不同之处:
三层是整个应用程序架构,MVC 是功能模块。
三层是基于业务逻辑来分的,而 MVC 是基于页面来分的。
MVC 模式是一种复合设计模式,一种解决方案。
三层是种软件架构,通过接口实现编程。
三层模式是体系结构模式,MVC 是设计模式。
三层模式又可归于部署模式,MVC 可归于表示模式。
二者使用范围不同:
三层可以应用于任何语言、任何技术的应用程序【实现概念级:为了明确逻辑】 M
VC 只是为了解决 B/S 应用程序视图层各部分的耦合关系【软件概念级:为了解耦】
互不冲突,可以同时存在,也可根据情况使用其中一种。
Tomcat
Tomcat 是 Apache 软件基金会(Apache Software Foundation)的 Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了 Sun 的参与和支持,最新的 Servlet 和 JSP 规范总是能在 Tomcat 中得到体现,Tomcat 5 支持最新的 Servlet 2.4 和 JSP 2.0 规范。因为 Tomcat 技术先进、性能稳定,而且免费,因而深受 Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的 Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好 Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上 Tomcat 是 Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行 tomcat 时,它实际上作为一个与 Apache 独立的进程单独运行的。
诀窍是,当配置正确时,Apache 为 HTML 页面服务,而 Tomcat 实际上运行 JSP 页面和 Servlet。另外,Tomcat 和 IIS 等 Web 服务器一样,具有处理 HTML 页面的功能,另外它还是一个 Servlet 和 JSP 容器,独立的 Servlet 容器是 Tomcat 的默认模式。不过,Tomcat 处理静态HTML的能力不如 Apache 服务器。
一起学习,一起进步 -.- ,如有错误,可以发评论
版权声明: 本文为 InfoQ 作者【空城机】的原创文章。
原文链接:【http://xie.infoq.cn/article/dd6089ebaed99ea72d69ff6a7】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论