摘要:“约定优于配置”这是一个相当棒的经验,SOAP服务性能差、基于配置、紧耦合,restful服务性能好、基于约定、松耦合,现在我就把使用Spring MVC发布restful服务的过程同大家分享。代码之优雅、过程之简单、编码之愉快,不是发布SOAP服务所能匹敌的。
        关键字:java, rest, webservice, spring mvc
        前提:IntelliJ IDEA (13.1.5 版本), apache maven (3.2.3 版本), Tomcat(7.0.56版本), Spring(3.2.4版本)

 
        
  “约定优于配置”这是一个相当棒的经验,对于我来说,恐怕是自“面向对象”以来对我最大冲击的理念了吧。首先,SOAP服务可以说是基于配置的,它在HTTP的基础上使用XML配置表达服务与数据,为了实现远程访问,它生成的服务信息尤其复杂,无论是C#客户端还是JAVA客户端,甚至可以通过WSDL服务描述来自动生成一整套代码,这样基于配置的服务的缺点就在于服务端与客户端有着较强的编码耦合性,服务端接口修改后,需要对客户端的服务依赖代码重新生成。而restful服务是基于约定的,是http的get、delete、post还是put都约定好了不同的含义,我们依照约定来进行http请求便可以实现各式的操作。更不用说SOAP服务的性能之差、与restful服务不是一个数量级之缺点了。基于约定,我们可以实现代码间的松耦合。虽然Hessian性能略优于restful服务、其实是一个数量级、restful编解码做好了就性能差不多,但Hessian也还是基于代码的紧耦合了。
 
        首先,我们先在IDEA中新建一个名为dp-parent的Project,作为所有工程的父节点,其<packaging>pom</packaging>。然后,我们在dp-parent下新建一个名为dp-restfulservice的Module,其<packaging>war</packaging>,并在其pom.xml中添加其所需的spring依赖。如:
 
<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>...RELEASE</version>
</dependency>
        
        其次,我们在src/main目录下创建名为webapp的目录,为什么要叫这个名字呢?这其实也是一个约定。并且,我们在webapp目录下创建名为WEB-INF的目录(为什么要叫这个名字呢?这其实也是一个约定)。在WEB-INF目录下创建名为web.xml的文件(为什么要叫这个名字呢?这其实也是一个约定,这句话我说了太多遍了,“约定优于配置”此理念真是百试不爽)。下面是web.xml的主要内容。
 
<?xml version=</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>restful</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
 
        然后,我们要在WEB-INF目录下创建一个名为restful-servlet.xml的文件(为什么要叫这个名字呢?这其实也是一个约定,在web.xml中规定的servlet-name加上-servlet约定为servlet配置文件名)。restful-servlet.xml文件的主要内容如下。
 
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <context:component-scan base-package="com.jsc.dp.controllers"></context:component-scan>
    <mvc:resources mapping="/resources/**" location="/WEB-INF/resources/"></mvc:resources>
    <mvc:annotation-driven/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
        <!-- 如果 .jsp 文件中含有 jstl,需要这一行 -->
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    </bean>
</beans>
        下面是要编写代码spring mvc中的C(Controller)了。在main/java中创建名为com.jac.dp.controllers的包,在此包下新建一个名为AbcController的类,其通过@Controller注解注入进spring框架中。具体的restful代码如下图所示。从图中可以看到,其实现了一个名为getAbcs的方法,使用get用以对get式的 http://localhost:8088/restfulservice/abcs  请求进行响应。还实现了一个名为getAbc的方法,使用get以对get式的 http://localhost:8088/restfulservice/abcs/3  请求进行响应,来获取某一对象,返回给前端的是一Json字符串:{"myInt":3,"myString":"myString"}。名为putAbc的方法,其使用put以对put式的 http://localhost:8088/restfulservice/abcs/3  请求进行响应,来更新某一对象。下图中也展示了,使用工具REST Client来进行http put请求测试的过程与结果,在这里,返回的是一个对象转成的Json字符串,在IDEA中可以看到其Response是:{"myInt":-1,"myString":"post true"},与预想中的一样;同样的post和get也可以如此测试,测试get请求也可以直接使用浏览器执行。 

 
 
        代码编写完成后,需要进行服务发布了,我们使用Tomcat作为服务容器。在IDEA中如何进行Tomcat配置就不多说了,这里提一下Run/Debug Configurations。在Application context中配置成restfulservice才有上面的效果哦。
 
 
       
  有时候一个理念让人茅塞顿开、醍醐灌顶。“约定优于配置”就是这样的理念。感谢教给我这个理念的人,王某连云港人。 
 

应用Spring MVC发布restful服务是怎样的一种体验的更多相关文章

  1. 使用Spring MVC开发RESTful API

    第3章 使用Spring MVC开发RESTful API Restful简介 第一印象 左侧是传统写法,右侧是RESTful写法 用url描述资源,而不是行为 用http方法描述行为,使用http状 ...

  2. 发布Restful服务时出现IIS 指定了身份验证方案错误时的解决方案(IIS specified authentication schemes)

    发布RESTful服务,当访问.svc文件时出现如下错误时: IIS 指定了身份验证方案“IntegratedWindowsAuthentication, Anonymous”,但绑定仅支持一种身份验 ...

  3. Spring MVC 学习总结(九)——Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务)

    很多时候前端都需要调用后台服务实现交互功能,常见的数据交换格式多是JSON或XML,这里主要讲解Spring MVC为前端提供JSON格式的数据并实现与前台交互.RESTful则是一种软件架构风格.设 ...

  4. Swagger+Spring mvc生成Restful接口文档

    简介 Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模型紧密集 ...

  5. 【Spring学习笔记-MVC-18.1】Spring MVC实现RESTful风格-同一资源,多种展现:xml-json-html

    概要 要实现Restful风格,主要有两个方面要讲解,如下: 1. 同一个资源,如果需要返回不同的形式,如:json.xml等: 不推荐的做法: /user/getUserJson /user/get ...

  6. spring mvc实现Restful返回xml格式数据

    最近,想在自己的小项目中搭建一个Restful风格的服务接口api,项目用的spring mvc 3,听说spring mvc本身就能十分方便的支持restful的实现,于是查询了下资料,果然非常强大 ...

  7. 用Kotlin写一个基于Spring Boot的RESTful服务

    Spring太复杂了,配置这个东西简直就是浪费生命.尤其在没有什么并发压力,随便搞一个RESTful服务 让整个业务跑起来先的情况下,更是么有必要纠结在一堆的XML配置上.显然这么想的人是很多的,于是 ...

  8. spring boot构建restful服务

    使用spring boot快速构建出restful服务 JPA实现REST 创建spring boot项目,在项目文件pom.xml中添加以下依赖: <dependency> <gr ...

  9. Spring MVC中页面向后台传值的几种方式

    在学习 Spring Mvc 过程中,有必要来先了解几个关键参数:   @Controller:         在类上注解,则此类将编程一个控制器,在项目启动 Spring 将自动扫描此类,并进行对 ...

随机推荐

  1. codevs4247奇特的生物 解析报告

    4247 奇特的生物 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 科学家们最近发现了一种奇怪的生物,它们每天长大一岁 ...

  2. Spring基础—— Bean 的作用域

    一.在 Spring Config 文件中,在 <bean> 元素的 scope 属性里设置 Bean 的作用域.默认为 singleton ,单例的. 二.在不引入 spring-web ...

  3. 【JavaScript回顾】继承

    组合继承 组合继承(combination inheritance),有时候也叫做伪经典继承,指的是将原型链和借用构造函数的 技术组合到一块,从而发挥二者之长的一种继承模式.其背后的思路是使用原型链实 ...

  4. Winform屏幕截图保存C#代码

    代码如下: using System.Runtime.InteropServices; using System.Drawing.Imaging; [System.Runtime.InteropSer ...

  5. C#语法糖

    首先需要声明的是“语法糖”这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕不已,呵呵. 1.  ...

  6. 多准则决策模型-TOPSIS方法

    多准则决策–Multiple Criteria Decision Making 多准则决策–Multiple Criteria Decision Making 多准则决策是指在具有相互冲突.不可共度的 ...

  7. j2ee log4j集中式日志解决方案logpool v0.3

    V0.3相对于v0.2的更新如下:

  8. DigitalOcean上SSH Key的创建(附DigitalOcean邀请)

    DigitalOcean是一家云主机商家,最低配置512M内存,20G的SSD,每月只有5刀.半个月前刚刚在这上面买了一个VPS,创建Droplet的时候看见创建SSH Key的时候就有点懵,不知道这 ...

  9. CSS布局——居中

    参考文章1.CSS布局奇淫技巧之--各种居中 2.http://www.imooc.com/article/2235 1.行内元素水平居中text-align:center对图片,按钮,文字等行内元素 ...

  10. compass制作sprite雪碧图

    1.安装compass.(需要先安装ruby) 命令行:gem install compass 2.新建一个compass 项目 命令行:compass create myproject 3.在myp ...