CXF方式的WebService发布有四种:
1.使用CXF内置的Jetty发布WebService
2.使用RI(Oracle JAX_WS RI) 发布WebService
3.在Web容器(Tomcat)中基于Spring发布WebService
4.CXF不基于Spring直接发布到 Tomcat
Jetty 和 Tomcat 的比较 :
相同点:
1.Tomcat 和 Jetty都是一种Servlet引擎.他们都支持标准的Servlet规范和JavaEE的规范.
不同点:
1.架构比较:
(1).Jetty 的架构比Tomcat更为简单.
(2).Jetty 的架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现.扩展简单
(3).Tomcat 的架构是基于容器设计的,进行扩展时需要了解Tomcat的整体设计结构,不易扩展.
2.性能比较:
(1).Jetty 和Tomcat性能方面差异不大.
Jetty可以同时处理大量连接而且可以长时间保持连接,适合于Web聊天应用等等..
Jetty的架构简单,因此作为服务器,Jetty可以按需加载组件,减少不需要的组件,减少了服务内存开销,从而提高服务器性能.
Jetty默认采用NIO,在处理IO请求上可能更占优势,在处理静态资源时,性能更高.
Tomcat适合处理少数非常繁忙的链接,也就是连接生命周期短的话,Tomcat的总体性能更高.
Tomcat默认采用BIO处理IO请求,在处理静态资源时,性能较差.
Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好.
Tomcat目前应用比较广泛,对JavaEE 和 Servlet的支持更加全面,很多特性会直接集成进来.
WebService三大技术基础
a. WSDL: web service definition language - web service定义语言
i. 通俗地说, WSDL文档描述了Web Service如下三个方面:
ii. WHAT: 该Web Service 包含什么操作
iii. HOW: 该Web Service的操纵应该怎样调用
iv. WHERE: 该Web Service的服务地址
b. SOAP: Simple Object Access Protocol: 简单对象访问协议
i. 一次web service的调用, 其实并不是方法调用, 而是发送SOAP消息(即xml文档片段)
c. UDDI: Universal Description, Discovery and Integration
i. UDDI 是一种目录服务,企业可以使用它对 Web services 进行注册和搜索
WebService与Socket的区别
(1) Socket是基于TCP/IP的传输层协议。
Webservice是基于HTTP协议传输数据,http是基于tcp的应用层协议。
Webservice采用了基于http的soap协议传输数据。
(2)Socket接口通过流传输,不支持面向对象。
Webservice 接口支持面向对象,最终webservice将对象进行序列化后通过流传输。
Webservice采用soap协议进行通信,不需专门针对数据流的发送和接收进行处理,是一种跨平台的面向对象远程调用技术。
(3)Socket适用于高性能大数据的传输,传输的数据需要手动处理,socket通信的接口协议需要自定义。
Collection接口基本方法
• size()获取元素个数
• isEmpty()集合是否为空
• contains(Object)集合中是否包含指定元素
• iterator()获取迭代器
• toArray()将集合转换为数组
• toArray(T[])将集合转换为数组,并根据传入参数类型指定数组的类型
• add(E)向集合中添加一个元素
• remove(Object)删除集合中的一个元素
• containsAll(Collection<?>)是否包含指定集合的全部元素
• addAll(Collection<? extends E>)将某个集合中所有元素添加到本集合中
• removeAll(Collection<?>)删除本集合中和某集合一致的元素
• clear()删除集合中所有元素
链表
LinkedList是基于链表实现的,链表与数组一样,都作为数据的基本存储结构,但是在存储原理上二者是不同。
数组中,数据是存储在一段连续的内存空间中,可以通过下标方式访问数组中的元素。
链表中,元素是存储在不同的内存空间中,前一个元素的位置维护了后一个元素在内存中的地址。
LinkedList是基于链表实现的,更确切的说,是基于双向链表实现的。
a. 双向链表中任意一个存储单元都可以通过向前或者向后寻址获取到前一个存储单元或后一个存储单元。
b. 双向链表的尾节点向后一个节点是链表的头结点;双向链表头结点向前一个节点是链表的尾节点。
关于LinkedList首先记住结论
a. LinkedList 允许为空(null)
b. LinkedList 允许数据重复
c. LinkedList 是有序的
d.LinkedList 非线程安全
LinkedList优缺点
优点:
a. LinkedList 插入新元素和删除已有元素的开销很小,速度很快。
缺点:
a. LinkedList 不容易操作索引,因此对get的调用比较昂贵,除非调用非常接近表的端点
ArrayList与LinkedList对比
1. 顺序插入
顺序插入的速度,ArrayList比较快,因为ArrayList是数组实现,一开始就new好了,往指定位置塞值就行。
LinkedList不同,每次插入都需要new一个对象,如果读对象较大,new的时间势必会长一些。
LinkedList还维护了前驱节点Node和后继节点Node,如果LinkedList钟的节点非常多,那LinkedList将比ArrayList更耗内存。
2. 数据遍历数据遍历,
网上很多测试说明,这里不再赘述。
总之:使用各自遍历效率最高的方式,
ArrayList遍历效率比LinkedList效率更高。
注意:
LinkedList做插入、删除的时候,慢在寻址,快在只要改变前后Node节点的引用地址
ArrayList做插入、删除的时候,慢在数组的批量copy,快在寻址。
LinkedHashMap基本数据结构
1. LinkedHashMap 可以认为是HashMap + LinkedList;使用HashMap存储数据,使用LinkedList维护插入元素的先后顺序。
2. LinkedHashMap 实现的基本思想是多态。
首先记住结论:
LinkedHashMap 允许k,v为null。
LinkedHashMap key不允许重复,value允许重复。
LinkedHashMap 是有序的。
LinkedHashMap 非线程安全。
Java元注解 作用:元注解用于修饰其他的注解
@Retention:定义注解的保留策略
@Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS) //默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,
@Retention(RetentionPolicy.RUNTIME) //注解会在class字节码文件中存在,在运行时可以通过反射获取到
@Target:指定被修饰的 Annotation 可以放置的位置(被修饰的目标)
@Target(ElementType.TYPE) //接口、类
@Target(ElementType.FIELD) //属性
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR) //构造函数
@Target(ElementType.LOCAL_VARIABLE) //局部变量
@Target(ElementType.ANNOTATION_TYPE) //注解
@Target(ElementType.PACKAGE) //包
注:可以指定多个位置,例如:
@Target({ElementType.METHOD, ElementType.TYPE}),也就是此注解可以在方法和类上面使用
@Inherited:指定被修饰的Annotation将具有继承性
@Documented:指定被修饰的该Annotation可以被javadoc工具提取成文档.
自定义注解 注解分类:(根据Annotation是否包含成员变量,可以把Annotation分为两类):
1、 标记 Annotation:
没有成员变量的Annotation; 这种Annotation仅利用自身的存在与否来提供信息
2、 元数据 Annotation:
包含成员变量的Annotation; 它们可以接受(和提供)更多的元数据;