JavaEE知识体系梳理

目录

 

JavaEE介绍:

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驱动程序

JavaEE知识体系梳理_第1张图片

2、JNDI(Java Naming and Directory Interfaces)Java 的命名和目录接口

JNDI是命名目录服务的抽象接口集合,为企业级应用提供了统一的标准化连接,使Java能够无缝地获取任何可目录化的企业信息。在JavaEE体系中,JNDI用来定位各种对象,包括EJB、数据库驱动、JDBC数据源及消息连接等。由于JNDI是独立于目录协议的,因此还可以用JNDI访问各种特定的目录服务,如LDAP(轻量目录访问协议)、NDS(服务器目录访问服务)。

JavaEE知识体系梳理_第2张图片

3、EJB(Enterprise JavaBean)

EJB组件:JavaBean是在编程环境(IDE)中能够被可视化处理的可重用组件,是实现分布式业务逻辑的 Java 组件。我们在开发的时候可以利用这些组件,像搭积木一样建立面向对象的分布式应用。

EJB容器:是EJB组件的运行环境,为部署EJB组件提供服务,包括事务、安全、远程客户端的网络发布、资源管理等。

EJB服务器:管理EJB容器的高端进程或应用程序,并提供对系统服务的访问。

  调用EJB组件的应该称为EJB客户端,客户端可以运行在Web容器中。

JavaEE知识体系梳理_第3张图片

4、RMI(Remote Method Invoke)远程方法调用

RMI协议能够让在某个Java虚拟机上的对象,像调用本地对象一样调用另一个Java虚拟机中的对象上的方法。它使用了序列化方式在客户端和服务器端传送数据。RMI是一种被EJB使用的更底层的协议。(stub/skeleton层提供了客户程序和服务程序彼此交互的接口)

JavaEE知识体系梳理_第4张图片

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结合使用,从而将界面表现和业务逻辑分离。

JavaEE知识体系梳理_第5张图片

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平台提供了分布式事务服务,它隔离了事务与底层的资源,实现了透明的事务管理方式。

JavaEE知识体系梳理_第6张图片

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使用多层分布式的应用模型,这个多层通常通过三层或四层来实现:

  1.  客户层,运行在客户计算机上的组件。
  2.  Web 层,运行在J2EE服务器上的组件。
  3.  业务层,同样是运行在J2EE服务器上的组件。
  4.  企业信息系统层(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结合点

JavaEE知识体系梳理_第7张图片

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请求需要表单,在

标签中使用method属性指定HTTP方法为POST,使用action属性指定表单提交的地址。

 

代码:

我的第一个HTML页面

姓名:

密码:



 

GET请求可以使用两种方式:

第一种方式直接使用超链接,超链接总是使用GET请求,代码如下:

点击

第二种方法使用表单,既可以不指定

标签的method属性,也可以明确指定标签的method属性为GET,代码如下:

我的第一个HTML页面

姓名:

密码:



点击

 

使用参数

Servlet编程中的一个重要环节是接收用户的输入参数,然后才能进行后面的处理环节。接收输入参数的具体方法是调用request对象的getParameter()方法,该方法的输入参数是一个字符串变量,指定参数的名称,该名称对应表单输入组件的name属性。例如,对于前面的login.html,接收参数的代码片段如下:

 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

response.setCharacterEncoding("UTF-8");

//response.getWriter().append("Served at: ").append(request.getContextPath());

response.setHeader("Content-type", "text/html;charset=UTF-8");

//获取参数

String username = request.getParameter("username");

String userpwd = request.getParameter("userpwd");

String gender = request.getParameter("gender");

String email = request.getParameter("email");

String resume = request.getParameter("resume");

String[] hobbies = request.getParameterValues("hobbies");

}

大部分的表单输入参数都只有单个值,都可以采用上述方法获取参数。但也有例外的情况,如复选框,一个参数可以有多个值。 在这种情况下,就不能再使用只返回单个字符串的getParameterf()方法,而是要使用getParameterValues()方法,返回一个字符串数组。

例如,如果表单使用如下的复选框,用户就可以选择多个值。也就是说,单个参数hobbies就可以有多个值,具体值的个数取决于用户选中的选项数:

爱好:跳舞

唱歌

音乐

游泳

足球





 

JavaEE软件开发体系架构

两层架构

  传统的客户服务器系统仅只简单地基于两层体系来构建,即客户端(前台)和企业信息系统(后台),没有任何中间件,业务逻辑层与表示层或数据层混在一起。这种两层架构无论从开发、部署、扩展、维护来说,综其只有一个特点——成本高。

  三层架构

  三层架构自上而下将系统分为表示层、逻辑层、持久层。

  表示层由处理用户交互的客户端组件及其容器所组成;

  业务逻辑层由解决业务问题的组件组成;

  数据层由一个或多个数据库组成,并可包含存储过程。

  这种三层架构,在处理客户端的请求时,使客户端不用进行复杂的数据库处理;透明地为客户端执行许多工作,如查询数据库、执行业务规则和连接现有的应用程序;并且能够帮助开发人员创建适用于企业的大型分布式应用程序。

JavaEE知识体系梳理_第8张图片

三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。

1.概念简介:

  1. 表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
  2. 业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
  3. 数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、查找等。

2.概述:

在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。

三层结构原理

  3个层次中,系统主要功能和业务逻辑都在业务逻辑层进行处理。

  所谓三层体系结构,是在客户端与数据库之间加入了一个“中间层”,也叫组件层。这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到一台机器上。

  三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过COM/DCOM通讯与中间层建立连接,再经由中间层与数据库进行交互。

JavaEE知识体系梳理_第9张图片

各层的作用

 

1:数据访问层:主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务.

 

2:业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。

 

3:表示层:主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx,如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。

 

注意:在Java web 项目中:

dao层:数据访问层,操作数据库,对数据进行增删改查

service层:业务逻辑层,对数据进行处理

web层:表示层,给页面传递数据

具体的区分方法

  1. 数据访问层:主要看你的数据层里面有没有包含逻辑处理,实际上他的各个函数主要完成各个对数据文件的操作。而不必管其他操作。
  2. 业务逻辑层:主要负责对数据层的操作。也就是说把一些数据层的操作进行组合。
  3. 表示层:主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问

 

1.表现层

位于最外层(最上层),离用户最近。用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。

2.业务逻辑层

     业务逻辑层(Business Logic Layer)无疑是系统架构中体现核心价值的部分。它的关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(Domain)逻辑有关,很多时候,也将业务逻辑层称为领域层。例如Martin Fowler在《Patterns of Enterprise Application Architecture》一书中,将整个架构分为三个主要的层:表示层、领域层和数据源层。作为领域驱动设计的先驱Eric Evans,对业务逻辑层作了更细致地划分,细分为应用层与领域层,通过分层进一步将领域逻辑与领域逻辑的解决方案分离。

  业务逻辑层在体系架构中的位置很关键,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是“无知”的,改变上层的设计对于其调用的底层而言没有任何影响。如果在分层设计时,遵循了面向接口设计的思想,那么这种向下的依赖也应该是一种弱依赖关系。因而在不改变接口定义的前提下,理想的分层式架构,应该是一个支持可抽取、可替换的“抽屉”式架构。正因为如此,业务逻辑层的设计对于一个支持可扩展的架构尤为关键,因为它扮演了两个不同的角色。对于数据访问层而言,它是调用者;对于表示层而言,它却是被调用者。依赖与被依赖的关系都纠结在业务逻辑层上,如何实现依赖关系的解耦,则是除了实现业务逻辑之外留给设计师的任务。

3.数据层

数据访问层:有时候也称为是持久层,其功能主要是负责数据库的访问,可以访问数据库系统、二进制文件、文本文档或是XML文档。

  简单的说法就是实现对数据表的Select,Insert,Update,Delete的操作。如果要加入ORM的元素,那么就会包括对象和数据表之间的mapping,以及对象实体的持久化。

优缺点

优点

  1. 开发人员可以只关注整个结构中的其中某一层;
  2. 可以很容易的用新的实现来替换原有层次的实现;
  3. 可以降低层与层之间的依赖;
  4. 有利于标准化;
  5. 利于各层逻辑的复用。
  6. 结构更加的明确
  7. 在后期维护的时候,极大地降低了维护成本和维护时间

缺点

  1. 降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
  2. 有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。
  3. 增加了开发成本。

MVC

  在MVC模式中,应用程序被划分为模型层(Model)、视图层(View)、控制层(Controller)三部分。MVC模型就是把一个应用程序的开发按照业务逻辑、数据、视图进行分离分层并组织代码。MVC要求把应用的模型按一定的层次规则抽取出来,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。模型层负责封装应用的状态,并实现功能,视图层负责将内容呈现给用户,控制层负责控制视图层发送的请求以及程序的流程。

Servlet+JSP+JavaBean(MVC)这种模式比较适合开发复杂的web应用,在这种模式下,Servlet负责处理用户请求,JSP负责数据显示,JavaBean负责封装数据。

JavaEE知识体系梳理_第10张图片

基于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是功能模块。

  1. 三层是基于业务逻辑来分的,而MVC是基于页面来分的。

MVC模式是一种复合设计模式,一种解决方案。

三层是种软件架构,通过接口实现编程。

  1. 三层模式是体系结构模式,MVC是设计模式。
  2. 三层模式又可归于部署模式,MVC可归于表示模式。

二者使用范围不同:

  1. 三层可以应用于任何语言、任何技术的应用程序【实现概念级:为了明确逻辑】 M
  2. VC只是为了解决B/S应用程序视图层各部分的耦合关系【软件概念级:为了解耦】
  3. 互不冲突,可以同时存在,也可根据情况使用其中一种。

 

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服务器。

 

 

 

 

 

 一起学习,一起进步 -.- ,如有错误,可以发评论

你可能感兴趣的:(Java)