SpringMVC常见面试问题

1.什么是SpringMVC,简单介绍一下SpringMVC?

SpringMVC是Spring框架中的一个模块,是一个基于MVC架构的web框架,它和Struts2一样都属于表现层的框架 ,地位和功能等同于Struts2。或者说就是用来替换Struts2的。

2.简单描述一下SpringMVC的执行流程?

执行流程
  1. 用户发送请求到前端控制器DispatcherServlet
  2. DispatcherServlet收到请求调用HandlerMapping(请求处理器映射器)
  3. 处理器映射器找到具体的处理器,生成处理器对象以及处理器拦截器(如果有则生成)一并返回给DispatcherServlet
  4. DispathcerServlet调用HandlerAdapter处理器适配器
  5. HandlerAdapter适配器经过适配调用具体的处理器(Controller,也叫后端控制器)
  6. Controller执行完成返回ModelAndView
  7. HandlerAdapter将controller执行结果ModelAndView返回给DispathcerServlet前端控制器
  8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器
  9. ViewReslover解析后返回具体View
  10. DispathcerServlet根据View进行渲染视图(将模型数据填充至视图中)
  11. DispatcherServlet响应用户

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

在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>

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

修改tomact配置文件添加编码与工程编码一致:

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

另外一个方法对参数进行重新编码:

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

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

4.SpringMVC与Struts2的主要区别?

  1. SpringMVC的入口是一个Servlet即前端控制器,而struts2入口是一个filter过滤器
  2. SpringMVC是基于方法开发,传递参数是通过方法形参,可以设计为单例或者多例,struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
  3. Struts采用值栈存储请求和响应的数据,通过OGNL存储数据,SpringMVC通过参数解析器是将request对象内容进行解析成方法形参,将响应数据和页面封装ModelAndView对象,最后又将模型数据通过request对象传输到页面。JSP视图解析器默认使用JSTL。