1. Spring MVC 的优点
- 它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是 java 组件。并且和 Spring 提供的其他基础结构紧密集成
- 不依赖于 Servlet API(目标虽是如此,但是在实现的时候确实是依赖于 Servlet 的)
- 可以任意使用各种视图技术,而不仅仅局限于 JSP
- 支持各种请求资源的映射策略
- 易于扩展
- 与Spring框架集成(如IoC容器、AOP等);
- 清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射 (handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器 (ViewResolver)。
2.Spring MVC 运行流程
Spring mvc将所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求 进行真正的处理工作。
DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.
DispatcherServlet请请求提交到目标Controller
Controller进行业务逻辑处理后,会返回一个ModelAndView
Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象
视图对象负责渲染返回给客户端。
3.Spring MVC 启动流程
在 web.xml 文件中给 Spring MVC 的 Servlet 配置了 load-on-startup,所以程序启动的时候会初始化 Spring MVC,在 HttpServletBean 中将配置的 contextConfigLocation 属性设置到 Servlet 中,然后在 FrameworkServlet 中创建了 WebApplicationContext, DispatcherServlet 根据 contextConfigLocation 配置的 classpath 下的 xml 文件初始化了 Spring MVC 总的组件。
4.SpringMVC 实现拦截器过程?
- 一种是实现接口
- 另外一种是继承适配器类,然后在 SpringMVC 的配置文件中配置拦截器即可
<!-- 配置 SpringMvc 的拦截器 -->
<mvc:interceptors>
<!-- 配置一个拦截器的 Bean 就可以了 默认是对所有请求都拦截 -->
<bean id="myInterceptor" class="com.et.action.MyHandlerInterceptor"></bean>
<!-- 只针对部分请求拦截 -->
<mvc:interceptor>
<mvc:mapping path="/modelMap.do" />
<bean class="com.et.action.MyHandlerInterceptorAdapter" />
</mvc:interceptor>
</mvc:interceptors>
5.SpringMVC 怎么和 AJAX 相互调用?
通过 Jackson 框架就可以把 Java 里面的对象直接转化成 Js 可以识别的 Json 对象。
具体步骤如下 :
加入 Jackson.jar
在配置文件中配置 json 的映射
在接受 Ajax 方法里面可以直接返回 Object,List 等,但方法前面要加上@ResponseBody 注解
6.Spring MVC的控制器是不是单例模式,如果是,有什么问题,怎么解决?
是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性 能的,解决方案是在控制器里面不能写字段。
7. 如何解决POST请求中文乱码问题,GET的又如何处理呢?
7.1 解决post请求乱码问题:
在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8;
<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>
7.2 解决Get请求乱码问题:
get请求中文参数出现乱码解决方法有两个:
- 修改tomcat配置文件添加编码与工程编码一致,如下:
<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是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。
8.MVC是什么?MVC设计模式的好处有哪些?
MVC是一种设计模式(设计模式就是日常开发中编写代码的一种好的方法和经验 的总结)。模型(model)-视图(view)-控制器(controller),三层架构的 设计模式。用于实现前端页面的展现与后端业务数据处理的分离。
MVC设计模式的好处:
分层设计,实现了业务系统各个组件之间的解耦,有利于业务系统的可扩展 性,可维护性。
有利于系统的并行开发,提升开发效率。
9.SpingMvc中的控制器的注解一般用哪个,有没有别的注解可以替代?
一般用@Controller注解,也可以使用@RestController,@RestController 注解相当于@ResponseBody + @Controller,表示是表现层,除此之外,一般不用别的注解代替。
好了,关于【SpringMVC启动流程&运行流程-解决乱码问题的方案】就先学习到这里,更多的内容持续创作更新中。