【模块七】Spring全家桶篇SpringMVC篇☞参考答案
- 简介
1.什么是Spring MVC?
Spring MVC是一个基于Java,运用MVC设计模式,实现Model,View,Controller分离的请求驱动类型的轻量级Web框架。
2.SpringMVC的流程
(1)用户发送请求至前端控制器DispatcherServlet;
(2) DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
(3)处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
(4)DispatcherServlet 调用 HandlerAdapter处理器适配器;
(5)HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);
(6)Handler执行完成返回ModelAndView;
(7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
(8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
(9)ViewResolver解析后返回具体View;
(10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
(11)DispatcherServlet响应用户。
3. Spring MVC的主要组件
(1)前端控制器 DispatcherServlet(不需要程序员开发)
作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。
(2)处理器映射器HandlerMapping(不需要程序员开发)
作用:根据请求的URL来查找Handler
(3)处理器适配器HandlerAdapter
注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。
(4)处理器Handler(需要程序员开发)
(5)视图解析器 ViewResolver(不需要程序员开发)
作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view)
(6)视图View(需要程序员开发jsp)
View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等)
- SpringMVC和Struts2的区别
(1)spring mvc的入口是一个servlet即前端控制器(DispatchServlet),而struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)。
(2)spring mvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
(3)Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。
- Spring MVC常用注解
@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。
@RequestBody:注解实现接收http请求的json数据,将json转换为java对象。
@ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户
@Resource 用于注入,默认按名称装配
@Autowired 用于注入,默认按类型装配
Spring常用注解
1.定时任务:@Scheduled(cron = "0 */3 * * * ?"):每三分钟执行一次
注解原理:
注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象。通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池
- Spring MVC拦截器和JAVA过滤器的区别
相同点:都能实现权限校验功能,起到拦截作用
不同点:
规范不同:过滤器依赖于servlet容器,基于函数回调实现;拦截器依赖于web框架,基于java反射机制实现
拦截范围不同:过滤器可以对几乎所有请求进行过滤;拦截器只能对controller中的方法进行拦截
执行时间点不同:过滤器是运行在所有的Servlet之前,拦截器是运行在DispatcherServlet之后、Controller之前的
配置文件不同:过滤器是配置在web.xml中,拦截器是配置在spring的配置文件中
示例:
<!—配置过滤器 -->
<filter>
<filter-name>testFilter1</filter-name>
<filter-class>cn.zifangsky.filter.TestFilter1</filter-class>
</filter>
<filter-mapping>
<filter-name>testFilter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!—配置拦截器 -->
<mvc:interceptors>
<!-- 对所有请求都拦截,公共拦截器可以有多个 -->
<bean name=”logInterceptor” class=” com. common.http.interceptror.LoggingInterceptor”/>
<mvc:interceptor>
<!-- 对报表进行拦截 -->
<mvc:mapping path="/reportToDruid "/>
<!-- 特定请求的拦截器只能有一个 -->
<bean class="cn.zifangsky.interceptor.TestInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
以上是 【模块七】Spring全家桶篇SpringMVC篇☞参考答案 的全部内容, 来源链接: utcz.com/z/512655.html