zoukankan      html  css  js  c++  java
  • Spring restful

    1. RESTful 不是一项技术,也不是一个标准,而是一种风格,跟servlet不在一个层面上,根本无法比较。一个基于servlet的application也是可以是符合RESTful风格的,换言之,RESTful可以通过servlet实现的。

    2. 通过 REST 风格体系架构,请求和响应都是基于资源表示的传输来构建的。资源是通过全局 ID 来标识的,这些 ID 一般使用的是一个统一资源标识符(URI)。客户端应用使用 HTTP 方法(如,GET、POST、PUT 或 DELETE)来操作一个或多个资源。通常,GET 是用于获取或列出一个或多个资源,POST 用于创建,PUT 用于更新或替换,而 DELETE 则用于删除资源。

    3、使用 Spring 3 来创建 RESTful Web Services。

    在 Spring 框架支持 REST 之前,人们会使用其他几种实现技术来创建 Java 的 RESTful Web Services,如 Restlet、RestEasy 和 Jersey。Jersey 是其中最值得注意的,它是 JAX-RS(JSR 311)的参考实现。参考资料 中有更多关于 JSR 311 和 Jersey 的信息。

    Spring 是一个得到广泛应用的 Java EE 框架,它在版本 3 以后就增加了 RESTful Web Services 开发的支持。虽然,对 REST 的支持并不是 JAX-RS 的一种实现,但是它具有比标准定义更多的特性。REST 支持被无缝整合到 Spring 的 MVC 层,它可以很容易应用到使用 Spring 构建的应用中。

    Spring REST 支持的主要特性包括:

    • 注释,如 @RequestMapping@PathVariable,支持资源标识和 URL 映射
    • ContentNegotiatingViewResolver 支持为不同的 MIME/内容类型使用不同的表示方式
    • 使用相似的编程模型无缝地整合到原始的 MVC 层

            例如·Hello World:使用 Spring 3 REST 支持

            要创建这个例子所使用的开发环境,您需要:

    • IDE:Eclipse IDE for JEE (v3.4+)
    • Java SE5 以上
    • Web 容器:Apache Tomcat 6.0(Jetty 或其他容器也可)
    • Spring 3 框架(v3.0.3 是本文编写时的最新版本)
    • 其他程序库:JAXB 2、JSTL、commons-logging

    在 Eclipse 中创建一个 Web 应用,然后设置 Tomcat 6 作为它的运行环境。然后,您需要设置 web.xml 文件来激活 Spring WebApplicationContext。这个例子将 Spring bean 配置分成两个文件:rest-servlet.xml 包含与 MVC/REST 有关的配置,rest-context.xml 包含服务级别的配置(如数据源 beans)。清单 1 显示了 web.xml 中的 Spring 配置的部分。

    清单 1. 在 web.xml 中激活 Spring WebApplicationContext

    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/rest-context.xml
    </param-value>
    </context-param>
         
    <!-- This listener will load other application context file in addition to 
                rest-servlet.xml -->
    <listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
    </listener>
         
    <servlet>
    <servlet-name>rest</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>
     
    <servlet-mapping>
    <servlet-name>rest</servlet-name>
    <url-pattern>/service/*</url-pattern>
    </servlet-mapping>

    在 rest-servlet.xml 文件中创建 Spring MVC 的相关配置(Controller、View、View Resolver)。清单 2 显示了其中最重要的部分。

    清单 2. 在 rest-servlet.xml 文件中创建 Spring MVC 配置
     1 <context:component-scan base-package="dw.spring3.rest.controller" />
     2  
     3 <!--To enable @RequestMapping process on type level and method level-->
     4 <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
     5 <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
     6  
     7 <!--Use JAXB OXM marshaller to marshall/unmarshall following class-->
     8 <bean id="jaxbMarshaller"
     9 class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    10 <property name="classesToBeBound">
    11     <list>
    12         <value>dw.spring3.rest.bean.Employee</value>
    13         <value>dw.spring3.rest.bean.EmployeeList</value>
    14     </list>
    15 </property>
    16 </bean>
    17  
    18 <bean id="employees" class=
    19     "org.springframework.web.servlet.view.xml.MarshallingView">
    20 <constructor-arg ref="jaxbMarshaller" />
    21 </bean>
    22  
    23 <bean id="viewResolver" class=
    24 "org.springframework.web.servlet.view.BeanNameViewResolver" />

    上面的代码中:

    Component-scan
    启用对带有 Spring 注释的类进行自动扫描
    在实践中,它将检查控制器类中所定义的 @Controller 注释。
    DefaultAnnotationHanlderMappingsAnnotationMethodHandlerAdapter
    使用 @ReqeustMapping 注释的类或函数的 beans 由 Spring 处理
    这个注释将在下一节进行详细介绍。
    Jaxb2Mashaller
    定义使用 JAXB 2 进行对象 XML 映射(OXM)的编组器(marshaller)和解组器(unmarshaller
    MashallingView
    定义一个使用 Jaxb2Mashaller 的 XML 表示 view
    BeanNameViewResolver
    使用用户指定的 bean 名称定义一个视图解析器
    本例将使用名为 “employees” 的 MarshallingView

    这样就完成了 Spring 的相关配置。下一步是编写一个控制器来处理用户请求。清单 3 显示的是控制器类。

    清单 3. dw.spring3.rest.controller.EmployeeController

    @Controller
    publicclass EmployeeController {
    @RequestMapping(method=RequestMethod.GET, value="/employee/{id}")
    public ModelAndView getEmployee(@PathVariable String id) {
        Employee e = employeeDS.get(Long.parseLong(id));
        returnnew ModelAndView(XML_VIEW_NAME, "object", e);
    }
    }

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

    • 对于 {id} 占位符,使用 @PathVariable 注释可以将 {} 内的值注入到函数的参数。
    • XML_VIEW_NAME 为 employees,这是 rest-servlet.xml 中定义的视图名称。
    • employeeDS 是一个基于内存的数据源,它的实现已经超出本文写作范围。

    将 Web 应用发布到您的 Tomcat 上。这时,您可以打开浏览器,然后输入 http://<host>:<port>/<appcontext>/service/employee/1。浏览器就会显示一个 ID 为 1 的员工信息的 XML 视图。

          资源操作是通过 HTTP 方法实现的,如 GET、POST、PUT 和 DELETE。

          也就是可以形成一个简单的支持对员工信息的 CRUD(增删查改)操作的 RESTful Web Service。

  • 相关阅读:
    今日总结
    今日总结
    团队绩效1
    本周总结
    团队冲刺阶段10
    团队冲刺阶段9
    团队冲刺阶段8
    promise手写自定义封装异步任务回调的执行
    Vue中this.$options.data()和this.$data知多少?
    手写Promise自定义封装 then 函数
  • 原文地址:https://www.cnblogs.com/followlqc/p/10666320.html
Copyright © 2011-2022 走看看