Spring mvc控制器2

来源:百度文库 编辑:神马文学网 时间:2024/04/28 07:54:54
Spring mvc控制器 可能有些朋友在学习了一段时间的spring之后还是对spring感觉很陌生,spring提供的功能很多,要学习的面很广,如果想一下全部接触到的话可能不会取得很好的效果。个人观点是:由点及面,各个击破。下面把个人spring mvc控制器部分的学习总结如下,希望对大家有所帮助。(不常用的本文不作详细介绍)
简介:spring内建了一个请求驱动的web mvc框架,以一个servlet分发器为中心,将web请求分发到各个不同的处理器进行处理(这点和struts很相似)。这个servlet就是spring提供的DispatcherServlet,它必须在web.xml里配置。当然web.xml里可以配置多个DispatcherServlet,每个DispatcherServlet都会加载和自己相关的web应用上下文(即和应用相关的xml文件)。
例如:
代码:……

     jpet
     org.springframework.web.servlet.DispatcherServlet
           2

     jpet
     *.do


……以上的配置表示所有“.do”结尾的请求都交DispatcherServlet来预处理(分发)。在web-inf下,spring默认查找jpet-servlet.xml作为程序应用上下文。

控制器:
Spring将web控制器视为普通的java对象,因此它可以在web上下文里配置,这就意味着他能够和整个spring容器无缝整合,并可以受益spring带来的一切优势。
Controller接口:Spring默认的核心控制器被抽象为一个简单的控制器接口Controller,该接口仅定义了一种方法handleRequest(request,response),直接实现了该接口的控制器具有最简单的功能,比如一个页面不需要表单的时候,他就可以实现给接口具有了控制器的功能来处理一些业务。
AbstractController抽象控制器基类:
   该类定制了一些基本的web控制器功能,spring还提供了一些web控制器的基类,这些类都继承与该类。
AbstractCommandController命令控制器抽象基类:
     该类提供了一些基本的命令模板方法,允许直接继承并使用它。Spring还提供了一些很好的命令控制器基类(Command Controller),他们都继承于AbstractController。
  AbstractFormController抽象的表单控制器:
   该类有功能非常强大也是最常用的两个子类:普通表单控制器SimpleFormController和向导式表单控制器AbstractWizardFormController。我们分别简介如下:
   普通表单控制器:
顾名思义他用来处理表单控制器流程,控制器要继承SimpleFormController,其xml配置和普通bean配置相同,在此就不详说了。我们主要来看看他的流程。
你可以选择继承的几个常用方法有:
formBackingObject(request); 一般用来预创建表单实例,在页面加载之前会被调用。
onBindAndValidate(request,command,erros);进行手工的数据邦定和验证,是否调用该方法还和其他配置有关(后面说明)。
     referenceDate(request);向模型中放置一些数据,用以表单视图的显示。
     onSubmit(request,response,command,errors);表单的递交处理。
     控制器还有一些属性需要设置,这些属性如果不在xml里配置的话,可以在程序中设置:
     setSessionForm(boolean flag):
默认情况下,每次请求都会创建一个表单对象。如果需要通过session保存或复用已经创建的表单,需要将sessionForm的属性设为true;因此在首次请求时表单对象会被创建并置于session中,当表单正确提交后,会从session中删除该表单对象。
      setValidateOnBinding(boolean flag):
         该属性指定了是否在表单控制器进行数据邦定的时候就进行验证,如果要调用上面提到的onBindAndValidate方法,那么将其属性设为false。
      setCommadName(String name):
         指定特定的表单名,它可在视图中通过spring特有的标签进行引用,默认的表单名“command”。
      setFormView(String view):
         当以get方式递交时,表单控制器会依据view指定的值进行转发。
  向导式表单控制器:
   它的主要功能是允许多个表单共用一个表单对象,与普通表单的区别如下:
     A:表单对象的作用域必须是session,即sessionForm必为true;
     B:表单数据邦定的时不会进行数据验证,即validateOnBinding比为false;
     C:可在多个表单视图间进行切换,所以验证不是针对某个表单对象,而是特定的表单页面。
     D:具有明确的工作流概念模版方法,如结束处理:processFinish()。取消请求:processCancel()。验证特定页面:validatePage()。
     说明:
向导所需要的多个视图需要通过setPages(String[] pages),以数组的形式指定。各视图的导向标示用数组下标来表示,提供了专门的处理方法getTargetPage()。
表单的正式递交是通过特殊的url请求参数驱动的,比如processFinish()方法由“aa.do?_finish=true”触发。与此相关的页面工作流相关的字符常量还有:_cancel,_page。

结束