三层Web应用程序模型
- 第一层浏览器是表示层,完成用户接口功能。更“瘦”
- 第二层Web服务器是功能层,完成客户的应用功能。
- 第三层数据库服务器是数据层,完成数据处理请求。
Web服务器接受客户请求,建立数据库连接,请求数据处理,而后数据库结果返回Web服务器,再传至客户端。功能层的缺点:1.体积庞大、功能臃肿、复用性差
2.须自己考虑诸如分布处理、负载平衡、事务逻辑、持久性和安全性等诸多问题
所以:一分为二:显示逻辑层和业务逻辑层
1.显示逻辑层:接受客户请求,调用业务逻辑层的服务,并将结果呈现给客户端。
2.业务逻辑层:完成具体的业务处理。其中隐含了分布处理、负载平衡、事务逻辑、持久性和安全性等技术容器类型
- Java EE服务器:是Java EE产品的运行部分。一个Java EE服务器提供EJB容器和Web容器。
- Enterprise JavaBeans(EJB)容器:管理Java EE应用程序的enterprise bean的执行。Enterprise bean和它的容器运行在Java EE服务器中。
- Web容器:管理Java EE应用程序的JSP和Servlet组件的执行。Web组件和它的容器也运行在J2EE服务器中。
- 客户端应用程序容器:管理应用程序客户端组件的运行。
- Applet容器:管理applet的执行。由运行在客户端的一个Web浏览器和Java插件一同组成。
公共服务
- JNDI (名字和目录服务):共享用户,网络设备,软件组件,应用模块,服务及其他信息
- RMI/IIOP (支持IIOP协议的远程方法调用): 访问与RMI编程规则兼容的CORBA服务
- JMS(消息服务):在企业中异步交换业务数据和事件的灵活而可靠的机制
- JDBC (数据库连接服务)
- JTS(java transaction service)/JTA (java transaction API)
- JavaMail和JAF(JavaBeans Activation Framework)
- JCA/JCE/JSSE/JAAS(安全服务体系)//Cryptography
- 使用JAXP(Java API for XML Parsing)的XML解析服务
- Java Servlet——是用Java写的一个服务器端小程序,可以处理用户的HTTP请求,返回结果。
- JSP (JavaServer Page)——一种基于HTML文件(就是一个模板)处理之后能够生成静态内容。可以包含脚本代码的片段,以在最终生成的脚本静态文件中生成。
- JSTL (JSP标准标签库,JavaServer Page Standard Tag Library)——一组可以模仿脚本代码功能的用在JSP的标准标签。例如,遍历客户端并显示他们对应的信息。
- JSF (Java Server Face)——包含JSF标签(类似于LSTL标签)的JSP页面。此外,JSF允许在页面中定义导航模块(类似于Spring web flow),包括Facelets。
- The Java API for XML-based Web Services (Java中用来创建基于XML的Web的API,JAX-WS)——对于使用XML通信的Web服务来说至关重要。
- The Java API for XML Binding (序列化为XML的API,JAXB)——一种可以在JavaBeans和XML文件之间相互转化的方式
- JMS(Java信息服务,Java Message Service)——这个API保证服务器和应用在网络上的通信可靠、异步。ActiveMQ实现了JMS。
- JavaMail API——提供通过应用程序发送邮件方式。
- JAXR(提供XML注册的API,Java API for XML Registries)——一个可以注册包含了元数据的XML的API。
- JPA(Java持久化API,Java Persistence API)——这是一个在数据库中存储对象的ORM(对象关系表,Object/relational mapping)定义。
- JNDI(Java命名和目录接口)——能存储和检索资源、通过名字查找信息的方式
- JAAS(Java鉴别与授权服务,Java Authentication and Authorization Service)——识别并控制服务权限的一张方式。
- JAX-RS——定义REST(含状态传输)之类的服务的API。
- Managed Beans——一个可以执行嵌入代码的Java对象。在Sping框架中,这是一些添加了@Autowired注释的对象。
- CDI(上下文和依赖注入,Contexts and Dependency Injection for Java EE)——CDI是Java EE整个下一代类型安全的依赖注入的事实上的API。在Sping框架中,应用程序可以设计应用的上下文,控制反转(IoC)和依赖注入功能(DI)。
- Bean确认——通过设定好的规则判断Java Beans的状态是有效的。
- JACC(Java Authorization Contract for Containers)——在J2EE应用服务器和特定的授权认证服务器之间定义的一个连接的协约。
- JASPIC(Java认证服务提供者接口,Java Authentication Service Provider Interface)——这是与JACC互补认证的SPI(也就是服务API,Service API)。它定义了应用程序如何通过传统的认证服务。
Java EE 7新特征
- 低延迟数据交换:Java API for WebSocket 1.0
- 基于 HTTP 的 WebSockets 为解决低延迟和双向通信提供了一种解决方案
- 简化应用数据分析和处理:Java API for JSON Processing 1.0
- 通过 Java API 中的 JSON Processing 1.0,JSON 处理过程标准化为一个单一的 API,应用程序不需要使用第三方的类库。
- 可扩展的RESTful服务:JAX-RS 2.0
- 增加了异步响应处理,这对于支持对数据有着高要求的 HTML5 客户端的扩展是至关重要的
- 可以使用过滤器和实体拦截器。这样开发人员就可以使用标准的 API 来实现过滤和拦截功能,使开发过程变得更加便捷和高效
- 增强开发的易用性:JSF 2.2
- 增加了对 HTML5 的支持
EJB
- EJB容器是一个EJB引擎,它提供了EJB组件运行的环境,并对EJB组件进行管理
- EJB容器一般包含在EJB服务器(或应用服务器)中,EJB服务器可以拥有一到多个EJB容器
- 比较有名的支持EJB的服务器有GlassFish ,Sun One,Interstage,Websphere,Weblogic,JBoss,JRun等
Enterprise Bean
- Enterprise beans are Java EE components that implement Enterprise JavaBeans (EJB) technology
- 在EJB容器里运行
- 使用java语言编写,是封装了应用的业务逻辑的服务端组件
什么时候使用Enterprise Bean?
- 应用必须可扩展
- 事物必须确保数据的完整性
- 程序将拥有各种各样的客户端
Enterprise Bean类型
- session
- message-driven:一种enterprise bean允许java EE程序异步处理消息
什么是session bean?会话bean有几种子类型?分别的应用场合。
session bean 是一种非持久的bean,封装了业务逻辑,可以在本地、远程或者web service 客户端以编程形式调用,分为三类:
- 有状态session bean:状态代表着服务器与某一特定客户端的交互,通过方法调用,bean可以保持客户端的信息协调客户端和应用程序其他组件,为客户端提供一个简单视图,并负责管理enterprise bean 的工作流 - 无状态session bean:实现了web service,为所有客户端提供服务 - 单例 session bean:可以被多线程访问,状态全局共享
JPA : Java Persistence API
JPA是基于Java持久化的解决方案,主要是为了解决ORM框架的差异,它的出现在某种程度上能够解决目前ORM框架之间不能够兼容的问题,对开发人员来说,能够更好的在JPA规范下进行系统开发。
JPA并不是一项技术,而是一种标准,因为JPA只是一套接口,本身不能完成任何事情。JPA只是规范了Java持久化的官方标准。JPA有以下几个优点:
- 可持久化Java对象 - 使用简单 - 规范标准化 - 事务性、大数据量