SpringMVC学习笔记文档格式.docx

上传人:b****6 文档编号:21086193 上传时间:2023-01-27 格式:DOCX 页数:43 大小:543.92KB
下载 相关 举报
SpringMVC学习笔记文档格式.docx_第1页
第1页 / 共43页
SpringMVC学习笔记文档格式.docx_第2页
第2页 / 共43页
SpringMVC学习笔记文档格式.docx_第3页
第3页 / 共43页
SpringMVC学习笔记文档格式.docx_第4页
第4页 / 共43页
SpringMVC学习笔记文档格式.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

SpringMVC学习笔记文档格式.docx

《SpringMVC学习笔记文档格式.docx》由会员分享,可在线阅读,更多相关《SpringMVC学习笔记文档格式.docx(43页珍藏版)》请在冰豆网上搜索。

SpringMVC学习笔记文档格式.docx

/bean>

②.通过参数控制器访问页面流程

解析:

也可以直接在参数控制器里定义name属性,直接通过name属性地址来访问。

如下:

name="

/mmmm.do"

但要注意的是:

配置文件里必须有BeanNameUrlHandlerMapping;

如果配置了其他映射的情况下,默认映射将会被覆盖;

以name属性;

来访问将会失败。

命令控制器

①.创建自定义命令控制器接收url传递过来的参数并封装到javabean。

publicclassMyCommandControllerextendsAbstractCommandController{

protectedModelAndViewhandle(HttpServletRequestrequest,

HttpServletResponseresponse,Objectcommand,BindExceptionerrors)

throwsException{

Useru=(User)command;

System.out.println(u.getUserName()+"

||"

+u.getPassword());

returnnewModelAndView("

"

user"

u);

}

}

②.创建javabean类

publicclassUser{

privateIntegerid;

privateStringuserName;

privateStringpassword;

privateIntegerage;

publicIntegergetId(){

returnid;

publicvoidsetId(Integerid){

this.id=id;

publicStringgetUserName(){

returnuserName;

publicvoidsetUserName(StringuserName){

this.userName=userName;

publicStringgetPassword(){

returnpassword;

publicvoidsetPassword(Stringpassword){

this.password=password;

publicIntegergetAge(){

returnage;

publicvoidsetAge(Integerage){

this.age=age;

③.在springmvc里面有如下配置。

comm"

/comm.do"

cn.itcast.controller.MyCommandController"

<

commandClass"

cn.itcast.domain.User"

④.使用简单url进行访问,参数被封装进javabean。

http:

//localhost:

8080/mysm/comm.do?

id=1&

userName=zhangsan&

password=123&

age=13

①.

首先:

springMVC有三个映射器,如果不定义映射Mapping,那么就会使默认:

●<

beanclass="

org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"

也就是说:

上面这个定义和不定义都是一样的。

不定义:

testController"

/hello.do"

cn.itcast.controller.TestController"

直接使用:

hello.do来访问。

!

--简单的url映射处理器-->

org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"

<

mappings"

props>

<

propkey="

/hello1.do"

testController<

/prop>

/a.do"

/props>

<

那么上面的这个映射配置:

表示多个*.do文件可以访问多个Controller或者一个Controller。

前提是:

都必须依赖:

--/WEB-INF/jsp/index.jsp-->

org.springframework.web.servlet.view.InternalResourceViewResolver"

prefix"

/WEB-INF/jsp/"

suffix"

.jsp"

●第三个Mapping:

org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"

这个Mapping一配置:

我们就可以使用Contrller的[类名.do]来访问这个Controller.

访问形式如下:

8080/myspringmvc/testController.do

或者

8080/myspringmvc/testController

这样的形式都可访问到index页面。

也可以在前台传入参数:

8080/myspringmvc/testController1.do?

name=hhhh

在后台接收如下:

Stringname=req.getParameter("

name"

);

System.out.println("

这里是springmvc!

"

name);

在页面使用EL表达式获取值。

1.SpringMvc的三个控制器。

●命令控制器CommandController(命令控制器)

publicclassMyCommandControllerextendsAbstractCommandController{

publicMyCommandController(){

this.setCommandClass(User.class);

this.setCommandName("

}

@Override

//TODOAuto-generatedmethodstub

System.out.println(u.getName());

command"

--命令控制器-->

bean

name="

/command.do"

页面就可以采用如下方式进行获取:

returnnull;

配置文件:

beanname="

说明:

在domain包里面定义User类:

并为User的name,sex,age属性生成setter,

Getter方法。

当我们使用:

command.do访问时,使用get请求:

name=oo&

sex=man&

age=17

后台继承AbstractCommandController这个类的命令控制器将会自动

获取并封装这个三个值。

并放入command。

●表单控制器FormController(表单控制器)

publicclassMyFormContrllerextendsSimpleFormController{

publicMyFormContrller(){

//TODOAuto-generatedconstructorstub

protectedvoiddoSubmitAction(Objectcommand)throwsException{

System.out.println(u.getName()+"

kkkooo"

super.doSubmitAction(command);

--表单控制器-->

/form.do"

cn.itcast.controller.MyFormContrller"

successView"

success"

formView"

form"

24.2.4 AbstractWizardFormController

(1)

在使用Eclipse或者Netbeans之类的IDE进行开发的时候,如果我们新建一个工程或者文件,这些IDE通常都会提供多步的向导帮助我们一步一步完成相应部件的创建。

在某些Web应用程序中,也存在类似的操作场景,比如,要注册某个网站的会员,注册过程可能就包括多步,每一步会提示输入某一方面的信息,以帮助我们简化操作流程。

对于这种向导式的简单的多页面流程实现,我们可以求助于AbstractWizardFormController,它可以帮助我们简化类似场景的开发工作。

注意 实际上,AbstractWizardFormController也只是面向简单的多页面流程处理,它所管理的多个页面表单中的数据,最终都是绑定到一个Command对象上的。

只不过是每个页面绑定一部分而已。

如果要在Web应用程序中处理更复杂的页面流程交互,建议集成SpringWebFlow(http:

// 

www.springframework.org/Webflow),ExpertSpringMVCandWebFlow一书对SpringWebFlow进行了详尽的介绍。

1.AbstractWizardFormController浅析

说白了,AbstractWizardFormController实现类就是要处理组成向导流程的所有页面所发起的Web请求。

但与SimpleFormController处理单个表单页面不同,AbstractWizardFormController要管理多个表单页面的显示以及提交数据的处理工作。

图24-12对AbstractWizardFormController如何管理整个向导流程给出了一个概况,我们对AbstractWizardFormController的认识将在这个的基础上展开。

 

(点击查看大图)图24-12 AbstractWizardFormController的Web请求处理结构

Page1、Page2和Page3是组成向导流程的页面,这些页面提交的Web请求将统一由我们的AbstractWizardFormController接收并处理。

但AbstractWizardFormController如何知道当前该显示哪个页面?

它又是如何判断哪个页面提交的请求是最终的结束向导流程的Web请求呢?

AbstractWizardFormController将根据每个页面请求所包含的特定参数来决定如何对当前请求进行处理,这些特定的参数我们可以分为如下三类。

PARAM_TARGET参数。

PARAM_TARGET参数用于指定目标页面,它的形式为_target后缀页面索引,比如_target0、_target1等。

当AbstractWizardFormController实现类接收到这种类型的参数的时候,它只是将当前请求中的相应参数绑定到Command对象上,然后根据PARAM_TARGET参数后缀的目标页面索引显示相应的页面。

PARAM_FINISH参数。

PARAM_FINISH参数的表示形式为_finish。

如果AbstractWizard-FormController实现类接收到该参数,则表示整个向导流程结束,可以调用process-Finish(..)方法处理最终的表单数据,并将页面转向任何一个想要转到的页面。

PARAM_CANCEL参数。

PARAM_CANCEL参数的表示形式为_cancel。

当接收到该参数的时候,表示用户要取消当前的向导流程。

默认情况下,AbstractWizardFormController不支持该参数的处理,但我们可以通过覆写processCancel(..)方法来改变这种默认行为。

唯一要做的,可能只是返回一个ModelAndView实例,其中只包含了一个逻辑视图名。

实际上,AbstractWizardFormController实现类本质上依然是像SimpleFormController那样,分两个阶段来管理表单页面的处理,只不过是从逻辑上将单个表单页面划分为了多个表单页面,而最终绑定数据的Command对象却只有一个。

AbstractWizardFormController将根据_targetX参数决定显示表单页面的某一部分,对应到视图那就是显示哪个向导页面。

在该向导页面提交请求之后,AbstractWizardFormController会把它显示并提交的那部分数据绑定到唯一的那个Command对象上,只有在所有向导页面都提交之后,Command对象的数据才算绑定完成。

从这样的角度来说,AbstractWizardFormController只不过是将一部分信息划分为多步来显示和处理罢了。

我们在向导(Wizard)最终结束的画面提交_finish参数之后,AbstractWizardFormController将从Command对象获取到所有向导页面(WizardPage)搜集来的数据,然后它就可以调用process-Finish(..)方法开始"

压轴戏"

了。

实际上,在实现AbstractWizardFormController的时候,也只有processFinish(..)方法是需要我们必须去实现的。

我想,以上的分析内容已经足以说明AbstractWizardFormController的底细。

不过,如果你还意犹未尽的话,不妨再研读一下ExpertSpringMVCandWebFlow一书。

像如何提供数据验证,如何覆写某些方法以添加扩展逻辑之类的细节,该书都有提及。

相信我,因为我已经读过了。

2.AbstractWizardFormController实例

我搜刮了FX系统的前台和后台的所有场景,也没有找到一个需要向导的流程。

所以,为了演示AbstractWizardFormController的使用,我也不能免俗,创造了一个调查问卷的场景。

我们将分三步引导用户完成对购车意愿的问卷调查。

当然,整个问卷调查看起来有些简单了,但如果需要,我们也可以在这个基础上提供更加友好、更加全面的问卷调查向导。

为了分步显示调查的内容,我们提供了4个页面分别显示整体的某一部分内容,它们的关系如下所述。

welcome.jsp。

问卷调查向导的开始页面,提供简单的说明信息,如图24-13所示。

carManufacturers.jsp。

该页面将提供汽车厂商信息列表供用户选择,如图24-14所示。

(点击查看大图)图24-13 webcome.jsp页面

(点击查看大图)图24-14 carManufacturers.jsp页面

carPriceScope.jsp。

向导流程中最后一个问卷调查页面,显示意愿购车价格区间,点击"

结束问卷"

提交按钮即结束当前问卷调查,见图24-15。

(点击查看大图)图24-15 carPriceScope.jsp页面

surveyResult.jsp。

确切地讲,该页面不能算向导的一部分,它只是调查结束后的一个结果显示页面,对应的是图24-12中的successView。

当然,将具体数据转换为柱状图显示或许更讨人爱一些,该页面最终效果如图24-16所示。

现在让我们着手实现该向导流程。

先来了解一下,几个重要的接口与类。

现在不知道他们是干什么的没关系,先混个脸熟,为以后认识他们打个基础。

DispatcherServlet 

--前置控制器

HandlerMapping接口--处理请求的映射

HandlerMapping接口的实现类:

SimpleUrlHandlerMapping 

通过配置文件,把一个URL映射到Controller

DefaultAnnotationHandlerMapping 

通过注解,把一个URL映射到Controller类上

HandlerAdapter接口--处理请求的映射

AnnotationMethodHandlerAdapter类,通过注解,把一个URL映射到Controller类的方法上

Controller接口--控制器

由于我们使用了@Controller注解,添加了@Controller注解注解的类就可以担任控制器(Action)的职责,

所以我们并没有用到这个接口。

HandlerInterceptor接口--拦截器

无图,我们自己实现这个接口,来完成拦截的器的工作。

ViewResolver接口的实现类

UrlBasedViewResolver类通过配置文件,把一个视图名交给到一个View来处理

InternalResourceViewResolver类,比上面的类,加入了JSTL的支持

View接口

JstlView类

LocalResolver接口

HandlerExceptionResolver接口--异常处理

SimpleMappingExceptionResolver实现类

ModelAndView类

无图。

三、核心流程图 

四、DispatcherServlet说明 

使用SpringMVC,配置DispatcherServlet是第一步。

DispatcherServlet是一个Servlet,所以可以配置多个DispatcherServlet。

DispatcherServlet是前置控制器,配置在web.xml文件中的。

拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理。

“某某规则”:

是根据你使用了

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1