java框架比较_java各种框架的比较,分析

Spring 框架

优点

1.提供了一种管理对象的方法,可以把中间层的对象有效地组织起来

2.采用了分层结构,可以增量引入到项目中。

3.代码测试较容易

4.非侵入性,应用程序对Spring API的依赖可以减至最小

5.轻量级的架构解决方案

6.一致的数据访问界面

缺点

1.因为spring使用了控制反转技术,所以应用程序的逻辑被中断,代码变得不完整,但看代码无法把握所有行为,不能了解整个系统流程。

2.流程控制由很多xml配置文件来实现,增加了出错的机会,以及开发人员的要求

3.维护阶段需要维护配置文件或者配置文件+代码的混合体,这比单纯地维护代码要困难的多

4.spring的性能一般,因为存在很多配置文件,需要读取这些文件来实现控制,性能略有损失。所以对于简单的应用,不推荐使用spring。Spring用于较复杂的应用

5.调试不直观,后期的Bug对应阶段不容易判断问题所在

XFire是一个开源的框架,可以非常容易得与spring集成。可以很简单地发布一个Web Service。可以将Web 服务绑定到POJO,XMLBeans。

支持基于HTTP、JXS等多种协议访问Web服务。

支持多种Web服务业界重要标准,例如SOAP、WSDL、Web服务寻址。

高性能的SOAP实现

服务器客户端代码辅助生成

Xfire使得WebService开发变得十分简单

Xfire使用Stax解析XML,性能有了质的提高。

XFire是基于SOAP/WSDL协议的,无法用于开发RESTful风格的Web Service

Axis本质上就是一个SOAP引擎,提供客户端,服务器端和网管SOAP操作的基本框架。但Axis并不完全是一个SOAP引擎,它还是一个独立的SOAP服务器和一个嵌入Servlet引擎(例如Tomcat)的服务器。

Axis支持WSDL,提供转化WSDL为Java类的工具。提供例子程序。

Axis是与XFire并列的新一代Web Service框架,通过简单的API支持Web Service各项标准协议。

XFire与Axis相比,优点明显。

支持一系列Web Service的新标准

使用Stax解释XML,性能有了质的提高

容易上手,可以方便快速地从pojo发布服务

支持Spring 、Pico、Loom等容器

高性能SOAP栈设计

XFire比Axis1.3快2-6倍;

XFire的响应时间是Axis1.3的1/2到1/5。

所以XFire比Axis相对受欢迎。

CXF

以上列举的都是传统的SOAP/WSDL模式的Web Service框架,接下来介绍几种实现了RESTful风格的一些Web Service框架

Spring3.0以后已经实现了对RESTful的支持。主要表现在:

1.注释,如@RequestMapping和@PathVariable,支持资源标识和URL映射

2.ContentNegotiatingViewResolver支持为不同的MIME内容类型,并使用不同的表示方式。

3.使用相似的编程模型无缝地整合到原始的MVC层

@Controller

publicclass EmployeeController {

@RequestMapping(method=RequestMethod.GET, value="/employee/{id}")

public ModelAndView getEmployee(@PathVariable String id) {

Employee e = employeeDS.get(Long.parseLong(id));

return new ModelAndView(XML_VIEW_NAME, "object", e);

}

}

如上@RequestMapping注释是Spring REST特性的关键所在。它指定所注释的方法将处理哪个HTTP方法(RequestMethod.GET)和哪个URI(/employee/{id})。注意:

1.对于{id}占位符,使用@PathVariable注释可以将{}内的值注入到函数的参数。

2.XML_VIEW_NAME为employees,这是在-servlet.xml中定义的

对于其他方法是类似的。通过使用@RequestMapp注释的功能,处理不同方法的代码是非常相似的

@RequestMapping(method=RequestMethod.POST, value="/employee")

public ModelAndView addEmployee(@RequestBody String body) {

Source source = new StreamSource(new StringReader(body));

Employee e = (Employee) jaxb2Mashaller.unmarshal(source);

employeeDS.add(e);

return new ModelAndView(XML_VIEW_NAME, "object", e);

}

@RequestMapping(method=RequestMethod.PUT, value="/employee/{id}")

public ModelAndView updateEmployee(@RequestBody String body) {

Source source = new StreamSource(new StringReader(body));

Employee e = (Employee) jaxb2Mashaller.unmarshal(source);

employeeDS.update(e);

return new ModelAndView(XML_VIEW_NAME, "object", e);

}

@RequestMapping(method=RequestMethod.DELETE, value="/employee/{id}")

public ModelAndView removeEmployee(@PathVariable String id) {

employeeDS.remove(Long.parseLong(id));

List employees = employeeDS.getAll();

EmployeeList list = new EmployeeList(employees);

return new ModelAndView(XML_VIEW_NAME, "employees", list);

}

在上面的代码中,通过使用@RequestBody,HTTP请求的主体可以作为一个参数注入。

Spring3.0实现的RESTful Web Service仍然是基于MVC模型的,Control类中使用注释来处理对应的请求,返回的结果还是要提交到View层渲染输出。在-servlet.xml要配置内容协商服务。

"org.springframework.web.servlet.view.JstlView"/>

定义了两个视图解析器。BeanNameViewResolver是负责处理的application/xml的,而另一个UrlBasedViewResolver则负责处理text/html。

用Spring3.0实现Restful Web Service的优缺点

1.拥有Spring的所有优点以及缺点

2.URl的映射在Control类中实现,不容易看出整个URI的结构(Restful Web Service的核心就在于URI的设计),也不利于修改,耦合度高

3.返回内容的协商在View层中实现,由view层调用相应的页面渲染,效率过低,并且意义不大,我认为应该在Control类中直接调用即可。

在编写Web Service时,我认为View层可以忽略,因为Web Service传输地都是数据,不是很需要View渲染。

Restlet也支持REST。

特点:完全抛弃了Servlet API,作为替代,自己实现了一套API。能够支持复杂的REST架构设计。

缺点:

1.虽然也可以运行于Web容器中,但是难以利用Servlet和JSP等资源。还有因为需要另外一套API和概念,学习成本较高。

2.完全不支持服务器端的HTTP Session,强制完全基于无状态服务器模型来做开发。对于基于浏览器的应用来说,开发难度较高。

3.自身没有包括与Spring的集成,可以使用第三方代码与Spring集成,集成难度较大。

4.文档不丰富,学习起来较困难。

5.没有内建的国际支持

优点:

1.有内建的HTTP认证机制,不需要另外开发安全机制

2.灵活性较高,支持更多的REST概念,支持透明的内容协商,适合于开发更强大的REST组件

3.零配置文件,全部配置通过代码完成

Cetia4是一个对REST提供完善支持的Web开发框架

特点:基于Servlet API开发,可以运行于所有的Web容器中

优点:

1.可以充分利用Servlet API和JSP等资源,需要额外学习的概念较少,学习成本较低。

2.对于传统的Web应用,可以使用服务器端的HTTP Session;对于Web服务类应用,不使用HTTP Session,基于无状态服务器模型做开发。

3.自身包括了对于Web MVC的支持

4.内建了自己特有的导航对象栈的概念,对于传统的Web应用开发非常有帮助。

5. 提供了JSP标签库,对于传统的基于HTML表单的Web开发非常有帮助。

6. 支持与SiteMesh相配合,由SiteMesh来支持页面布局的重用。

7. 内建有与Spring的集成,集成起来非常容易。

8. 配置文件完全基于标准的web.xml,不需要额外的配置文件。大量使用默认配置,一般情况下足以满足常见的需求。

9. 拥有很好的文档。

10. 有内建的国际化支持。

缺点:

1.没有内建的HTTP认证机制,需要自己开发安全机制。

2.对于内容协商的支持比较弱,仅支持HTML和XML格式的数据。需要加以扩展才能支持其它格式的表现

Axis2,同时支持SOAP和REST风格的Web Service。但缺点很明显,

1.仅仅支持GET与POST方法

2.仅仅是以REST风格暴露出Web服务,数据格式仍然是包含SOAP封装的XML

3.只支持同步的调用方式

4.仅仅提供了以SOAP方式暴露Web服务的最小化支持,不支持全面的REST架构设计。

sqlREST,特点:1.为任何可以通过JDBC访问的数据库提供Web服务访问接口,自动将REST风格的HTTP请求转换成数据库SQL语句。2.基于Servlet API开发

缺点:

1.因为是REST风格的HTTP请求到SQL语句的直接映射,因此强制使用以SQL和关系数据库为中心的数据建模设计方法,不支持面向对象的设计。

2.因为资源的定义仅限于数据库的表,难以实现更高层次的抽象,必然会导致非常细粒度的API。应用的性能以及可伸缩性都难以保证。

Sun正在致力于建立REST风格Web服务的规范,JAX—RS(Java API for RESTful Web Service)

JAX-RS提供一些标注将一个资源类,一个 POJO Java类,封装成Web资源。

@Path,标注资源类或方法的相对路径

@GET,@PUT,@POST,@DELETE,标注方法是用的HTTP请求的类型

@Produces,标注返回的MIME媒体类型

@Consumes,标注可接受请求的MIME媒体类型

@PathParam,@QueryParam,@HeaderParam,@CookieParam。@MatrixParam,@FormParam分别标注方法的参数来自于HTTP请求的不同位置,例如@PathParam来自于URL的路径,@QueryParam来自于URL的查询参数,@HeaderParam来自于HTTP请求的头信息,@CookieParam来自HTTP请求的Cookie。

Jersey是JAX-RS的参考实现,即Jersey不是基于Servlet API的,而是采用了JAX-RS API。

1.Jersey采用了Annotation机制,所有的HTTP相关的参数设置都采用标注实现,因此,在编程的时候我们针对的仍然是POJO,体会不到分布式或J2EE编程的痛苦,只需要了解一些关键的Annotation即可。

2.Jersey是一个开发的平台,我们可以扩展自己的需求,比如在消息格式上,虽然Jersey已经提供了Java基本数据类型、JSON、XML等类型,我们还是可以很容易地扩展自己的格式。

3.Jersey建立的服务可以很简单地部署到JDK6自带的轻量级Server上,过程极其简单

4.Jersey建立的服务可以非常容易地部署为Servlet,支持各种J2EE容器

5.Jersey可以为我们编写的服务自动生成WADL

6.支持Spring。

java fork-join框架应用和分析

http://shmilyaw-hotmail-com.iteye.com/blog/1897636 java fork-join框架应用和分析 博客分类: concurrency multithre ...

Java集合框架源码分析(2)LinkedList

链表(LinkedList) 数组(array)和数组列表(ArrayList)都有一个重大的缺陷: 从数组的中间位置删除一个元素要付出很大的代价,因为数组中在被删除元素之后的所有元素都要向数组的前端 ...

java集合框架使用原理分析

集合是我们日常编程中可能用的很多的技术之一 使用频率极高 可能平时就会知道怎么去用 但是集合之间的关系与不同之处都不是很清楚 对它们的底层原理更甚 所以写词文章 让自己有一个更深的认识 集合是一个庞大 ...

Java日志框架解析及实战分析

转载自: https://zhuanlan.zhihu.com/p/24272450 https://zhuanlan.zhihu.com/p/24275518 作为Java程序员,幸运的是,Java ...

Java集合框架之接口Collection源码分析

本文我们主要学习Java集合框架的根接口Collection,通过本文我们可以进一步了解Collection的属性及提供的方法.在介绍Collection接口之前我们不得不先学习一下Iterable, ...

java IO框架分析

jave.io框架 2010-11-10 22:18:34|  分类: 默认分类|举报|字号 订阅     可从IO的类层次,IO框架的设计模式来论述. 总体来说,IO可以分为字节流和字符流,不同在于 ...

【集合框架】Java集合框架综述

一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...

我理解的IOC技术在Java和C#中比较分析

一直想用心写这个系列的文章,其实看得越多,也就越觉得自己在这方面的功力太浅,也就越不想班门弄斧啦,作为一个开篇,我想把这个技术深层次化,在之前的.net的一个MVC系列文章其实已经涉及到了,只是.ne ...

基于Java Netty框架构建高性能的部标808协议的GPS服务器

使用Java语言开发一个高质量和高性能的jt808 协议的GPS通信服务器,并不是一件简单容易的事情,开发出来一段程序和能够承受数十万台车载接入是两码事,除去开发部标808协议的固有复杂性和几个月长周 ...

Java集合框架的总结

本篇文章先从整体介绍了Java集合框架包含的接口和类,然后总结了集合框架中的一些基本知识和关键点,并结合实例进行简单分析.当我们把一个对象放入集合中后,系统会把所有集合元素都当成Object类的实例进 ...

随机推荐

css制作对话框

当你发现好多图都能用css画出来的时候,你就会觉得css很有魅力了.//我是这么觉得的,先不考虑什么兼容问题 像漫画里出现的对话框,往往都是一个对话框然后就加入一个箭头指向说话的那一方,来表示这个内容 ...

HTML图片元素(标记)

第一个网页 ************** ...

PHP处理超时方法

一.在php.ini里面设置 max_execution_time = 1800; 二.通过PHP的ini_set 函数设置 ini_set("max_execution_time&quot ...

shell脚本参数

举例说:脚本名称叫test.sh 入参三个: 1 2 3运行test.sh 1 2 3后$*为"1 2 3"(一起被引号包住)$@为"1" "2&qu ...

Find Current Job Openings For Oracle Forms & Reports

Oracle Form & Reports developer jobs are always in demand, candidates who have Oracle D2k, Oracl ...

JavaEE5种常见的设计模式

1.工厂模式:比如你写了个应用,里面用到了数据库的封装,你的应用可以今后需要在不同的数据库环境下运行,可能是oracle,db2,sql server等, 那么连接数据库的代码是不一样的,你用传统的方 ...

Jump

hdu4862:http://acm.hdu.edu.cn/showproblem.php?pid=4862 题意:给你n*m的方格,每个方格中有一个数(0---9),然后你每次可以选择一个点开始,这 ...

JS学习笔记(四)常用对象

Error // 语法 throw new Error("消息"); 类似于C#中的Exception对象 // alert(num); try { throw new Error ...

BeautifulSoup 模块详解

BeautifulSoup 模块详解 BeautifulSoup是一个模块,该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后遍可以使用他提供的方法进行快速查找指定元素,从而使得在HT ...

Uploadify提示-Failed,上传不了文件,跟踪onUploadError事件,errorMsg:2156 SecurityError Error #2156 null

在使用Uploadify上传文件时,提示-Failed,上传不了文件 折腾中.....,没有结果.....%>_

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值