J2EE体系结构简单介绍
一、J2EE提出的背景
1、 企业级应用框架的需求
在许多企业级应用中,例如数据库连接、邮件服务、事务处理等都是一些通用企业需求模块,这些模块如果每次再开发中都由开发人员来完成的话,将会造成开发周期长和代码可靠性差等问题。于是许多大公司开发了自己的通用模块服务。这些服务性的软件系列同陈为中间件。
2、 为了通用必须要提出规范,不然无法达到通用
在上面的需求基础之上,许多公司都开发了自己的中间件,但其与用户的沟通都各有不同,从而导致用户无法将各个公司不同的中间件组装在一块为自己服务。从而产生瓶颈。于是提出标准的概念。其实J2EE就是基于JAVA技术的一系列标准。
注:中间件的解释 中间件处在操作系统和更高一级应用程序之间。他充当的功能是:将应用程序运行环境与操作系统隔离,从而实现应用程序开发者不必为更多系统问题忧虑,而直接关注该应用程序在解决问题上的能力 。我们后面说到的容器的概念就是中间件的一种。
二、相关名词解释
容器:充当中间件的角色
WEB容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。
EJB容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。
WEB容器和EJB容器在原理上是大体相同的,更多的区别是被隔离的外界环境。WEB容器更多的是跟基于HTTP的请求打交道。而EJB容器不是。它是更多的跟数据库、其它服务打交道。但他们都是把与外界的交互实现从而减轻应用程序的负担。例如SERVLET不用关心HTTP的细节,直接引用环境变量session,request,response就行、EJB不用关心数据库连接速度、各种事务控制,直接由容器来完成。
RMI/IIOP:远程方法调用/internet对象请求中介协议,他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。
JNDI:JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。
JMS:JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。
JAVAMAIL:JAVA邮件服务。提供邮件的存储、传输功能。他是JAVA编程中实现邮件功能的核心。相当MS中的EXCHANGE开发包。
JTA:JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。
JAF:JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。
EAI:企业应用集成。是一种概念,从而牵涉到好多技术。J2EE技术是一种很好的集成实现。
三、J2EE的优越性
1、 基于JAVA 技术,平台无关性表现突出
2、 开放的标准,许多大型公司已经实现了对该规范支持的应用服务器。如BEA ,IBM,ORACLE等。
3、 提供相当专业的通用软件服务。
4、 提供了一个优秀的企业级应用程序框架,对快速高质量开发打下基础
四、现状
J2EE是由SUN 公司开发的一套企业级应用规范。现在最高版本是1.4。支持J2EE的应用服务器有IBM WEBSPHERE APPLICATION SERVER,BEA WEBLOGIC SERVER,JBOSS,ORACLE APPLICATION SERVER,SUN ONE APPLICATION SERVER 等。.
什么是bea weblogic:
它是一个应用服务器,它支持企业级的,多层次的,和完全分布式的WEB应用。
weblogic server主要功能包括:
1。维护和管理各种客户机(包含WEB浏览器,应用客户机和,APPLET,手机,PDA等等)的应用逻辑和业务规则。
2、支持软件集群技术,可以运行WEB应用和企业EJB服务,(记好:EJB包含业务逻辑,并为其他组件提供服务),并
确保服务的可靠性、扩展性和高性能。
3、提供必要的服务,用于建立可靠的,可扩展的、基于WEB的应用。
4、完全实现了SUN公司的各种最新协议。
组件容器模型:
WEBLOGIC可以认为是一个为用户的应用组件提供服务的容器。理解这个我们必须理解WEB应用,典型的一个应用包含
应用逻辑,表示逻辑,安全,事务等等。这在以前开发两层应用时都必须自己控制所有的这些服务,也就是说一个
一个应用不但包含应用上的逻辑也包含地层的一些服务。两个应用或多个应用之间他们有共同点也有不同点,共同点
就是这些底层的服务是每一个应用必须的。不同点就是每一个应用的逻辑各不相同。所以就把那些底层的服务抽象出来。
使应用的开发人员只关注于自己的应用逻辑的开发。而那些底层的服务有容器来帮他们提供,而且是一种可配置的方式。
我的逻辑上应用代码+容器=WEB应用。
多层与分布式的联系:
多层:是把一个应用根据功能的不同划分为几个层次。
分布式:是把一个应用放在多太机器上协调运行,以提高应用的安全性和可靠性。
分布式必须多层;想让一个应用放在多太机器运行,必须得把一个应用进行分层。把一个层或多个层放在一太机器上
典型的分层为:
客户层,表示层,逻辑层、EIS层。
比如把:表示层和逻辑层放在一个weblogic服务器中。
而不同的层又有不同J2EE组件来支持:
客户层:
WEB浏览器(HTML,JAVASCRIPT)
应用客户机:由JAVA GUI(AWT,SWING)来编写。
APPLET,包含在HTML中的一个程序。由浏览器的虚拟机来运行。
表示层:
JSP
SERVLET
JAVABEAN
JSP标记库等等来编写,用来响应客户端的请求。
逻辑层:
EJB
sessionBean,EntityBean,MessageDriverBean
Remote,Home,Local,LocalHome,Beanclass,
或其他开源框架的逻辑表示。
例如:spring的BEAN。
EIS层:
这一层一般由数据库来组成或由其他数据存储来完成。
J2EE API
J2EE1.3 API包括EJB2.0、JDBC API2.0、Servlet2.3、JSP1.2、JMS1.0、JNDI1.2、JTA1.0、JavaMail API1.2、JAF1.0、JAXP1.1
、JCA1.0和JAAS1.0。
简化系统集成
J2EE平台的平台独立特性和完整的系统集成解决方案建立了一个开放的市场是用户可以使用任何厂商的产品。
这样厂商就必须提共更有利于客户的产品和服务以争取用户。J2EE API通过提供以下功能简化应用程序集成:
企业Bean的统一应用程序访问接口
JSP和Servlet的单一请求和应答机制
JAAS的可靠安全模型
JAXP提供基于XML的数据交换集成
JCA提供的简单互操作能力
JDBC API提供的简单数据库连接能力
消息驱动Bean、JMS、JTA和JNDI技术提供企业应用集成
weblogic server的强项:
1、组件的支持
2、扩展能力
J2EE的各技术和用途:
j2ee服务: 用途
servlet 表示逻辑
jsp 表示逻辑
jdbc 数据库访问
jta 事务管理
rmi 对象的分布式执行
ejb 实现业务逻辑
jms 协调分布式执行
下面详细介绍对各项技术的了解:
1、servlet
servlet的功能:
servlet是服务器端的JAVA代码,在SERVLET容器中运行。他采用HTTP协议(请求--响应)用来处理客户端的请求。
servlet怎样处理客户的请求:
在收到HTTP请求后,容器根据客户的URL来定位SERVLET,然后生成响应信息。传递给客户端。客户端只是收到
servlet处理后的HTML代码,然后进行显示。
根据上面的描述:
可以让servlet看作是WEB服务器的一个扩展。但是客户端输入一个URL,服务器是怎样来找到servlet的,
这就需要一个WEB应用描述符,它用来描述一个应用可用的servlet,并有一个url-pattern对应一个应用的
相对URI,当服务器启动时会根据这个描述符,来装载响应的 servlet,并创建对象,并初始化然后等待用户
的请求。
servlet是什么样子的:
可以让servlet看作是JAVA代码中加入HTML代码。像下面:
our.println("<h1> servlet</h1>");
servlet与jsp的区别和联系:
JSP可以看作是:HTML代码中加入JAVA代码,它提供了一种更方便的创建WEB页的方式。
JSP是已servlet为基础的,它是对servlet的一种扩展。提供了页面的开发人员和程序员的一种分离。
这是利用JSP的标记库的一种功能。
何时使用JSP或SERVLET:
什么时候使用这些技术或让他们有效的组合。主要是看当时的应用,如果HTML页面内容非常多,这就需要使用JSP
如果一个公司有两个开发小组,有专门的页面设计小组和程序编写小组。这也要使用JSP,让页面的编写人员利用
JSP标记来设计页面,而页面的逻辑由专门的程序员来编写这些包含逻辑的标记库。
如果采用MVC设计模式,也就是交互非常复杂。需要他们相互的配合。 servlet当作一个中心的控制器,用来转发
请求。
开发 servlet:
import javax.servlet.*;
import javax.servlet.http.*;
public class owerServlet extends HttpServlet{
public void init(ServletConfig config){
super。inti(config);
}
public void service(HttpServletRequest request,HttpServletResponse response)throws IOException{
response.setContextType("text/html");
PrintWriter out=response.getWriter();
out.println();}
public void destroy(){}
public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException{}
public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException{}
}
http中 keep-alive的作用:
这样能让一个请求中只打开一个套节子,提高效率。
在 weblogic中运行servlet:
1、编写servlet
2、编译。必须把SERVLET中用到的类,放入classpath能找到的地方。
3.编写部署描述符web.xml,来设置servlet
4.把servlet放入应用中正确的目录结构
5、用JAR工具让应用打包
6、放入正确的服务器目录,也就是部署。