SpringMVC回顾
目录:
6、当一个方法向AJAX返回特殊对象,譬如Object,List等,需要做什么处理
1、简单的谈一下SpringMVC的工作流程?
1.发送请求
请求交给中央控制器,中央控制器不处理业务,只负责接收请求和响应请求
2.调用HandleMapping找到handler
HandleMapping里面记载了请求路径与方法之间的对应关系,例如:
Map.put(url,handlerchain);
3.返回处理器执行链
执行链包含handle对象和handlerintercepter对象,返回给DispatcherServlet。
4.通过处理器适配器调用具体的处理器
handler类型有很多种,DispatcherServlet自己无法直接处理,必须调用handlerAdapter
5.调用处理器
转换成具体的handler,并执行(先执行拦截器,最后执行handler)。
6.返回modelAndView
执行完后返回modelAndView,modelAndView包含数据模型和逻辑视图
7.将modelAndView交给DispatcherServlet
handlerAdapter处理不了modelAndView,必须交给DispatcherServlet处理
8:调用视图解析器
DispatcherServlet也处理不了modelAndView,必须调用viewResolver将modelAndView对象交给viewResolver
9.返回view给DispatcherServlet
viewResolver处理完后返回view对象交给DispatcherServlet
10.渲染视图
DispatcherServlet拿到view对象将jsp转换成html返回给客户端
整个过程中有哪些重要组件?
以下组件通常使用框架提供实现:
- a.DispatcherServlet:前端控制器
用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。
- b.HandlerMapping:处理器映射器
HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
- c.Handler:处理器
Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。
- d.HandlAdapter:处理器适配器
通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
- e.View Resolver:视图解析器
View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
- f.View:视图
springmvc框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等。我们最常用的视图就是jsp。
一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。
说明:在springmvc的各个组件中,处理器映射器、处理器适配器、视图解析器称为springmvc的三大组件。
2、SpringMVC与Struts2的主要区别?
1、springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过虑器。
2、springmvc是基于方法开发,传递参数是通过方法形参,可以设计为单例或多例(建议单例);
struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
3、@RequestMapping注解用在类上面有什么作用
用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
4、 @RequestMapping高级使用
@RequestMapping可以指定
请求路径 请求参数 请求方法 请求头 指定content-type
Params属性
@RequestMapping (value= "testParams" , params={ "param1=value1" , "param2" , "!param3" }) public String testParams() { System. out .println( "test Params..........." ); return "testParams" ; } |
Headers属性
@RequestMapping (value= "testHeaders" ,headers={ "host=localhost" , "Accept" }) public String testHeaders() { return "headers" ; } |
Consumes属性
指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
Produces属性
指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
5、SpringMVC怎么样设定重定向和转发的
在返回值前面加"forward:"就可以让结果转发,譬如"forward:user.do?name=method4" 在返回值前面加"redirect:"就可以让返回值重定向,譬如"redirect:http://www.baidu.com"
6、当一个方法向AJAX返回特殊对象,譬如Object,List等,需要做什么处理
@Responsebody
@RestController等价于@controller @ Responsebody
7、SpringMvc里面拦截器是怎么写的
有两种写法,一种是实现接口(HandlerInterceptor),另外一种是继承适配器类(HandlerInterceptorAdapter 抽象类),然后在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>
8、拦截器常见应用场景
1、日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV(Page View)等。
2、权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面;
3、性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录);
4、通用行为:读取cookie得到用户信息并将用户对象放入请求request对象中
9、全局异常处理
实现HandlerExceptionResolver接口
resolveException
springmvc.xml文件配置实现类
10、springmvc跳转页面返回值类型
String
ModelAndView
Void