如何利用Spring MVC实现RESTful风格

目录
  • SpringMVC实现RESTful风格
    • RESTful
    • 使用SpringMVC实现RESTful风格
    • 静态资源访问问题
  • SpringMVC的RESTful学习
    • 什么RESTful
    • 使用简单的加法计算

SpringMVC实现RESTful风格

RESTful

中文释义为”表现层状态转换“,它不是一种标准,而是一种设计风格。

它的主要作用是充分并正确利用HTTP协议的特性,规范资源获取的URI路径。

通俗的讲,RESTful风格的设计允许将参数通过URL拼接传到服务端,目的是让URL看起来更简洁实用。

并且对于不同的操作,要指定不同的HTTP方法(POST/GET/PUT/DELETE)。可以这么说,只要是具有上述相关条件和原则的应用程序或设计就可以被称为RESTful风格的应用。

一个满足RESTful的程序或设计应满足以下条件和约束:

第一:对请求的URL进行规范,在URL中不会出现动词,而是使用HTTP协议的动词

第二:充分利用HTTP方法,HTTP方法名包括:GET、POST、PUT、PATCH、DELETE

使用Spring MVC实现RESTful风格

Spring mvc可以使用@RequestMapping的路径设置,结合@PathVariable的参数指定,来实现RESTful风格的请求。

样例要实现,通过拼接水果商品的id来实现一个RESTful风格的请求,并向后台发送该请求,以此来获取JSON格式的水果数据

@RequestMapping(value="/queryFruit/{id}",method={RequestMethod.GET})
public @ResponseBody Fruits getFruitById(Model model,@PathVariable("id") Integer fruitId) throws Exception{
    Fruits fruit = fruitsServices.queryFruitById(fruitId);
    return fruit;
}

在该方法中,在@RequestMapping注解的请求路径中添加了一个动态数据"{id}",它的作用是解析前台的请求路径,将动态数据所在的位置解析为名为id的请求参数。

@PathVariable注解,在其中指定请求参数的key名称,并映射在后面定义的形参上,这里定义fruitId形参来接收名为id的请求参数,最后使用@ResponseBody注解加上之前配置的类型转换器,返回客户端JSON类型的水果详细信息,总的来说,利用SprngMVC实现RESTful风格主要就是在于请求路径和请求参数的映射,以及RequestMapping的指定,更改web.xml中配置文件的内容,将*.do改成"/",这样编写的RESTful风格的请求才能被前端控制器拦截到并解析。

<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

然后重启工程,输入网址:http://localhost:8080/工程名/queryFruit/1

上面的代码为查询类型的请求代码,而新增、修改以及删除的请求与此类似,区别就是需要指定不同的RequestMethod(POST/PUT/DELETE),样例代码如下:

        //添加水果逻辑
	@RequestMapping(value="/addFruit",method= {RequestMethod.POST})
	public String addFruit(Model model,Fruits fruit)throws Exception{
		//implements
		return "...";
	}
	//通过id删除水果商品
		@RequestMapping(value="/deleteFruit/{id}",method= {RequestMethod.DELETE})
		public String deleteFruitById(Model model,@PathVariable Integer fruitId)throws Exception{
			//implements
			return "...";
		}
	//修改水果商品信息
	@RequestMapping(value="/editFruit",method= {RequestMethod.PUT})
	public String editFruitById(Model model,Fruits fruit)throws Exception{
		//implements
		return "...";
	}

前端在访问RESTful风格的增、删、该请求时,需要配置HTTP请求的方法(method参数)。如果是在JSP页面上使用form表单的提交方式来请求RESTful风格的服务,需要根据请求的类型,在form表单标签中指定HTTP请求的相关method参数。

静态资源访问问题

前面在web.xml中配置了符合RESTful风格的DispatcherServlet前端控制器过滤器。但是这种过滤方式会造成静态资源无法访问的问题,例如:在webContent下的image文件夹下放置一张图片logo.jpg。

由于图片放置在WEB-INF文件外(由于JavaWEB的保护机制,WEB-INF文件夹下的文件不可直接访问),所以原则上是可以通过直接访问静态资源的方式获取该图片的,但是输入http://localhost:8080/工程名/image/logo.jpg的请求后,不能获取到图片资源。

原因:

在web.xml中配置了前端控制器的请求过滤机制,为了接收RESTful风格的请求,将过滤的后缀去除了,变成过滤所有后缀的请求路径,此时静态资源会被当做一个业务请求被前端控制器处理,前端控制器没有发现能够处理该请求的Controller控制器方法,所以对外抛出了404错误。

解决方式一:

在类加载配置文件springmvc中使用"mvc:resources"配置静态资源的解析路径,将需要加载的静态资源的URI路径配置在标签中,然后配置该URI映射的真是资源路径。

<mvc:resources location="/js/" mapping="/js/**"/>
<mvc:resources location="/img/" mapping="/img/**"/>
<mvc:resources location="/css/" mapping="/css/**"/>

当在springmvc.xml中配置了静态资源文件的解析路径后,前端控制器就会根据请求URL中的具体子路径来映射出静态资源的真是路径,然后为前端反馈真实的静态资源信息。

解决方式二:

在springmvc.xml中使用"<mvc:default-servlet-handler/>"配置默认的Servlet处理器,该配置将在SpringMVC上下文中定义一个DefaultServletHttpRequestHandler,他会对进入DispatcherServlet的请求进行筛选,若发现没有经过映射的请求,就将该请求交由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet前端控制器继续处理,此时就可以将请求中的静态资源和其他业务请求分开处理,从而正常地返回静态资源信息。

Spring MVC的RESTful学习

什么RESTful

RESTful也称为REST(Representational State Transfer),可以将它理解为一种软件架构风格或设计风格

RESTful风格就是把请求参数编程请求路径的一种风格。

例如,传统的URL请求如下:

http://.../requestparam?id=1

而采用RESTful风格后,URL请求变为:

http://.../param/1

RESTful风格在HTTP请求中使用put,delete,post和get方式分别对应添加,删除,修改和查询的操作。不过国内开发目前只使用post和get方式实现增删改查操作。

使用简单的加法计算

@Controller
public class RestFulController {
    //原来的:localhost:8080/add?a=1&b=1
    //RestFul:   localhost:8080/add/a/b
    @RequestMapping(value = "/add/{a}/{b}",method = RequestMethod.GET)
    public String test(@PathVariable int a,@PathVariable int b, Model model) {
        int res = a + b;
        model.addAttribute("msg","结果为:"+res);
        return "test";
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}
</body>
</html>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • SpringMVC实现RESTful风格:@PathVariable注解的使用方式

    目录 1.RESTful简介 2.SpringMVC实现RESTful风格 2.1 @PathVariable注解 2.2 修改SpringMVC的前端控制器配置 3.静态资源访问问题 3.1 解决方法一 3.2 解决方法二 4.综合实例 1.RESTful简介 RESTful为Representational State Transfer的缩写,中文释义为"表现层状态转换".RESTful不是一种标准,而是一种设计风格. RESTful本质上是一种分布式系统的应用层解决方案,它的主要

  • 详解Spring框架之基于Restful风格实现的SpringMVC

    如果说现在你要做一个系统,假设说有一个模块属于公告管理,那么我们可能安排路径的时候会这样安排NewsAction路径: 增加新闻:/pages/back/admin/news/add.action: 新闻列表:/pages/back/admin/news/list.action 随着技术的发展,有一种新型的架构设计思想:Restful风格,也就是说利用一个简单的路径,而后根据HTTP提交模式不同.那么可以完成不同的功能,也就是说: 看一个新闻内容:/news/1,GET: 删除新闻:/news/

  • 关于SpringMVC对Restful风格的支持详解

    目录 前言 一.RESTful简介 1.1.资源 1.2.资源的表述 1.3.状态转移 RESTful规范 二.RESTful的实现 三.HiddenHttpMethodFilter 3.1.HiddenHttpMethodFilter 过滤器处理put和delete请求 3.2.在web.xml中注册HiddenHttpMethodFilter 3.3.过滤器的先后配置顺序 总结 前言 RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义

  • springMVC在restful风格的性能优化方案

    目录 springMVC在restful风格的性能优化 测试 1.非restful接口 2.restful接口 匹配原理 这段代码中匹配逻辑有三: 优化方案 原理: 实现: 我使用基于java config的注解配置. 最终测试 spring restful使用中遇到的一个性能问题 原因: 解决方案: springMVC在restful风格的性能优化 目前,restful的接口风格很流行,使用springMVC来搭配restful也是相得益彰.如下,使用@PathVariable注解便可以获取U

  • 如何利用Spring MVC实现RESTful风格

    目录 SpringMVC实现RESTful风格 RESTful 使用SpringMVC实现RESTful风格 静态资源访问问题 SpringMVC的RESTful学习 什么RESTful 使用简单的加法计算 SpringMVC实现RESTful风格 RESTful 中文释义为”表现层状态转换“,它不是一种标准,而是一种设计风格. 它的主要作用是充分并正确利用HTTP协议的特性,规范资源获取的URI路径. 通俗的讲,RESTful风格的设计允许将参数通过URL拼接传到服务端,目的是让URL看起来更

  • Spring mvc实现Restful返回xml格式数据实例详解

    spring mvc实现Restful返回xml格式数据 最近,想在自己的小项目中搭建一个Restful风格的服务接口api,项目用的spring mvc 3,听说spring mvc本身就能十分方便的支持restful的实现,于是查询了下资料,果然非常强大. 在一次偶然的#墙#外#(你懂的)状态下浏览到了一个老外的博客,举了几个入门例子十分经典,原文是E文+被墙状态,觉得有必要扒过来收藏学习下. 在本示例中,我们将向您展示如何将对象转换成xml格式并通过spring mvc框架返回给用户. 技

  • Spring mvc实现Restful返回json格式数据实例详解

    在本示例中,我们将向您展示如何将对象转换成json格式并通过spring mvc框架返回给用户. 使用技术及环境: Spring 3.2.2.RELEASE Jackson 1.9.10 JDK 1.6 Eclipse 3.6 Maven 3 PS:在spring 3 中,要输出json数据,只需要添加Jackson 库到你的classpath. 1.项目依赖 spring和jackson的依赖: <project xmlns="http://maven.apache.org/POM/4.

  • 利用Spring MVC+Mybatis实现Mysql分页数据查询的过程详解

    前言 因为最近没什么事,所以想着写一个分页的例子出来给大家分享一下.这个案例分前端和后台两部分,前端使用面向对象的方式写的,里面用到了一些回调函数和事件代理,有兴趣的朋友可以研究一下.后台的实现技术是将分页Pager作为一个实体对象放到domain层,当前页.单页数据量.当前页开始数.当前页结束数.总数据条数.总页数都作为成员属性放到实体类里面. 以前项目数据库用的是oracle,sql语句的写法会从当前页开始数到当前页结束数查询数据.刚刚在这纠结了很长时间,查询到的数据显示数量总是有偏差,后来

  • Spring MVC url提交参数和获取参数

    普通URL提交参数 该格式url为:url.do?param1=mahc&param2=8888.00 需要在上文中的HelloController对象添加方法如下: /** * Spring MVC URL提交参数 * @param name * @return */ @RequestMapping("/param") public ModelAndView getInfo(@RequestParam("name") String name){ Strin

  • spring MVC实践需要注意的地方

    使用spring mvc提供restful风格的接口,实现前后端分离,后端只提供数据接口,而不做页面渲染.因此可对接口做统一处理: 请求参数校验 响应数据格式 全局异常处理 通过以上统一处理,开发人员可专注于业务处理,把校验,异常响应的逻辑分离出来. 请求参数校验: 对于url中的参数 如果添加@RequestParam,但没有传递该参数,则抛出MissingServletRequestParameterException异常 如果添加@Max等注解,同时不满足该条件,抛出ConstraintV

  • 让你五分钟彻底理解Spring MVC

    目录 概述 MVC 架构模式 传统 MVC 架构模式 Java Web MVC 架构模式 Spring MVC 架构模式 Hello,Spring MVC Spring MVC 依赖引入 DispatcherServlet 声明 Spring 上下文配置 Spring 上下文配置文件内容 HandlerMapping 配置 处理器配置 ViewResolver 配置 DispatcherServlet 组件默认配置 基于注解的 Spring WebMVC DispatcherServlet 请求

  • Spring MVC Interceptor 实现性能监控的功能代码

    利用Spring MVC 的 Interceptor 实现个简易的性能监控,计算一下每个url的执行时间. 在 preHandle 方法中记录当前的时间戳到线程局部变量里,然后在afterCompletion方法中,用当前的时间戳剪掉线程局部变量里的时间戳得出个运行时间,并记录到log里. 这只是个简易的性能监控,如果想长期正式的监控性能,请选择其它成熟的产品. Interceptor import javax.servlet.http.HttpServletRequest; import ja

  • Spring MVC拦截器的基本使用方法

    拦截器简介 Spring MVC 中的拦截器(Interceptor)类似于 Servler 中的过滤器(Filter).用于对处理器进行预处理和后处理.常用于日志记录.权限管理.性能监控.通用行为等. 拦截器的实现 Spring MVC 中的拦截器需要我们手动实现和配置.拦截器可以通过以下两种方式定义 实现 HandleInterceptor 接口,或者继承该接口的实现类如 HandleInterceptorAdapter 来定义一个拦截器: 实现 WebRequestInterceptor

随机推荐