`
m635674608
  • 浏览: 5052520 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java各种框架的比较,分析

    博客分类:
  • java
 
阅读更多

Spring 框架

优点

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

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

3.代码测试较容易

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

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

6.一致的数据访问界面

 缺点

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

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

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

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

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

 

XFire是一个开源的框架,可以非常容易得与spring集成。可以很简单地发布一个WebService。可以将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模式的WebService框架,接下来介绍几种实现了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(@PathVariableString id) {
Employee e = employeeDS.get(Long.parseLong(id));
return newModelAndView(XML_VIEW_NAME, "object", e);
}
}
如上@RequestMapping注释是SpringREST特性的关键所在。它指定所注释的方法将处理哪个HTTP方法(RequestMethod.GET)和哪个URI(/employee/{id})。注意:

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

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

 

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

@RequestMapping(method=RequestMethod.POST,value="/employee")
public ModelAndView addEmployee(@RequestBodyString body) {
Source source = newStreamSource(new StringReader(body));
Employee e = (Employee) jaxb2Mashaller.unmarshal(source);
employeeDS.add(e);
return newModelAndView(XML_VIEW_NAME, "object", e);
}

@RequestMapping(method=RequestMethod.PUT,value="/employee/{id}")
public ModelAndView updateEmployee(@RequestBodyString body) {
Source source = newStreamSource(new StringReader(body));
Employee e = (Employee) jaxb2Mashaller.unmarshal(source);
employeeDS.update(e);
return newModelAndView(XML_VIEW_NAME, "object", e);
}

@RequestMapping(method=RequestMethod.DELETE,value="/employee/{id}")
public ModelAndView removeEmployee(@PathVariableString id) {
employeeDS.remove(Long.parseLong(id));
List<Employee> employees =employeeDS.getAll();
EmployeeList list = newEmployeeList(employees);
return newModelAndView(XML_VIEW_NAME, "employees", list);
}

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

 

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

<beanclass="org.springframework.web.servlet.view
.ContentNegotiatingViewResolver"
>
<propertyname="mediaTypes">
<map>
<entry key="xml"value="application/xml"/>
<entry key="html"value="text/html"/></map></property><propertyname="viewResolvers">
<list>
<beanclass="org.springframework.web.servlet.view
.BeanNameViewResolver"
/>
<beanclass="org.springframework.web.servlet.view
.UrlBasedViewResolver"
>
<property name="viewClass" value=
"org.springframework.web.servlet.view.JstlView"/>
<property name="prefix"value="/WEB-INF/jsp/"/>
<property name="suffix"value=".jsp"/>
</bean>
</list>
</property>
</bean>
定义了两个视图解析器。BeanNameViewResolver是负责处理的application/xml的,而另一个UrlBasedViewResolver则负责处理text/html。

 

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

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

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

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

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

Restlet也支持REST。

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

缺点:

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

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

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

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

  5.没有内建的国际支持

优点:

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

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

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

 

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

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

优点:

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

  2.对于传统的Web应用,可以使用服务器端的HTTPSession;对于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风格的WebService。但缺点很明显,

  1.仅仅支持GET与POST方法

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

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

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

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

缺点:

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

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

 

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

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不是基于ServletAPI的,而是采用了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。

 

http://blog.csdn.net/jbjwpzyl3611421/article/details/20056083

分享到:
评论

相关推荐

    Java SSH 框架整合,学习源码

    Java SSH 框架整合是Java开发中常见的一项技术,主要涉及Spring、Struts和Hibernate这三个开源框架。这些框架在企业级应用开发中扮演着重要角色,分别负责控制层、视图层和持久层的管理。下面将详细介绍SSH框架整合...

    Java框架与.NET框架比较分析研究.pdf

    Java框架与.NET框架比较分析研究 在软件开发领域中,Java框架和.NET框架是两个最流行的开发平台。它们之间的比较和竞争已经不是一两天的事情了。喜欢Windows的用户和初级程序员都会喜欢使用.NET平台,而更加喜欢...

    java框架源码分析java框架源码分析

    Java框架源码分析是软件开发领域中的重要环节,它能帮助开发者深入理解框架的工作原理,提升编程技巧,优化代码质量,以及解决实际开发中的问题。本文将围绕Java框架的源码分析进行详细探讨。 首先,Java框架是为...

    【Java】Java集合框架思维导图。

    xmind格式的Java集合框架学习导图,包括Collection接口/Map接口以及具体实现类。 同样包含大厂面试题,也在导图中有所体现。 能学到什么: 更加成体系的知识框架,更加全面的、系统的知识。 思维导图: 思维导图具有...

    基于Java的数据库应用框架设计分析.pdf

    本文主要分析了Java与数据库应用框架之间的联系,设计了基于Java的数据库应用框架模型,并通过实例分析了该框架设计的细节。 首先,分析数据库与应用框架的联系是理解Java数据库应用框架设计的基础。在软件开发中,...

    架构探险 从零开始写Java Web框架.pdf

    本书首先从一个简单的Web应用开始,让读者学会如何使用IDEA、Maven Git等开发工具搭建Java web应用:接着通过一个简单的应用场景,为该Web应用添加若干业务功能,从需求分析与系统设计开始,带领读者动手完成该Web...

    java 实用框架demo

    Java 实用框架 Demo 是一个整合了多种流行Java技术的示例项目,主要涵盖了Ajax框架、Struts、Hibernate以及Spring这四个关键组件。这些框架在Java Web开发中扮演着至关重要的角色,极大地提高了开发效率和代码的可...

    30种java技术框架

    ### 30种Java技术框架概述 #### 一、Java类加载器架构 Java类加载器是Java虚拟机(JVM)的重要组成部分之一,主要负责在程序运行时将类文件加载到内存中,并对其进行验证、准备和解析等初始化操作。类加载器采用双亲...

    java集合 框架 泛型

    1. 集合框架的层次结构,解释各种接口和类之间的关系。 2. 泛型的基本用法,包括泛型类、泛型方法、通配符等。 3. 枚举类型的创建和使用,以及它们在集合中的应用。 4. 实例分析,通过具体的代码示例展示如何在实际...

    java基本框架

    Java基本框架是构建高效、可扩展且易于维护的Java应用程序的核心工具。这些框架提供了一种标准的方法来组织代码,使得开发过程更加规范和模块化。在这个"java基本框架"的压缩包中,我们重点关注三个主要组件:Spring...

    java 管理系统,采用框架构成

    Struts是Apache组织开发的一个MVC(Model-View-Controller)框架,它为Java Web应用程序提供了结构化开发的框架。在Struts中,Model代表业务逻辑,View负责展示数据,而Controller处理用户请求并协调Model和View之间...

    JAVA框架项目

    ### JAVA框架项目知识点详解 #### 一、项目背景与意义 - **背景介绍**:《JAVA框架项目教程》是翰子昂实训体系丛书中的一部分,旨在通过真实的项目案例,为学习者提供贴近实际工作的JAVA技能训练。随着软件产业在...

    基于JavaParser的代码调用链分析,可以用于分析Java代码的方法调用链.zip

    通过遍历和操作这棵树,我们可以方便地对源代码进行各种分析。 在Java代码中,方法调用是程序执行流程的关键部分。一个方法调用链通常表示一个方法调用另一个方法,后者可能再调用其他方法,形成一个链式结构。这种...

    java ssh框架权限管理系统

    Java SSH框架权限管理系统是一款基于Java技术的,使用Struts、Spring和Hibernate三个开源框架整合开发的权限管理解决方案。SSH框架是Java Web开发中常见的“三位一体”框架,它们分别是Struts负责视图层,Spring处理...

    Java流行框架源码分析.zip

    Java流行框架源码分析:Spring源码、SpringBoot源码、SpringAOP源码、SpringSecurity源码、SpringSecurity OAuth2源码、JDK源码、Netty源码

    JAVA开源关键词提取框架

    总的来说,Java开源关键词提取框架为开发者提供了一种高效、灵活的方式,帮助他们从大量文本数据中抽取出最有价值的信息,对于数据挖掘、信息检索和文本分析等应用场景有着重要的实用价值。通过深入研究和实践这些...

    java 三大主流框架

    Spring是一款轻量级的Java框架,主要用于开发企业级应用程序。Spring提供了一个完整的解决方案,包括 IoC容器、AOP、MVC等模块,可以帮助开发者快速开发和维护应用程序。 Struts2、Hibernate和Spring这三大框架都是...

    java 实现词法分析器以及语法分析器

    在实际项目中,Java有许多库可以帮助我们实现词法分析和语法分析,如ANTLR、JavaCC等,它们提供了现成的工具和框架,使得开发过程更为便捷。然而,手动编写词法分析器和语法分析器有助于深入理解编译原理,提升编程...

    Java源码分析 【源码笔记】专注于Java后端系列框架的源码分析,每周持续推出Java后端系列框架的源码分析文章。.zip

    在Java编程领域,源码分析是一项至关重要的技能,它能帮助开发者深入理解框架的工作原理,提升软件设计和问题解决的能力。"Java源码分析 【源码笔记】"是一系列专门针对Java后端框架进行源码解析的文章集合,旨在...

Global site tag (gtag.js) - Google Analytics