1.Spring MVC 的运行原理

一个请求在springboot里要经过哪些处理_springMVC

        Spring MVC的执行流程就是一次请求和响应的过程:

  • 首先,用户向服务器发送请求, 请求被前端控制器 DispatherServlet 截获,对 url 进行解析;
  • 前端控制器访问HandlerMapping(处理器映射器)请求获取Handler,HandlerMapping(处理器映射器)返回Handler;
  • 中央处理器请求HandlerAdatper处理器适配器,执行Handler,Handler执行完毕返回一个ModelAndView;
  • ModelAndView通过HandlerAdatper处理器适配器返回ModelAndView给中央处理器;
  • 中央处理器请求ViewResolver视图解析器进行视图解析返回一个View;
  • 渲染视图将model数据转为response响应找到相应的视图进行渲染;
  • 将视图渲染的结果返回给客户端

 

2.Spring MVC 的 Controller 是单例的吗?

是单例的。

3.Spring MVC 的 Controller 是线程安全的吗? 

是线程安全的。

原因:Spring MVC 虽然是单例的, 但是 Spring MVC 是方法级别的,数据传输是通过方法的参数传递的,因此在类中没有共享属性,不存在线程不安全的问题。

4. Spring MVC 和 Struts2的区别、优缺点?

    1)、Spring MVC 开发效率和性能要优于Struts2。

    2)、Spring MVC继承了 Ajax,使用 @ResponseBody注解写入 HTTP 响应正文,一般在异步获取数据时使用,使用@RequestBody 注解则是将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。

    3)、Struts中使用Ajax 比较麻烦。

    4)、Spring MVC 通过前端控制器 DispatcherServlet 完成请求的分发。入口是一个Servlet。

    5)、Struts2 通过 FilterDispatcher(2.1.3以前)或StrutsPrepareAndExecuteFilter(2.1.3和以后)完成请求的分发。入口是一个 Filter。

    6)、Spring MVC 是基于方法级别传递数据。单实例情况下不存在线程安全的问题。因为Spring MVC的参数是在控制器的方法中传递的。

    7)、Struts2是基于类级别传输数据。Struts2单实例情况下有线程并发问题,多实例情况下没有线程并发问题,但是效率又很低。也可以在单实例情况下使用ActionContext类传递数据,但是比较麻烦。

 

5.SpringMVC中都有哪些配置:

视图解析器、放行静态资源、扫描controller、文件上传下载、json类型转换器、自定义拦截器、全局异常处理

 

6.SpringMVC有哪些视图解析器,他们的作用以及配置:

1)InternalResourceViewResolver

2)FreeMarkerViewResolver

3)XmlViewResolver

4)ServletContextTemplateResolver (spring boot themyleaf)

视图解析器的作用是把逻辑视图的名字解析为真正的视图

配置:在SpringMVC的配置文件中配置一个bean,指向视图解析器,然后配置视图的前缀和后缀

 

7.简介Spring MVC中的ModelAndView类?

ModelAndView是控制器处理方法的返回值,既包含模型数据信息,又包含视图信息

 

8.简介Spring MVC中的注解:@RequestMapping,@RequestParam

@RequestMapping:配置请求的url地址,可以用在类上和方法上。

@RequestParam:传递参数

 

9.Spring,SpringMVC ,Struts2,hibernate,mybatis  分别是解决什么问题的?

SpringMVC 和 Struts2 是MVC框架,主要是将系统分为视图、模型、控制器三个层次,负责接收请求,调用业务层接口,给视图层返回需要的数据。降低系统的耦合性。

hibernate 和 mybatis 是持久层框架,解决如何存取数据库中的数据的问题,提高数据操作的效率。

Spring 实现 依赖注入的功能,例如将dao对象注入 service 层,同时 spring 面向切面的特性可以实现程序中事物管理的功能,日志记录的功能等。

 

10.SpringMVC和hibernate的区别,为什么要一起用?

它们的职责不同。 SpringMVC解决的是系统分层架构的问题,负责接收请求,调用业务层接口,给视图层返回需要的数据。

hibernate解决的是数据持久化的问题,可以方便的做数据操作。他们整合在一起提高开发效率。

 

11.Struts2和springMVC的重定向和转发

1)Struts2请求转发实现方式:

  • dispatcher  ——  请求转发到一个页面 (默认),不可以用这种方式转发到一个action
  • chain        ——  一个action请求转发至另一个 action
  • redirect     ——  响应重定向到一个页面/action
  • redirectAction       —— 一个action响应重定向至另一个 action
  • stream        ——  文件下载

2)Springmvc请求转发实现方式:

  • return "redirect:/ toList "; 
  • return ”forward:/toList”;

 

12.如何解决POST请求中文乱码问题,GET的又如何处理呢?

1)在web.xml中加入:

<filter>

    <filter-name>CharacterEncodingFilter</filter-name>

    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

    <init-param>

        <param-name>encoding</param-name>

        <param-value>utf-8</param-value>

    </init-param>

</filter>

<filter-mapping>

    <filter-name>CharacterEncodingFilter</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>

2)以上可以解决post请求乱码问题。对于get请求中文参数出现乱码解决方法有两个:

        (1)修改tomcat配置文件添加编码与工程编码一致,如下:

<ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

         (2)另外一种方法对参数进行重新编码:

String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")

ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码

 

13.什么是Spring MVC框架的控制器?

控制器提供对应用程序行为的访问,通常通过服务接口实现。控制器解析用户的输入,并将其转换为一个由视图呈现给用户的模型。Spring 通过一种极其抽象的方式实现控制器,它允许用户创建多种类型的控制器。

14.SpringMvc特点有哪些?

1)它是基于组件技术的,全部的应用对象,无论控制器和视图,还是业务对象之类的都是java组件,并且和Spring提供的其他基础结构紧密集成

2)可以任意使用各种视图技术,而不仅仅局限于JSP

3)支持各种请求资源的映射策略

4)它应是易于扩展的