springmvc

1、springmvc工作流程

1)用户发送请求到DispatcherServlet

2)DispatcherServlet收到请求,调用HandlerMapping处理器映射器查找具体的Handler。

3)处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器,都返回给DispatcherServlet

4)DispatcherServlet调用HandlerAdapter处理器适配器执行Handler。

5)HandlerAdapter调用具体的处理器(controller,也叫后端控制器)

6)controller执行完成返回ModelAndView。

7)HandlerAdapter将controller的执行结果ModelAndView返回给DispatcherServlet。

8) DispatcherServlet把ModelAndView传给ViewResolver视图解析器。

9) ViewResolver解析后返回具体的view

10) DispatcherServlet根据view进行渲染视图

11) DispatcherServlet响应用户。

我们主要开发的就是Handler。

每个请求来dispatcherServlet,dispatcherServlet通过handlermapping决定哪个controller处理请求,先要在web.xml中配置dispatcherServlet的<servlet>和<servletmapping>

2、@RequestMapping注解用在类上有什么作用?

用在类上,表示类中的所有响应请求的方法都是以该地址作为父路径

3、怎么把某个请求映射到特定的方法上面?

直接在方法上面加上注解@RequestMapping,并且在注解里面写上要拦截的路径。

4、在拦截请求中,想拦截get方式提交的方法,怎么配置

@RequestMapping里加上method = RequestMethod.GET

5、实现重定向和转发:

在方法返回值前面加forward,redirect

6、拦截器:依赖于springmvc或者springboot框架,实现HandlerInterceptor接口。属于面向切面编程(AOP)的一种运用,就是在service或者一个方法前,调用一个方法,或者在方法后,调用一个方法,比如动态代理就是拦截器的简单实现

PreHandle方法:调用时间是Controller方法处理之前。

PostHandle方法:调用前提:preHandle返回true,调用时间:Controller方法处理完之后,返回ModelAndView之前执行,所以在这个方法中可以对ModelAndView进行操作。即用于在发送响应到客户端之前执行操作。 如果controller抛异常,不会走postHandler方法

AfterCompletion方法:调用前提:preHandle返回true,调用时间:DispatcherServlet进行视图的渲染之后。即用于在请求和响应完成之后执行操作。这个方法的主要作用是用于清理资源,打印日志等。

同一个拦截器实例在一个controller生命周期之内可以多次调用。拦截器可以对静态资源的请求进行拦截处理。Filter的执行顺序在Interceptor之前
7、过滤器

它依赖于servlet容器。它可以对几乎所有请求进行过滤。使用过滤器的目的,是用来做一些过滤操作,获取我们想要获取的数据,比如:获取cookie中的信息注入到scope中,或者进行参数检查等。上一个 Filter.doFilter 方法中调用 FilterChain.doFilter 方法将激活下一个 Filter的doFilter 方法,最后一个 Filter.doFilter 方法中调用的 FilterChain.doFilter 方法将激活目标 Servlet的service 方法。springmvc中,Filter需要在web.xml中配置

springmvc中过滤器和拦截器执行顺序,配置方式:https://blog.csdn.net/zxd1435513775/article/details/80556034

8、过滤器和拦截器的区别

1)过滤器是servlet容器中定义的,拦截器是spring环境中定义的。所以过滤器配置在web.xml中,拦截器配置在spring的配置文件中

2)拦截器可以注入IOC容器中的各个bean,而过滤器不行,

3)底层实现不同:过滤器是基于函数回调的,拦截器则是基于Java的反射机制(动态代理)实现的

4)触发时机不同:过滤器Filter是在请求进入容器后,但在进入servlet之前进行预处理。拦截器 Interceptor 是在请求进入servlet后,在进入Controller之前进行预处理的

5)灵活性:从灵活性上说拦截器功能更强大些,Filter能做的事情,他都能做,而且可以在请求前,请求后执行,比较灵活。

8、springboot的WebMvcConfigurer:

WebMvcConfigurer是一个接口,用于配置全局的SpringMVC的相关属性,采用JAVABEAN的方式来代替传统的XML配置文件。自定义 SpringMVC 配置可以通过实现 WebMvcConfigurer 接口来完成

WebMvcConfigurer配置springmvc:
1)addFormatters和configureMessageConverters:注册自定义的Formatter(格式化器)和Convert(转化器如JacksonConverter)
2)addArgumentResolvers:添加自定义方法参数处理器,
HandlerMethodArgumentResolver接口的作用:有两个方法
a、supportsParameter用于判定是否需要处理该参数分解,返回true为需要,并会去调用下面的方法resolveArgument
b、resolveArgument//真正用于处理参数分解的方法,返回的Object就是controller方法上的形参对象

例子:

public final class VisitorAnnotationResolver implements HandlerMethodArgumentResolver {

@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterAnnotation(Visitor.class) != null;
}

@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
return visitor();
}
}

3)addInterceptors:可以自定义写拦截器,并指定拦截路径

9、springmvc restful接口 @PathVariable("urlTail") 这样只能映射abcd这样的,不能映射abcd/edf/hik这样多级路径的

posted @ 2023-02-05 22:07  MarkLeeBYR  阅读(34)  评论(0)    收藏  举报