目前的项目应用了Spring MVC框架,总结一下实际应用中这个框架是如何发挥作用的,下图是处理流程。参考
1: 首先用户发送请求信息,例如url:http://ggg-admin.inta.sit.fan.com/advertisement/query,被前端控制器DispatcherServlet捕获,问题来了,怎么捕获的呢?看配置文件web.xml:
<servlet>
<servlet-name>ggg_admin</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:admin-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<!-- <async-supported>true</async-supported> -->
</servlet>
url和配置文件中的两个一样的ggg_admin,这就是DispatcherServlet的名字,通过一系列配置,这个url被叫做ggg_admin的前端控制器捕获。
2: DispatcherServlet——>HandlerMapping, HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;
3: DispatcherServlet——>HandlerAdapter.Controller(HandlerAdapter 将会把Controller包装为适配器,HandlerAdapter 将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理);
怎么找到Controller呢?看url里的后半段“/advertisement/query”,通过/advertisement找到Controller,通过/query找到方法,注解@RequestMapping实现了地址映射,参数method决定拦截get或者post方式提交的方法。
@Controller
@RequestMapping(value = "/advertisement")
@LoginRequired
public class AdvertisementController extends BaseController{
@RequestMapping(value = "/query", method = {RequestMethod.POST, RequestMethod.GET})
public ModelAndView query(@ModelAttribute("adEntityQuery")
AdvertisementEntity advertisementEntity) {
Map<String, Object> model= new HashMap<String, Object>();
/*
* 第4步:调用业务处理方法(Service),把返回的数据放进map里
* 并返回一个ModelAndView对象(包含模型数据、逻辑视图名);
*/
return new ModelAndView(AD_HOME_PAGE, model);
}
}
PS:个人理解是前端控制器DispatcherServlet和页面控制器Controller两部分共通组成了控制器。DispatcherServlet是整个框架的核心入口类。
5: ViewResolver将把逻辑视图名(AD_HOME_PAGE)解析为具体的View,通过这种策略模式,很容易更换其他视图技术。
6:View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;
7 :返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。
其他的细节问题:
1 如果在拦截请求中,想拦截提交参数中包含”type=test”字符串,可以在@RequestMapping注解里面加上params=”type=test”。
2 从前台传入拦截的方法里少量参数,直接在方法的形参里面声明这些参数就 可以,但必须名字和传过来的参数一样。如果前台有很多个参数传入,那么可以写一个对象,属性包含这些参数,而且直接在方法中声明这个对象,SpringMvc就自动会把属性赋值到这个对象里面。
3 SpringMvc怎么和AJAX相互调用
通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象
具体步骤如下
1)加入Jackson.jar
2)在配置文件中配置json的映射
3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解
本文详细介绍了Spring MVC在实际项目中的应用,从用户请求开始,讲解了DispatcherServlet如何捕获请求,HandlerMapping如何映射处理,HandlerAdapter如何调用Controller,以及ViewResolver如何解析逻辑视图并进行渲染。同时,提到了如如何拦截特定参数请求,如何处理前端传入的参数,以及Spring MVC与AJAX交互时如何利用Jackson进行JSON转换。
1501

被折叠的 条评论
为什么被折叠?



