1.Spring MVC 的运行原理
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)它应是易于扩展的