你的位置:首页 > ASP.net教程

[ASP.net教程]应用Spring MVC发布restful服务是怎样的一种体验


        摘要:“约定优于配置”这是一个相当棒的经验,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的基础上使用性能差不多,但Hessian也还是基于代码的紧耦合了。
 
        首先,我们先在IDEA中新建一个名为dp-parent的Project,作为所有工程的父节点,其<packaging>pom</packaging>。然后,我们在dp-parent下新建一个名为dp-restfulservice的Module,其<packaging>war</packaging>,并在其pom.
 
<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>3.2.4.RELEASE</version>
</dependency>


        
        其次,我们在src/main目录下创建名为webapp的目录,为什么要叫这个名字呢?这其实也是一个约定。并且,我们在webapp目录下创建名为WEB-INF的目录(为什么要叫这个名字呢?这其实也是一个约定)。在WEB-INF目录下创建名为web.(为什么要叫这个名字呢?这其实也是一个约定,这句话我说了太多遍了,“约定优于配置”此理念真是百试不爽)。下面是web.
 
<?"1.0" encoding="UTF-8"?>
<web-app "http://
         "http://www.w3.org/2001/
         xsi:schemaLocation="http://
         version="3.1">
    <servlet>
        <servlet-name>restful</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>restful</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>


 
        然后,我们要在WEB-INF目录下创建一个名为restful-servlet.(为什么要叫这个名字呢?这其实也是一个约定,在web.)。restful-servlet.
 
<?"1.0" encoding="UTF-8"?>
<beans "http://www.springframework.org/schema/beans"
       "http://www.w3.org/2001/
       "http://www.springframework.org/schema/context"
       "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才有上面的效果哦。


 
 
       
  有时候一个理念让人茅塞顿开、醍醐灌顶。“约定优于配置”就是这样的理念。感谢教给我这个理念的人,王某连云港人。 
 
来自王安琪