spring mvc常见面试题

目录

工作流程:

spring mvc的常用注解:

分别说一下这些注解的作用:

spring mv跨域问题:

Spring MVC怎么和AJAX相互调用的:

spring mvc中的拦截功能:

Spring MVC的异常处理:

mvc中的组件:


 

工作流程:

        用户发送请求到前端控制器DispatcherServlet,前端控制器收到请求后,调用处理器映射器handlerMapping,来获取handler并返回给前端控制器。
        接着前端控制器会调用处理器适配器handlerAdapter,来执行handler,handler执行完毕后会返回modelandview,这个返回值会由处理器适配器接收并返回给前端控制器。
        然后呢前端控制器会把modelandview传递给视图解析器进行解析,解析完毕后会得到一个具体的view,前端控制器会对这个view进行数据填充,填充完毕后就会响应给用户。

spring mvc的常用注解:

        @Controller,@RestController,@RequestMapping @getMapping @PostMapping

        @PathVariable @RequestParam @RequestBody @ResponseBody

分别说一下这些注解的作用:

        @requestMapping:是一个处理用户发送的请求的注解,可用于类或方法上。用于类上,则表示类中的所有响应该请求的方法都是以@requestmapping中的vlaue中的值作为父路径。
        @getmapping和@PostMapping,@getMapping是@RequestMapping里面的一种具体的请求方式,作用跟requestMapping差不多,但是getMapping就只能接收get请求,postMapping也是只能接收post请求
        @PathVariable:获取url地址中占位符的值
        @RequestParam:获取url地址上的请求参数
        @RequestBody的作用:获取http请求中的json数据,将json转换为java对象
        @ResponseBody的作用:将方法的返回值以json格式写到响应体中,不会进行逻辑视图解析而造成的页面跳转

 

spring mv跨域问题:

  写一个配置类,实现WebMvcConfigurer接口,重写addCorsMappings方法

@Override
    public void addCorsMappings(CorsRegistry registry) {
        // 设置允许跨域的路由
        registry.addMapping("/**")
                // 设置允许跨域请求的域名
                .allowedOriginPatterns("*")
                // 是否允许证书(cookies)
                .allowCredentials(true)
                // 设置允许的方法
                .allowedMethods("*")
                // 跨域允许时间
                .maxAge(3600);
    }

Spring MVC怎么和AJAX相互调用的:

        用responsebody注解,这样可以把方法的返回值以json的形式写到响应体中,而且不会经过视图解析器解析而造成页面跳转

spring mvc中的拦截功能:

        写一个类去实现HandlerInterceptor接口,重写preHandler方法,在方法里面写请求放行逻辑,然后写一个配置类实现WebMvcConfigurer接口,重写方法addInterceptors方法,把拦截器加进去,然后在方法里面填写拦截路径以及放行路径

 

        拦截路径的时候,不用写 servlet.context-path对应的值

0919f52b4bf648148b5f117a91572445.png

Spring MVC的异常处理:

          把异常抛到controller层,然后用ControllerAdvice跟ExceptionHandler两个注解来进行统一处理。

        在前后端分离的时候,一定要加@responsebody注解,要不然会被视图解析器解析

mvc中的组件:

        1,前端控制器dispatcherServlet:作用就是:接收请求,响应结果,相当于一个转发器,有了前端控制器就可以减少其他组件之间的耦合度,而且spring mvc框架是围绕着这个dispatcherServlet来设计的,它可以处理所有的http请求和响应
        2,处理器映射器(handlerMapping): 根据url来寻找handler
        3,处理器适配器(handlerAdapter):handler需要根据处理器适配器要求的规则去编写,这样子处理器适配器才能正确的去执行handler
        4,处理器(handler)
        5,视图解析器(viewResolver):对视图进行解析,根据视图的逻辑名解析成为真正的视图view
        6,视图view:view是一个接口,它的实现类的支持不同的视图类型

preHandle、postHandle与afterCompletion的区别

preHandle

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

执行顺序:链式Intercepter情况下,Intercepter按照声明的顺序一个接一个执行

若返回false,则中断执行,注意:不会进入afterCompletion

 

postHandle

调用前提:preHandle返回true

调用时间:Controller方法处理完之后,DispatcherServlet进行视图的渲染之前,也就是说在这个方法中你可以对ModelAndView进行操作

执行顺序:链式Intercepter情况下,Intercepter按照声明的顺序倒着执行。

备注:postHandle虽然post打头,但post、get方法都能处理

 

afterCompletion

调用前提:preHandle返回true
调用时间:DispatcherServlet进行视图的渲染之后
多用于清理资源

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值