springmvc之RestFul和拦截器

一:什么是Restful?

Restful就是开发人员都默认和准守的一种对于url请求的一种规范;因为随着HTML5的兴起,数据的提交已经不仅仅局限在表单了,如果需要多个终端来公用一个后端,一般来说主流的设计方案就是使用json数据来传递。

在Restful中:

1,一个url操作一个资源;

2,使用http的请求方式来描述请求的行为;例如:

GET(查) http://localhost:8080/book/1 查询id为1的书
POST(增) http://localhost:8080/book/1 添加一本书,书的id为1
DELETE(删) http://localhost:8080/book/1 删除id为1的书
PUT(改) http://localhost:8080/book/1 修改id为1的书
在RESTful接口中,所有的方法都是返回JSON,没有返回页面的(ModelAndView),因此,所有的方法上都需要添加@ResponseBody注解。一个替代的简化方案,是使用 @RestController 代替@Controller。@RestController实际上是一个组合注解,是@Controller和@ResponseBody的组合:
使用Restful规范需要注意的地方是:

第一:可以不使用通过的映射@RequestMapping;而使用专门的映射来处理不同的请求;例如

@GetMapping专门来处理get请求的

@PostMapping专门处理post请求的

@DeleteMapping

@PutMapping;功能与上面的规范相对应。

第二:请求的参数如何获取;这个与利用通用的映射处理有一点区别:这里还需要用到一个@PathVariable的注解

在获取请求参数的时候要注意两点:一是在形参中的定义,而是在映射中的定义要获取的参数

当有一个请求的参数时:

 1 /**
 2      * 演示利用Restful规范请求数据;这里是单个的,如果有多个数据
 3      * @return
 4      */
 5     @GetMapping("/book/{id}")
 6     @ResponseBody
 7     public Map<String, Object> fun1(@PathVariable int id){
 8         System.out.println(id+"--->");
 9         Map<String, Object> map=new HashMap<>();
10         map.put("id", 1);
11         map.put("name", "张三");
12         map.put("age", 20);
13         map.put("address", "深圳尚学堂");
14         return map;
15     }

当有多个请求的时候:

 1 /**
 2      * 演示利用Restful规范请求数据;多个数据的时候,可以在请求处理后面进行拼接多个
 3      * @return
 4      */
 5     @GetMapping("/book/{id}/{book}")
 6     @ResponseBody
 7     public Map<String, Object> fun2(@PathVariable int id,@PathVariable String book){
 8         System.out.println(id+"--->"+book);
 9         Map<String, Object> map=new HashMap<>();
10         map.put("id", 1);
11         map.put("name", "张三");
12         map.put("age", 20);
13         map.put("address", "深圳尚学堂");
14         return map;
15     }

第三:要注意的是利用Restful规范之后在get请求的时候地址已经发生了变化

原来的get请求的地址输入的参数为:http://localhost:8080/web-3-springmvc-restful/book/?id=1&username=java

利用Restful的get请求的地址输入的参数为:http://localhost:8080/web-3-springmvc-restful/book/199/java

第四:其他的请求与get请求的改变大同小异。

二:拦截器

拦截器和过滤器的区别?

1,一般来说在springmvc框架中建议使用拦截器而不是过滤器,

2,过滤器依赖servlet,而拦截器是springmvc自带的,不依赖容器

3,拦截器的功能更为强大,体现了AOP的设计思想

拦截器的使用:

第一步:先创建一个拦截器实现HandlerInterceptor,这个接口里面有三个方法可以供我们使用

代码如下:

 1 /**
 2  *
 3  */
 4 package com.sxt.interceptor;
 5
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8
 9 import org.springframework.web.servlet.HandlerInterceptor;
10 import org.springframework.web.servlet.ModelAndView;
11
12 /**
13  * @author ASUS
14  * 第一步创建的拦截器实现了HandlerInterceptor
15  * 第二步:配置拦截器
16  *
17  */
18 public class MyInterceptor implements HandlerInterceptor{
19
20     /**
21      * 该方法是在处理器适配器执行之前执行的,所以请求没有被处理
22      * false:表示是在适配器执行之前执行
23      * true:否,就是放过
24      * handler:表示的地址是java.lang.String com.sxt.controller.MyController.query();该请求
25      */
26     @Override
27     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
28             throws Exception {
29         // TODO Auto-generated method stub
30         System.out.println("preHandle"+handler);
31         return true;
32     }
33
34     /**
35      * 该方法是在返回ModelAndView之前执行的;因此可以在该方法中对返回的ModelAndView做出改变
36      * 包括返回的数据和页面
37      */
38     @Override
39     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
40             ModelAndView modelAndView) throws Exception {
41         // TODO Auto-generated method stub
42         if(modelAndView !=null) {
43             modelAndView.setViewName("/user.jsp");
44         }
45         System.out.println("postHandle");
46     }
47     /**
48      * 该方法是在ModelAndView返回之后执行的,因此只能做一些页面的装饰和渲染,资源的释放,日志管理等
49      */
50
51     @Override
52     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
53             throws Exception {
54         // TODO Auto-generated method stub
55         System.out.println("afterCompletion");
56     }
57
58 }

第二步:在springmvc配置文件中配置拦截器

 1 <!-- 配置拦截器 组-->
 2     <mvc:interceptors>
 3     <!-- 配置拦截器 -->
 4        <mvc:interceptor>
 5           <!-- 配置拦截的映射 拦截当前目录以及子目录-->
 6           <mvc:mapping path="/**"/>
 7            <!-- 注入自定义额拦截器 -->
 8            <bean class="com.sxt.interceptor.MyInterceptor"> </bean>
 9        </mvc:interceptor>
10     </mvc:interceptors>

第三步:测试三个方法的功能:

 1 /**
 2  *
 3  */
 4 package com.sxt.controller;
 5 import org.springframework.stereotype.Controller;
 6 import org.springframework.web.bind.annotation.RequestMapping;
 7 @Controller
 8 public class MyController {
 9     @RequestMapping("/query")
10     public String query() {
11         System.out.println("------------");
12         return "/index.jsp";
13     }
14 }

拦截器使用的方法:

一搞清楚三个方法的作用:可以类比AOP代理的通知的实现

二,拦截器的配置文件

原文地址:https://www.cnblogs.com/liyunfeng-deng/p/10289542.html

时间: 2024-10-13 11:09:35

springmvc之RestFul和拦截器的相关文章

SpringMVC中使用Interceptor拦截器

SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间. 一.定义Interceptor实现类 SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的.在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方式是要定义的Intercep

SpringMVC 中的Interceptor 拦截器

1.配置拦截器 在springMVC.xml配置文件增加: <mvc:interceptors>  <!-- 日志拦截器 -->  <mvc:interceptor>   <mvc:mapping path="/**" />   <mvc:exclude-mapping path="/static/**" />   <bean class="拦截器java代码路径" />  

springmvc学习笔记(20)-拦截器

springmvc学习笔记(20)-拦截器 springmvc学习笔记20-拦截器 拦截定义 拦截器配置 针对HandlerMapping配置 类似全局的拦截器 拦截测试 拦截器应用实现登陆认证 需求 登陆controller方法 登陆认证拦截实现 本文主要介绍springmvc中的拦截器,包括拦截器定义和的配置,然后演示了一个链式拦截的测试示例,最后通过一个登录认证的例子展示了拦截器的应用 拦截定义 定义拦截器,实现HandlerInterceptor接口.接口中提供三个方法. public

SpringMVC中使用Interceptor拦截器详解

SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间. 一.定义Interceptor实现类 SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的.在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方式是要定义的Intercep

SpringMVC学习记录(七)--拦截器的使用

SpringMVC的请求如下面这种图所示: 可以看出所有的请求都要通过Dispatherservlet来接收,然后通过Handlermapping来决定使用哪个控制器,再根据ViewResolver来决定返回哪个视图.从流程来看,Handlermapping就是我们可以实现拦截器的第一种方法.另外还有一种是实现WebRequestInterceptor接口,或者继承其子类. 一.实现HandlerInterceptor接口 实现HandlerInterceptor接口或者继承HandlerInt

springMVC之mvc:interceptors拦截器的用法

1.配置拦截器 在springMVC.xml配置文件增加: <mvc:interceptors> <!-- 日志拦截器 --> <mvc:interceptor> <mvc:mapping path="/**" /> <mvc:exclude-mapping path="/static/**" /> <bean class="拦截器java代码路径" /> </mvc:

基于Springmvc的登录权限拦截器

1.什么是拦截器 拦截器是指通过统一拦截从浏览器发往服务端的请求来完成功能的增强. 使用场景:解决请求的共性问题(如:乱码问题,权限验证问题等) 2.拦截器的基本工作原理 springmvc可以通过配置过滤器来解决乱码问题 拦截器的工作原理和过滤器非常相似 3.实现拦截器 (1)编写拦截器类实现HandlerInterceptor接口 (2)将拦截器注册进Springmvc框架中 4.拦截器的方法介绍 (1)preHandle方法,在请求被处理之前进行调用(返回值:表示我们是否需要将当前的请求拦

springMVC学习(12)-使用拦截器

一.拦截器配置和测试: 1)定义两个拦截器,(要实现HandlerInterceptor接口) HandlerInterceptor1: 1 package com.cy.interceptor; 2 3 import javax.servlet.http.HttpServletRequest; 4 import javax.servlet.http.HttpServletResponse; 5 6 import org.springframework.web.servlet.HandlerIn

SpringMVC 文件上传&amp;拦截器&amp;异常处理

文件上传 Spring MVC 为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver 实现的.Spring 用 Jakarta Commons FileUpload 技术实现了一个MultipartResolver 实现类:CommonsMultipartResovlerSpring MVC 上下文中默认没有装配 MultipartResovler,因此默认情况下不能处理文件的上传工作,如果想使用 Spring 的文件上传功能,需现在上下文中配置 Multip