qq610039525

 

J2EE介绍

J2EE是Java2平台企业版(Java 2 Platform,Enterprise Edition),它的核心是一组技术规范与指南,提供基于组件的方式来设计、开发、组装和部署企业应用。J2EE使用多层分布式的应用模型。

J2EE分层:

                         

        客户层,运行在客户计算机上的组件,用户与系统的接口逻辑,通过http协议的来访问应用服务器。
        表示层,运行在J2EE服务器上的组件,通过与业务逻辑层互动,将用户需要的数据以适当的方式输出。
        业务逻辑层,同样是运行在J2EE服务器上的组件。
        企业信息系统层(EIS),是指运行在EIS服务器上的软件系统。

        以上层次一般也指三层应用,也就是客户层+J2EE应用服务层+企业信息系统层,分布在三个不同位置:客户计算机、J2EE服务器及后台的数据库或过去遗留下来的系统。

 

客户层

        Web浏览器

        也称Web客户端, 以标准格式来显示从服务器传递过来的网页,它们传递给浏览器时已经是HTML或者XML格式,浏览器正确的显示给用户。

 

        小应用程序(Applet)

        是嵌在浏览器中的一种轻量级客户端,当web页面不能充分的表现数据或者应用界面的时候,才使用它,Applet是一种替代web页面的手段,能够使用J2SE开发Applet,Applet无法使用J2EE中的各种Service和API。需要运行在客户端安装了Java虚拟机的Web浏览器上。

 

         应用程序客户端

        J2EE应用程序客户端相对Applet而言,是一个较重量级的客户端,能够使用大多数的服务和API,它运行在客户机上,能提供强大而灵活易用的用户界面,如使用Swing或AWT创建的图形化的用户界面(GUI)。当然,应用程序可直接访问运行在业务层的Bean,如果需求允许,也可以打开HTTP连接,建立与运行在Web层上的Servlet之间的通讯。
 

J2EE应用服务器

两大容器

        EJB容器+Web容器,即业务逻辑层+表示层

 

Web容器

        管理所有的Servlet等Web组件的运行,对响应客户请求和返回结果提供了运行时的支持。

 

EJB容器:

        负责所有的EJB的运行,支持EJB组件的事务处理和生命周期管理,以及Bean的查找和其他服务,支持J2EE多层架构的基础结构,是一个控制业务实现的运行期环境,并提供事务服务、持久性、安全性等重要的系统服务,让开发人员不必开发基础服务而将注意力集中在业务逻辑的实现。

两大组件

Web组件+Ejb组件

 

Web组件

        与基于Web的客户端进行交互,J2EE中有三类Web组件:Servlet、JSP、JavaBean,Servlet是Web服务器的功能扩展,接受Web请求,返回动态的Web页面。Web容器中的组件可以使用EJB中的组件来完成复杂的业务逻辑。值得注意的是静态的HTML页面和Applets不算是Web层组件。

 

EJB组件

        包含三种不同类型的EJB:会话Bean、消息驱动Bean、实体Bean
        第一:会话Bean:着重业务逻辑的实现与控制,负责与Web层通信,给Web层提供访问业务数据的接口。当客户端完成执行过程的时候,会话Bean及相关数据会消失。
        第二:实体Bean:代表持久数据,数据相当于存储在数据库表中,它负责保存业务数据,给会话Bean访问业务数据的接口。

        第三:消息驱动Bean:用于接收、处理客户通过JMS发送过来的消息,允许业务组件接收衣服的JMS消息。

 

企业信息系统层

        负责运行企业信息系统软件,包括ERP、数据库、目录服务、其他遗留系统等。

       J2EE所包含的各类组件、服务架构及技术层次,均有共同的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,企业内部或外部难以互通的窘境

J2EE规范

什么是J2EE?

在企业级应用中,都有一些通用企业需求模块,如数据库连接,邮件服务,事务处理等.既然很多企业级应用都需要这些模块,一些大公司便开发了自己的通用模块服务,即中间件.这样一来,就避免了重复开发,开发周期长和代码可靠性差等问题.但是,各公司的中间件不兼容的问题就出现了,用户无法将它们组装在一起为自己服务.于是,"标准"就应运而生了.

J2EE就是基于JAVA技术的一系列标准.

J2EE是Java2平台企业版(Java 2Platform Enterprise Edition),核心是一组技术规范与指南,其中所包含的各类组件,服务架构和技术层次,都有共同的标准及规格,让各种依云J2EE架构的不同平台之间,存在良好的兼容性.

 

J2EE的13种规范是什么?

1.JDBC(JavaDatabase Connectivity)

JDBC是以统一方式访问数据库的API.

它提供了独立于平台的数据库访问,也就是说,有了JDBC API,我们就不必为访问Oracle数据库专门写一个程序,为访问Sybase数据库又专门写一个程序等等,只需要用JDBC API写一个程序就够了,它可以向相应数据库发送SQL调用.JDBC是Java应用程序与各种不同数据库之间进行对话的方法的机制.简单地说,它做了三件事:与数据库建立连接--发送操作数据库的语句--处理结果.

 

2.JNDI(JavaName and Directory Interface)

JNDI是一组在Java应用中访问命名和目录服务的API.

(命名服务将名称和对象联系起来,我们即可用名称访问对象.JNDI允许把名称同Java对象或资源关联起来,建立逻辑关联,而不必知道对象或资源的物理ID.)JNDI为开发人员提供了查找和访问各种命名和目录服务的通用,统一的接口,可访问的目录及服务如下表:

利用JNDI的命名与服务功能可满足企业级API对命名与服务的访问,诸如EJB,JMS,JDBC 2.0以及IIOP上的RMI通过JNDI来使用CORBA的命名服务.

JNDI和JDBC类似,都是构建在抽象层上.因为:

它提供了标准的独立于命名系统的API,这些API构建在命名系统之上.这一层有助于将应用与实际数据源分离,因此不管是访问的LDAP,RMI还是DNS.也就是说,JNDI独立于目录服务的具体实现,只要有目录的服务提供接口或驱动,就可以使用目录.

 

3.EJB(EnterpriseJavaBean)

J2EE将业务逻辑从客户端软件中抽取出来,封装在一个组件中。这个组件运行在一个独立的服务器上,客户端软件通过网络调用组件提供的服务以实现业务逻辑,而客户端软件的功能只是负责发送调用请求和显示处理结果。

在J2EE中,这个运行在一个独立的服务器上,并封装了业务逻辑的组件就是EJB组件。其实就是把原来放到客户端实现的代码放到服务器端,并依靠RMI进行通信。

 

4.RMI(Remote MethodInvoke)

是一组用户开发分布式应用程序的API.

这一协议调用远程对象上的方法使用了序列化的方式在客户端和服务器之间传递数据,使得原先的程序在同一操作系统的方法调用,变成了不同操作系统之间程序的方法调用,即RMI机制实现了程序组件在不同操作系统之间的通信.它是一种被EJB使用的更底层的协议.

RMI/JNI: RMI可利用标准Java本机方法接口与现有的和原有的系统相连接

RMI/JDBC: RMI利用标准JDBC包与现有的关系数据库连接

这就实现了与非Java语言的现有服务器进行通信.

知识点: Socket Serialize Reflect Proxy

 

5.JavaIDL/CORBA(Common Object Request BrokerArchitecture)

Java接口定义语言/公用对象请求代理程序体系结构

在JavaIDL的支持下,开发人员可以将Java和CORBA集成在一起。他们可以创建Java对象并使之可在CORBA ORB中展开,或者他们还可以创建Java类并作为和其它ORB一起展开的CORBA对象的客户。后一种方法提供了另外一种途径,通过它Java可以被用于将新的应用和旧的系统相集成。

CORBA是面向对象标准的第一步,有了这个标准,软件的实现与工作环境对用户和开发者不再重要,可以把精力更多地放在本地系统的实现与优化上。

 

6.JSP(Java Server Pages)

JSP页面=HTML+Java,其根本是一个简化的Servlet设计.

服务器在页面被客户端请求后,对这些Java代码进行处理,然后将执行结果连同原HTML代码生成的新HTML页面返回给客户端浏览器.

 

7.Java Servlet

Servlet是一种小型的Java程序,扩展了Web服务器的功能,作为一种服务器的应用,当被请求时开始执行.Servlet提供的功能大多和JSP类似,不过,JSP通常是大多数的HTML代码中嵌入少量的Java代码,而Servlet全部由Java写成并生成HTML.

 

8.XML

XML是一个用来定义其它标记语言的语言,可用作数据共享。XML的发展和Java是相互独立的。不过,它和Java具有的相同目标就是跨平台。通过将Java与XML结合,我们可以得到一个完全与平台无关的解决方案。

{

Dom4j用户指南链接

目录

1、DOM4J简介

2、XML文档操作1

      2.1、读取XML文档:

      2.2、获取根节点

      2.3、. 新增一个节点以及其下的子节点与数据

      2.4、 写入XML文件

      2. 5、 遍历xml节点

      2.6、创建xml文件

      2.7、修改节点属性

      2.8、删除节点

2、XML文档操作2

       2.1、Document对象相关

          1、读取XML文件,获得document对象.

          2、解析XML形式的文本,得到document对象.

          3、主动创建document对象.

       2.2、节点相关

          1、获取文档的根节点.

          2、取得某节点的单个子节点.

          3.取得节点的文字

          4.取得某节点下指定名称的所有节点并进行遍历.

          5.对某节点下的所有子节点进行遍历.

          6.在某节点下添加子节点.

          7.设置节点文字.

          8.删除某节点.

          9.添加一个CDATA节点.

       2.3、属性相关.

          1.取得节点的指定的属性

          2.取得属性的文字

          3.遍历某节点的所有属性

          4.设置某节点的属性和文字.

          5.设置属性的文字

          6.删除某属性

      2.4、将文档写入XML文件.

          1.文档中全为英文,不设置编码,直接写入.

          2.文档中含有中文,设置编码格式再写入.

      2.5、字符串与XML的转换

         1.将字符串转化为XML

         2.将文档或节点的XML转化为字符串.

   3、dom4j的事件处理模型涉及的类和接口:

      3.1、类:SAXReader

      3.2、接口ElementHandler

      3.3、Element类

      3.4、类DocumentHelper

4、通过xpath查找指定的节点

       4.1、 xpath语法

          1、选取节点

          2、谓语(Predicates)

          3、选取未知节点

          4、选取若干路径

          5、XPath 轴

          6、路径

          7、XPath 运算符 

DOM4J简介

    DOM4J是 dom4j.org 出品的一个开源 XML 解析包。DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP。

    DOM4J 使用起来非常简单。只要你了解基本的 XML-DOM 模型,就能使用。

    Dom:把整个文档作为一个对象。

  DOM4J 最大的特色是使用大量的接口。它的主要接口都在org.dom4j里面定义:

Attribute

定义了 XML 的属性。

Branch

指能够包含子节点的节点。如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为

CDATA

定义了 XML CDATA 区域

CharacterData

是一个标识接口,标识基于字符的节点。如CDATA,Comment, Text.

Comment

定义了 XML 注释的行为

Document

定义了XML 文档

DocumentType

定义 XML DOCTYPE 声明

Element

定义XML 元素

ElementHandler

定义了Element 对象的处理器

ElementPath

被 ElementHandler 使用,用于取得当前正在处理的路径层次信息

Entity

定义 XML entity

Node

为dom4j中所有的XML节点定义了多态行为

NodeFilter

定义了在dom4j 节点中产生的一个滤镜或谓词的行为(predicate)

ProcessingInstruction

定义 XML 处理指令

Text

定义 XML 文本节点

Visitor

用于实现 Visitor模式

XPath

在分析一个字符串后会提供一个 XPath 表达式

接口之间的继承关系如下:

interface java.lang.Cloneable

    interface org.dom4j.Node

           interface org.dom4j.Attribute

           interface org.dom4j.Branch

                  interface org.dom4j.Document

                  interface org.dom4j.Element

           interface org.dom4j.CharacterData

                  interface org.dom4j.CDATA

                  interface org.dom4j.Comment

                  interface org.dom4j.Text

           interface org.dom4j.DocumentType

           interface org.dom4j.Entity

           interface org.dom4j.ProcessingInstruction

}

9.JMS(JavaMessage Service)

它是一种与厂商无关的API,用来访问消息收发系统消息.它类似于JDBC.JDBC是可以用来访问不同关系数据库的API,而JMS则提供同样与厂商无关的访问消息收发服务的方法,这样就可以通过消息收发服务实现从一个JMS客户机向另一个JMS客户机发送消息,所需要的是厂商支持JMS.换句话说,JMS是Java平台上有关面向消息中间件的技术规范.

 

10.JTA(JavaTransaction API)

定义了一种标准API,应用程序由此可以访问各种事务监控.它允许应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据.JTA和JTS为J2EE 平台提供了分布式事务服务.

JTA事务比JDBC事务更强大,一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接.

 

11.JTS(JavaTransaction Service)

JTS是CORBA OTS事务监控器的一个基本实现。JTS指定了一个事务管理器的实现(Transaction Manager),这个管理器在一个高级别上支持JTA规范,并且在一个低级别上实现了OMGOTS规范的Java映射。一个JTS事务管理器为应用服务器、资源管理器、standalone应用和通信资源管理器提供事务服务。

 

12.JavaMail

用于访问邮件服务器的API,提供了一套邮件服务器的抽象类.

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class Mail_163Client {
    public static void main(String[] args) throws MessagingException {
        String result = Mail_163Client.sendEmail("cyang198906@163.com", 
                new String[]{
                "610039525@qq.com",
                "2406352526@qq.com"
                }, 
                "yc535689", 
                "JMail邮件服务学习资料",
                "JMail学习地址:"+"http://blog.csdn.net/jiangtao7913/article/details/50492947");
        System.out.println("邮件发送结果:"+result);
    }
    
    public static String sendEmail(final String fromAddr,final String[] toAddrs,final String pwd,String title,String content){
        Properties props = new Properties();  
        props.setProperty("mail.smtp.auth", "true");  
        props.setProperty("mail.transport.protocol", "smtp");  
        props.setProperty("mail.host", "smtp.163.com");  
        Session session = Session.getInstance(props, new Authenticator() {  
            protected PasswordAuthentication getPasswordAuthentication() { 
                //第三方客户端授权密码和登录密码不一样
                final String fromAddr_prefixx = fromAddr.split("@")[0];
                return new PasswordAuthentication(fromAddr_prefixx, pwd);  
            }  
        });  
        session.setDebug(true);  
        try {
            Message msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress(fromAddr)); 
            msg.setSubject(title);
            msg.setContent("<span style=\'color:red;margin:0 auto\'>"+content+"</span>", "text/html;charset=utf-8");
            if(toAddrs!=null&&toAddrs.length==1){
                msg.setRecipient(RecipientType.TO, new InternetAddress(toAddrs[0])); 
            }else if(toAddrs!=null&&toAddrs.length>1){
                msg.setRecipients(RecipientType.TO, InternetAddress.parse(Mail_163Client.join(toAddrs))); 
            }else{
                throw new IllegalArgumentException("目标邮件地址不可为空");
            }
            Transport.send(msg); 
            return MailStatus.OK;
        } catch (MessagingException e) {
            System.out.println(e.getMessage());
        }  
        return MailStatus.Error;
    }
    static class MailStatus {
        public static final String OK ="OK";
        public static final String Error ="Error";
        public static final String Email_suffix ="@163.com";
    }
    static String join(String[] arr){
        if(arr==null){
            return "";
        }
        StringBuffer sb = new StringBuffer();
        for(int i = 0;i<arr.length;i++){
            if (i ==0) {
                sb.append(arr[0]);
            } else {
                sb.append(",").append(arr[i]);
            }
            
        }
        return sb.toString();
    }
}

 

 

13.JAF(JavaBeansActivation Framework)

JAF是一个专用的数据处理框架,它用于封装数据,并为应用程序提供访问和操作数据的接口.也就是说,JAF让Java程序知道怎么对一个数据源进行查看,编辑,打印等.

JavaMail利用JAF来处理MIME编码的邮件附件.

 

它们之间有什么关系?

以上介绍各个规范的同时也尽可能思考了各个规范之间的联系.最后用一张简单的图来表示各个规范之间的调用关系,纯属自己分析所得,还望高人指点…

 

 

ResourcePatternResolver resourceLoader = new PathMatchingResourcePatternResolver();

Resource[] resourceLoader.getResources(classPath);

SAXReader reader = new SAXReader();
Document doc = reader.read(f.getInputStream());

分类:

技术点:

相关文章: