springmvc面试题

1.springmvc是一个什么框架

在视图和控制器之间解决问题的框架
1.传值:
①视图向控制器传参:对象传参,逐个传参(@RequestParam)
当前端传来json时(@RequestBody),路径传参
②控制器向视图传值:json(@ResponseBody)
Model,ModelAndView 实质使用request传值
2.JSON的转换 jackson
3.简化了原有servlet开发,把请求和方法进行了映射

2.springMVC的工作流程

springmvc面试题_第1张图片
用户发送请求后,前端控制器DispatcherServlet会进行拦截,因为DispatcherServlet一般情况下是饿汉式的,服务器启动,它会遍历IOC容器中的bean,获取每一个controller中的所有方法访问的url,然后将url和controller保存到一个map中,当请求到达DispatcherServlet时,会调用HandlerMapping处理器映射器,处理器映射器根据请求url在刚才所说的map中找到具体的处理器并返回给DispatcherServlet这时候返回给DispatcherServlet是一个类级别的对象,然后DispatcherServlet把这个对象在传给HandlerAdapter处理器适配器,HandlerAdapter通过url拼接的方式找到对应的方法,然后对其进行参数绑定,数据转换,验证等等,在将其传到service层dao层最后将modelandview返回到DispatcherServlet,DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析,
ViewResolver解析后返回具体View,DispatcherServlet对View进行渲染视图,DispatcherServlet响应用户。

3.springMVC的优化

1.Controller尽量使用单例,可以减少创建对象和回收对象的开销,如果Controller的类变量和实例变量可以以方法形参声明,那么就不用使用类变量和实例变量,可以避免线程安全问题
2.形参要加上@RequestParam注解,避免使用asm框架读取class文件获取方法参数名的过程。

4…SpringMVC的拦截器和过滤器有什么区别?执行顺序?

1.拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
2.拦截器只能对action请求(DispatcherServlet 映射的请求)起作用,而过滤器则可以对几乎所有的请求起作用。
3.拦截器可以访问容器中的Bean(DI),而过滤器不能访问(基于spring注册的过滤器也可以访问容器中的bean)。

执行顺序
springmvc面试题_第2张图片

5.跨域方式解决

1、jsonp方式
利用 script 标签没有跨域限制的漏洞,网页可以得到从其他来源动态产生的 JSON 数据。JSONP 请求一定需要对方的服务器做支持才可以。缺点是仅支持 get 方法具有局限性,不安全可能会遭受 XSS 攻击。
2、cors方式 :后台使用 @CrossOrigin
​ 原理:判断 @CrossOrigin 允许的请求的域名、端口号、协议不同的网络请求和实际的网络请求是否一致,如果一致,就在响应数据时,更改一个状态,浏览器允许接收到响应的数据
@CrossOrigin 利用spring拦截器,向response对象里添加 Access-Control-Allow-Origin响应头信息,告知客户端允许该域的访问,浏览器接收后,判断,我的域名信息是服务器允许的,不在拒绝数据的响应

你可能感兴趣的:(java,开发语言)