J2EE与EJB

问题及答案来源自《Java程序员面试笔试宝典》第五章 Java Web 5.2 J2EE与EJB

1、什么是J2EE?

J2EE是Java平台企业版的简称,是用来开发和部署企业级应用的一个架构,提供了统一的、开放标准的多层平台

J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共同的标准及规格,让各种

依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,企业内部

或外部难以互通的窘境。

 

J2EE组件和“标准的” Java类的不同点在于:它被装配在一个J2EE应用中,具有固定的格式并遵守J2EE规范,由J2EE服务器对其进行管理。

J2EE组件:

  • 客户端应用程序和applet是运行在客户端的组件
  • Java Servlet和Java Server Pages (JSP) 是运行在服务器端的Web组件
  • Enterprise Java Bean (EJB )组件是运行在服务器端的业务组件

3、EJB有哪些不同的类型?

EJB:

EJB是enterprise JavaBean的简称,相当于分布式组件对象模型,它是一种服务器端组件体系结构,用于开发和部署

多层的、分布式的以及面向对象的应用体系的跨平台体系结构。EJB简化了Java开发企业级的分布式组件应用程序的

过程, 它定义了一组可重用的组件:Enterprise Beans

EJB分为如下三种类型:

(1)Session Bean

Session Bean用来实现服务器端的业务逻辑,同时协调Bean之间的交互,另外Session Bean仅存在于客户应用和服务器交互的

时间段内,Session Bean中的数据不会保存在数据库中

Session Bean可以分为两种状态:

  • Stateless Session Bean(无状态的Session Bean)
  • Stateful Session Bean(有状态的Session Bean)

(2)Entity Bean

Entity Bean主要是资料组件,代表数据库里的记录,因此它与数据库中的数据有着相同的生存周期,也就是说只要数据库中的

数据存在,Entity Bean就一直存在。另外Entity Bean还可以被多个客户应用共享

(3)Message Driver Bean

Message Driver Bean用来处理异步消息,一般不是由用户调用,它的调用方式是一旦有异步消息发到某个Message Driver Bean

后,容器都会负责调用Message Driver Bean的OnMessage()方法来处理异步请求

4、EJB与JavaBean有什么异同?

EJB:

EJB是基于Java的远程方法调用技术,可以被远程访问(跨进程、跨计算机),但它必须部署在webspere、weblogic等容器中

EJB客户从不直接访问真正的EJB组件,而是通过其容器访问,EJB容器是EJB组件的代理,其组件由容器创建和管理

 

Java Bean:

Java Bean是可重用的组件,没有严格的规范限制,因此可以说任何一个类都是一个javabean,但是通常情况下,java bean是

由容器所创建的(比如tocamt).而且javabean必须要有自己的无参构造器,必须实现serializable接口便于持久化操作。所以

Java Bean就相当于com组件,是不能被跨进程访问的。

EJB与Java Bean的区别:

  • EJB主要用在服务器端的开发,Java Bean主要用在客户端的开发
  • EJB可作为独立的单元被部署到EJB容器中,Java Bean不可部署
  • EJB支持使用部署描述对EJB应用进行定制化,Java Bean定制化只能在开发阶段
  • EJB构件分布式对象,可以被远程的对象访问,Java Bean构件不是分布式对象,只能在应用程序内部被访问
  • EJB构件对终端用户不可见,部分Java Bean对终端用户可见

5、EJB有哪些生命周期?

EJB有 entity bean, session bean, MD bean(Message Driver Bean)

其实entity bean 是随便服务器启动而初始化,随着服务器关闭而销毁。 

MD bean作为JMS的消费端,不包含客户端状态,它的生命周期有EJB容器用对象池管理管理。所以应该是当JMS端访问

MD bean时候 可能会创建,也可能会调用一个已经存在的。 

关于session bean, 分为有状态和无状态。 

  • 有状态session bean 的生命周期是客户端访问请求时候创建,并且受事务管理,在事物完成后销毁。 
  • 无状态session bean 的生命周期类似于MD bean,有对象池管理。 

6、EJB的角色有哪几种?

EJB将开发部署EJB应用的任务划分到了6个不同的角色,它们分别为:

  • Enterprise Bean Provider:企业级组件开发者
  • Application Assembler:应用组合者
  • EJB Deployer:EJB部署者
  • EJB Server Provider:EJB服务器提供者
  • EJB Container Provider:EJB容器提供者
  • System Administrator:系统管理员

每个角色都可以由不同的开发商提供,每个角色所做的工作都必须严格遵循EJB规范,并保证彼此之间的兼容性

11、web服务器与web应用服务器有什么区别?

web服务器:

真正意义上的web服务器就两个 : IIS 和 apache 

web 服务器可以提供代理服务,即可以访问本地磁盘上所有的资源文件,即使项目资源文件没有放在服务器中。 

常见的web服务器有: nginx , nginx 是Apache 提供的web服务器,nginx是一款高性能、轻量级的web服务器和

反向代理服务器以及邮件代理服务器。支持高并发,并发量50000 。nginx不能解析动态的jsp页面

web应用服务器:

在java web开发时,最早接触的web服务器是tomcat,其实tomcat是web应用服务器,任何的 web项目资源文件如果

没有部署在tomcat应用服务器中(资源文件没有放在tomcat安装目录中),都将不能访问得到

类似的web应用服务器还有 weblogic 和 jetty等

两者的区别:

  • web服务器只能解析静态页面,即html页面,它请求的路径是固定的
  • web应用服务器可以解析动态的jsp页面,即它请求的路径是动态生成的,负责的是请求的逻辑处理

一般在web项目开发 中,apache+tomcat+nginx联合使用,访问静态资源时用apache解析,访问动态资源时

用tomcat解析,nginx作为反向代理服务器,同时支持高并发

12、什么是Web Service?

WebService:

WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的

相互调用,通过Internet进行基于Http协议的网络应用间的交互。 WebService实现不同语言间的调用,是依托于一个

标准,webservice是需要遵守WSDL(web服务定义语言)/SOAP(简单请求协议)规范的。

WebService=WSDL+SOAP+UDDI(webservice的注册)

Web Service是通过提供标准的协议和接口,可以让不同的程序集成的一种SOA架构。

WebService基于以下协议实现:

  • XML:可拓展标记语言
  • WSDL:web服务描述语言
  • UDDL:通用描述、发现与集成服务
  • SOAP:简单对象存取协议

WebService的优点:

  • 完好的封装性
  • 松耦合
  • 动态性

WebService的基本原理:

  • Service Provider采用WSDL描述服务
  • Service Provider 采用UDDI将服务的描述文件发布到UDDI服务器(Register server)
  • Service Requestor在UDDI服务器上查询并 获取WSDL文件
  • Service requestor将请求绑定到SOAP,并访问相应的服务

13、SOAP与REST有什么区别?

SOAP和REST:

SOAP:将HTTP协议作为传输层协议,本质是采用HTTP进行传输,使用XML封装消息内容的RPC调用。

REST:REST并不是一种协议,只是一种设计规范,该设计规范要求程序遵守HTTP协议最初设计的初衷,

使用HTTP的GET/PUT/DELTET/POST对资源进行操作,REST接口是以URI资源为基础,对资源进行CRUD操作的接口。

SOAP和REST的对比:

SOAP相对REST来说较为重量级

SOAP接口是自解释的,采用WSDL进行描述,程序可以基于WSDL进行解释并自动生成SOAP调用代码;

REST接口只能通过接口文档进行描述,难以做到程序解释接口定义。

SOAP采用HTTP作为传输层协议,对HTTP协议来说服务调用是透明的,防火墙上难以对SOAP进行细粒度的权限控制,

也难以使用http的缓存机制提高效率。而REST是标准的HTTP访问,可以充分利用HTTP协议提供的一些好处,例如

可在防火墙上进行权限控制(最小粒度可以基于每个URL的操作),也可充分利用缓存提高响应速度和系统的吞吐效率。

由于REST是标准的HTTP访问,其适用性更广,web应用,移动应用都可以在不使用第三方库的情况下使用REST接口构造应用程序

根据REST设计原则,接口是无状态的,因此可以简单地通过对服务器进行水平扩展提升服务能力

15、数据库连接池的工作机制是怎样的?

数据库连接池的作用:

数据库连接池负责分配、管理并释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不再是重新建立新的数据库

连接,同时它还负责释放空闲时间超过最大空闲时间的数据库连接,避免因为没有释放数据库连接而引起的数据库连接泄漏

数据库连接池的原理:

在J2EE中,服务器启动时会创建一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序

会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有

配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接

16、J2EE开发中有哪些调优方法?

调优方式如下:

  • 优化设计:组合代替继承
  • 使用数据库连接池
  • 给web容器配置合理的线程数量来处理客户端的http请求
  • 使用框架(eg:Hibernate)提高系统效率
  • 使用缓存
  • 优化IO性能
  • 优化查询
  • 对session进行合理管理及设置
原文地址:https://www.cnblogs.com/wyb666/p/10384451.html