Spring mvc控制器
可能有些朋友在学习了一段时间的spring之后还是对spring感觉很陌生,spring提供的功能很多,要学习的面很广,如果想一下全部接触到的话可能不会取得很好的效果。个人观点是:由点及面,各个击破。下面把个人spring mvc控制器部分的学习总结如下,希望对大家有所帮助。(不常用的本文不作详细介绍)
简介:spring内建了一个请求驱动的web mvc框架,以一个servlet分发器为中心,将web请求分发到各个不同的处理器进行处理(这点和struts很相似)。这个servlet就是spring提供的DispatcherServlet,它必须在web.xml里配置。当然web.xml里可以配置多个DispatcherServlet,每个DispatcherServlet都会加载和自己相关的web应用上下文(即和应用相关的xml文件)。 例如: 代码: ……
以上的配置表示所有“.do”结尾的请求都交DispatcherServlet来预处理(分发)。在web-inf下,spring默认查找jpet-servlet.xml作为程序应用上下文。<servlet> <servlet-name>jpet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>2<load-on-startup> <servlet-mapping> <servlet-name>jpet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </servlet> …… 控制器: 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。 结束 |
|