Spring MVC实际项目中的应用

目前的项目应用了Spring MVC框架,总结一下实际应用中这个框架是如何发挥作用的,下图是处理流程。参考
Spring MVC实际项目中的应用_第1张图片
1: 首先用户发送请求信息,例如url:http://ggg-admin.inta.sit.fan.com/advertisement/query,被前端控制器DispatcherServlet捕获,问题来了,怎么捕获的呢?看配置文件web.xml:

<servlet>
        <servlet-name>ggg_adminservlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
        <init-param>
            <param-name>contextConfigLocationparam-name>
            <param-value>classpath:admin-servlet.xmlparam-value>
        init-param>
        <load-on-startup>1load-on-startup>
        
    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 model= new HashMap();
        /*
 * 第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)