Spring控制器装载客户端数据浅析

时间:2021-08-24 08:32:58

DispatcherServlet将请求分发转交给doDispatch之后,doDispatch调用HandleAdapter(控制适配器),控制适配器就是控制器的代理,用通俗的话说就是,适配器中封装了一个控制器.控制适配器调用Controller(控制器接口)的方法HandleRequest方法,Controller(控制器)将调用实现Controller接口的子类的方法.这样就可以调用AbstractFormController(该类是Controller的实现), handleRequest方法调用handleRequestInternal方法,所以在AbstractFormController类中重载了handleRequestInternal方法.

所有具体控制器的业务处理(业务处理即每一个具体控制器的真正功能.)都在该方法中实现.

首先判断是否来自表单提交(利用isFormSubmission,即是判断是否reqest.getMethodpost),如果不是,则调用showNewForm方法,该方法不是展示一个新Form,当然也是可以这么理解的,真正意义是,showNewForm利用当前的FormRequest返回一个对象,对象中包含校验器.

       下面我们理一下show~~(showNewFormshowForm方法关系.我们假定AbstractFormController是父类,SimpleFormController子类)方法.

       首先从父类的showNewForm(request, response)方法开始,其调用关系如下(依次向下调用)

注意:红色代码的参数实现了command(Object对象类型)和客户端数据的绑定.参考代码

showNewForm(request, esponse)(父类)

showForm(request, response, getErrorsForNewForm(request))(父类)

showForm(HttpServletRequest request, HttpServletResponse response, BindException errors)(父类)

showForm(HttpServletRequest request, HttpServletResponse response, BindException errors)(子类)

showForm(request, response, errors, null)(子类)

showForm(HttpServletRequest request,HttpServletResponse response,BindException errors,Map controlModel) (子类)

showForm( HttpServletRequest request, BindException errors, String viewName, Map controlModel) (父类)

 

(未完,待续)