4.5、ServletForwardingController

将接收到的请求转发到一个命名的servlet,具体示例如下:

    package cn.javass.chapter4.web.servlet;
public class ForwardingServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException { resp.getWriter().write("Controller forward to Servlet"); }
}
    <servlet>
<servlet-name>forwarding</servlet-name>
<servlet-class>cn.javass.chapter4.web.servlet.ForwardingServlet</servlet-class>
</servlet>
<!— 在chapter4-servlet.xml配置处理器 -->
<bean name="/forwardToServlet"
class="org.springframework.web.servlet.mvc.ServletForwardingController">
<property name="servletName" value="forwarding"></property>
</bean>

当我们请求/forwardToServlet时,会被转发到名字为“forwarding”的servlet处理,该sevlet的servlet-mapping标签配置是可选的。

4.6、BaseCommandController

命令控制器通用基类,提供了以下功能支持:

1、数据绑定:请求参数绑定到一个command object(命令对象,非GoF里的命令设计模式),这里的命令对象是指绑定请求参数的任何POJO对象;

commandClass:表示命令对象实现类,如UserModel;

commandName:表示放入请求的命令对象名字(默认command),request.setAttribute(commandName, commandObject);

2、验证功能:提供Validator注册功能,注册的验证器会验证命令对象属性数据是否合法;

validators:通过该属性注入验证器,验证器用来验证命令对象属性是否合法;

该抽象类没有没有提供流程功能,只是提供了一些公共的功能,实际使用时需要使用它的子类。

4.7、AbstractCommandController

命令控制器之一,可以实现该控制器来创建命令控制器,该控制器能把自动封装请求参数到一个命令对象,而且提供了验证功能。

1、创建命令类(就是普通的JavaBean类/POJO)

Java Code复制内容到剪贴板

    package cn.javass.chapter4.model;
public class UserModel {
private String username;
private String password;
//省略setter/getter
}

2、实现控制器

package cn.javass.chapter4.web.controller;
//省略import
public class MyAbstractCommandController extends AbstractCommandController {
public MyAbstractCommandController() {
//设置命令对象实现类
setCommandClass(UserModel.class);
}
@Override
protected ModelAndView handle(HttpServletRequest req, HttpServletResponse resp, Object command, BindException errors) throws Exception {
//将命令对象转换为实际类型
UserModel user = (UserModel) command;
ModelAndView mv = new ModelAndView();
mv.setViewName("abstractCommand");
mv.addObject("user", user);
return mv;
}
}
    <!— 在chapter4-servlet.xml配置处理器 -->
<bean name="/abstractCommand"
class="cn.javass.chapter4.web.controller.MyAbstractCommandController">
<!-- 也可以通过依赖注入 注入命令实现类 -->
<!-- property name="commandClass" value="cn.javass.chapter4.model.UserModel"/-->
</bean>
<!— WEB-INF/jsp/abstractCommand.jsp视图下的主要内容 -->        

${user.username }-${user.password

当我们在浏览器中输入“http://localhost:9080/springmvc-chapter4/abstractCommand?username=123&password=123”,会自动将请求参数username和password绑定到命令对象;绑定时按照JavaBean命名规范绑定;

aaarticlea/jpeg;base64,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XUNRFtPIski+aOSM+3fP6Cu5ooA4aD4ZWVnHc/ZNU1BXnt2gIkk3KRt2jI4zipPDfgW60WeZb3W5b+yltzAbV48KAce57Z/Ou1ooA4OH4U6NExzd3zoY2i8t5AVCnJxjHQE5HuK0vD/gSy8OXctza3t7I0sXlMszhlI6A4x1FdVRQBwfh34f3+g6rBcnxBLNaR7t1qI9qsCDx19TmtPS/Atjo+snULO8vI0MjSfZQ4EWWBH3ce9dTRQBSttO+zaleXn2q5k+07f3Mj5SPaMfKO2e9WplkaCRYnCSFSFYjIB9cU+igDlh4c1efSL/AEy+1S1eC6t3i3RWpVgzDG4ncc0mneDvsB0P/Td39l2zwf6v/WZ289ePu/rXVUUAR+RFuLeWm49Tt5rntD8M3Xh+9lWz1BTp00rSvbyRZYE9lbPA6cYrpaKAOEuvh01zNpb/ANplFstRe+K+VnfubcF69s9a7uiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//2Q==" alt="" />

4.8、AbstractFormController

用于支持带步骤的表单提交的命令控制器基类,使用该控制器可以完成:

1、定义表单处理(表单的渲染),并从控制器获取命令对象构建表单;

2、提交表单处理,当用户提交表单内容后,AbstractFormController可以将用户请求的数据绑定到命令对象,并可以验证表单内容、对命令对象进行处理。

 @Override
rotected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
throws Exception {
//1、是否是表单提交? 该方法实现为("POST".equals(request.getMethod())),即POST表示表单提交
if (isFormSubmission(request)) {
try {
Object command = getCommand(request);
ServletRequestDataBinder binder = bindAndValidate(request, command);
BindException errors = new BindException(binder.getBindingResult());
//表单提交应该放到该方法实现
return processFormSubmission(request, response, command, errors);
}
catch (HttpSessionRequiredException ex) {
//省略部分代码
return handleInvalidSubmit(request, response);
}
}
else {
//2、表示是表单展示,该方法又转调showForm方法,因此我们需要覆盖showForm来完成表单展示
return showNewForm(request, response);
}

bindOnNewForm:是否在进行表单展示时绑定请求参数到表单对象,默认false,不绑定;

sessionForm:session表单模式,如果开启(true)则会将表单对象放置到session中,从而可以跨越多次请求保证数据不丢失(多步骤表单常使用该方式,详解AbstractWizardFormController),默认false;

Object formBackingObject(HttpServletRequest request) :提供给表单展示时使用的表单对象(form object表单要展示的默认数据),默认通过commandName暴露到请求给展示表单;

Map referenceData(HttpServletRequest request, Object command, Errors errors):展示表单时需要的一些引用数据(比如用户注册,可能需要选择工作地点,这些数据可以通过该方法提供),如:

protected Map referenceData(HttpServletRequest request) throws Exception {
Map model = new HashMap();
model.put("cityList", cityList);
return model;
}

这样就可以在表单展示页面获取cityList数据。

SimpleFormController继承该类,而且提供了更简单的表单流程控制。

4.9、SimpleFormController

提供了更好的两步表单支持:

1、准备要展示的数据,并到表单展示页面;

2、提交数据数据进行处理。

第一步,展示:

aaarticlea/jpeg;base64,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" alt="" />

接下来咱们写一个用户注册的例子学习一下:

(1、控制器

    package cn.javass.chapter4.web.controller;
//省略import
public class RegisterSimpleFormController extends SimpleFormController {
public RegisterSimpleFormController() {
setCommandClass(UserModel.class); //设置命令对象实现类
setCommandName("user");//设置命令对象的名字
}
//form object 表单对象,提供展示表单时的表单数据(使用commandName放入请求)
protected Object formBackingObject(HttpServletRequest request) throws Exception {
UserModel user = new UserModel();
user.setUsername("请输入用户名");
return user;
}
//提供展示表单时需要的一些其他数据
protected Map referenceData(HttpServletRequest request) throws Exception {
Map map = new HashMap();
map.put("cityList", Arrays.asList("山东", "北京", "上海"));
return map;
}
protected void doSubmitAction(Object command) throws Exception {
UserModel user = (UserModel) command;
//TODO 调用业务对象处理
System.out.println(user);
}
}

setCommandClasssetCommandName分别设置了命令对象的实现类和名字;

formBackingObjectreferenceData提供了表单展示需要的视图;

doSubmitAction用于执行表单提交动作,由onSubmit方法调用,如果不需要请求/响应对象或进行数据验证,可以直接使用doSubmitAction方法进行功能处理。

(2、spring配置(chapter4-servlet.xml

    <bean name="/simpleForm"
class="cn.javass.chapter4.web.controller.RegisterSimpleFormController">
<property name="formView" value="register"/>
<property name="successView" value="redirect:/success"/>
</bean>
<bean name="/success" class="cn.javass.chapter4.web.controller.SuccessController"/>

formView表示展示表单时显示的页面;

successView表示处理成功时显示的页面;“redirect:/success”表示成功处理后重定向到/success控制器;防止表单重复提交;

/success” bean的作用是显示成功页面,此处就不列举了。

(3、视图页面

    <!-- register.jsp 注册展示页面-->
<form method="post">
username:<input type="text" name="username" value="${user.username}"><br/>
password:<input type="password" name="username"><br/>
city:<select>
<c:forEach items="${cityList }" var="city">
<option>${city}</option>
</c:forEach>
</select><br/>
<input type="submit" value="注册"/>
</form>

此处可以使用${user.username}获取到formBackingObject设置的表单对象、使用${cityList}获取referenceData设置的表单支持数据;

到此一个简单的两步表单到此结束,但这个表单有重复提交表单的问题,而且表单对象到页面的绑定是通过手工绑定的,后边我们会学习spring标签库(提供自动绑定表单对象到页面)。

4.10、CancellableFormController

一个可取消的表单控制器,继承SimpleFormController,额外提供取消表单功能。

1、表单展示:和SimpleFormController一样;

2、表单取消:和SimpleFormController一样;

3、表单成功提交:取消功能处理方法为:onCancel(Object command),而且默认返回cancelView属性指定的逻辑视图名。

那如何判断是取消呢?如果请求中有参数名为“_cancel”的参数,则表示表单取消。也可以通过cancelParamKey来修改参数名(如“_cancel.x”等)。

aaarticlea/jpeg;base64,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QCGBBBAIIIoAhorHd9U0D/j88/VdOH/L5HFvukJ7PDFGA6543IMjcoKYVpK0bK+tNStEu7G6guraTOyaCQOjYODhhweQR+FAE9FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFVNQ1Oy0qBZr65SFXcRxg8tK5BIRFHLucHCqCT2BoAt1mXNzc394+maZJ5ciYF3eBQwtQQCFUHIaUgghTkKCGYEFVkjjttT1/5pXn0rSzyixtturlTxh8rmBSMnCnzPmU5iZSp3bKws9Ms47SwtILS2jzshgjEaLkknCjgZJJ/GgAsbG202zjtLSPy4UzgZLEkkksxOSzEkksSSSSSSTViiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArGv/DVleXb31u8+najJjfeWTBHkwAB5ikFJcKMDzFbbk7cHmtmigDmGuPEWnHy7rR/7WB+7caW8cWfXfFNINnUAbXkzgk7eBUZ8Y6DF/wAft8dNz9z+1IZLLzPXZ5ypvxxnbnGRnGRXVZHqKXg8UAUaKzT4I8OL/wAemnDTs/e/suaSy8z03+Syb8c43Zxk4xk1zh13Trb/AI8vijok+77/APajW02PTZ5Lw4753bu2Mc5AO1orF87xZ/0CNC/8HMv/AMjUed4s/wCgRoX/AIOZf/kagDaorF87xZ/0CNC/8HMv/wAjUed4s/6BGhf+DmX/AORqANqisGe78TQwSS3Fp4esoEUtJdSarJIsK45cqYEDADnG9c/3h1rNt9R0zVLiKC7+JGnSyyuIVtdJmt4FmBOAvzNJKHJJGUkU9NuCMkA6yeeG1t5Li4lSKGJS8kkjBVRQMkkngADvWOPFuk3HGmvPqxPyq2m273EZfshlUGJG6ffZcAgnAOau2/g/w9b3Edy+mxXV1C4eK6v3a6miIORtklLMoB5ABABJI5JrdyPWgDmV/wCEh1b5I7T+w7fo8t00c1yfXy0RmjXg5DszYKkGMjmtLTPD9hpc7XaI9xqDpskvrlvMmcEgldx+6hI3bECoDnCitSigAooooAKKKKACiiigAooooAKKKKACiiigAoqOe4gtbeW4uJo4YYkLySSMFVFAySSeAAATmnb0/vL+dADqKbvT+8v50b0/vL+dADqKbvT+8v50b0/vL+dADqKbvT+8v50b0/vL+dADqKbvT+8v50b1/vD86AHUU3zE/vr+dG9P7y/nQA6im70/vL+dG9P7y/nQA6im71P8Q/Ojev8AeH50AOopu9P7y/nRvT+8v50AOopu9P7y/nRvT+8v50AOopu9P7y/nRvT+8v50AOopu9P7y/nRvT+8v50AOopu9P7y/nTFuYHuHt0mjaaNFd4wwLKrEhSR1AJVsHvtPpQBLRRRQAUUUUAFFFFABRRRQB//9k=" alt="" />

(1、控制器

复制RegisterSimpleFormController一份命名为CanCancelRegisterSimpleFormController,添加取消功能处理方法实现:

@Override
protected ModelAndView onCancel(Object command) throws Exception {
UserModel user = (UserModel) command;
//TODO 调用业务对象处理
System.out.println(user);

onCancel在该功能方法内实现取消逻辑,父类的onCancel方法默认返回cancelView属性指定的逻辑视图名

(2、spring配置(chapter4-servlet.xml

<bean name="/canCancelForm"
class="cn.javass.chapter4.web.controller.CanCancelRegisterSimpleFormController">
<property name="formView" value="register"/>
<property name="successView" value="redirect:/success"/>
<property name="cancelView" value="redirect:/cancel"/>
</bean>
<bean name="/cancel" class="cn.javass.chapter4.web.controller.CancelController"/>

cancelParamKey用于判断是否是取消的请求参数名,默认是_cancel,即如果请求参数数据中含有名字_cancel则表示是取消,将调用onCancel功能处理方法;

cancelView表示取消时时显示的页面;“redirect:/cancel”表示成功处理后重定向到/cancel控制器;防止表单重复提交;

/cancel” bean的作用是显示取消页面,此处就不列举了(详见代码)。

(3、视图页面(修改register.jsp

  input type="submit" name="_cancel" value="取消"/>  

该提交按钮的作用是取消,因为name="_cancel"即请求后会有一个名字为_cancel的参数,因此会执行onCancel功能处理方法。

(4、测试:

在浏览器输入“http://localhost:9080/springmvc-chapter4/canCancelForm”,则首先到展示 视图页面,点击“取消按钮”将重定向到“http://localhost:9080/springmvc-chapter4/cancel”,说明取消 成功了。

实际项目可能会出现比如一些网站的完善个人资料都是多个页面(即多步),那应该怎么实现呢?接下来让我们看一下spring Web MVC提供的对多步表单的支持类AbstractWizardFormController。

SpringMVC学习总结(三)——Controller接口详解(2)的更多相关文章

  1. SpringMVC学习总结(三)——Controller接口详解(1)

    4.12.ParameterizableViewController 参数化视图控制器,不进行功能处理(即静态视图),根据参数的逻辑视图名直接选择需要展示的视图. <bean name=&quo ...

  2. [读书笔记]C#学习笔记三: C#类型详解..

    前言 这次分享的主要内容有五个, 分别是值类型和引用类型, 装箱与拆箱,常量与变量,运算符重载,static字段和static构造函数. 后期的分享会针对于C#2.0 3.0 4.0 等新特性进行. ...

  3. zepto学习(三)之详解

    zepto Zepto就是jQuery的移动端版本, 可以看做是一个轻量级的jQuery github地址: https://github.com/madrobby/zepto 官方地址: http: ...

  4. SpringMVC学习笔记三:Controller的返回值

    springMVC的返回值有ModelAndView,String,void,Object类型 项目目录树: 该项目是在前面项目的基础上修改的,这里的pom.xml文件需要加入使用到的包,应为@Res ...

  5. PE文件学习系列三-PE头详解

    合肥程序员群:49313181.    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q  Q:408365330     E-Mail:egojit@qq.com 最近比较忙 ...

  6. Struts2学习第三课 Struts2详解

    接着上次的课程 这次我们看struts.xml 修改如下:这里是加上命名空间,默认的是不加,我们手动加上时就要在访问时加上命名空间. <?xml version="1.0" ...

  7. Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(转)

    通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车,开始美好的旅程! 本篇是在SSM框架基础上进行的. 参考文章: 1.Quartz学习——Qua ...

  8. IP2——IP地址和子网划分学习笔记之《子网掩码详解》

    2018-05-04 16:21:21   在学习掌握了前面的<进制计数><IP地址详解>这两部分知识后,要学习子网划分,首先就要必须知道子网掩码,只有掌握了子网掩码这部分内容 ...

  9. Spring第三天,详解Bean的生命周期,学会后让面试官无话可说!

    点击下方链接回顾往期 不要再说不会Spring了!Spring第一天,学会进大厂! Spring第二天,你必须知道容器注册组件的几种方式!学废它吊打面试官! 今天讲解Spring中Bean的生命周期. ...

随机推荐

  1. php中session_start()相关问题分析与解决办法

    介绍下,在php中使用session时遇到的一些问题,与相关解决方法.1.错误提示Warning: Cannot send session cookie - headers already sentW ...

  2. java 下载spring的方法

    spring是很好用,可惜的是,貌似现在没有办法从网站上找到整合在一起的包了... 我以前只能通过maven去抓... 今天终于知道了一个方法: 访问如下地址: http://repo.spring. ...

  3. 单例模式C#

    首先来明确一个问题,那就是在某些情况下,有些对象,我们只需要一个就可以了, 比如,一台计算机上可以连好几个打印机,但是这个计算机上的打印程序只能有一个, 这里就可以通过单例模式来避免两个打印作业同时输 ...

  4. ORACLE AWR 和 ASH

    一.关于ASH 我们都知道,用户在 ORACLE 数据库中执行操作时,必然要创建相应的连接和会话, 其中,所有当前的会话信息都保存在动态性能视图 V$SESSION 中,通过该视图,DBA 可 以查看 ...

  5. printf的格式控制的完整格式

    printf的格式控制的完整格式:%  -  0  m.n  l或h  格式字符下面对组成格式说明的各项加以说明:①%:表示格式说明的起始符号,不可缺少.②-:有-表示左对齐输出,如省略表示右对齐输出 ...

  6. python autopy

    今天学习了python autopy 主要包括alert,color,mouse,key,bitmap,screen等的操作 文档在http://www.autopy.org/documentatio ...

  7. 自定义一个WPF的PathButton

    一.背景 做项目时总是少不了Button,但是普通的Button大家都不喜欢用,总是想要自定义的Button,正好项目中用到不要边框的Button,并且是形状也是根据功能不同而变化的,并且窗口程序是会 ...

  8. 用开源AOP简化MVVM框架

    本文的前提是知晓基于Xaml开发,本文以WPF为例 一 .简化属性通知事件 普通的属性通知会写一个基于INotifyPropertyChanged接口的类 public class RasieProp ...

  9. .NET Framework 3.5 安装错误:0x800F0906、0x800F081F、0x800F0907

    使用Add-WindowsFeature 照成的问题 I get the failure below..  If I pick the Server 2012 R2 image from 8/15/2 ...

  10. Linux使用标准IO的调用函数,分3种形式实现

    /*根据cp命令的格式要求,设计一个类cp的功能程序,要求使用标准IO的调用函数,分3种形式实现,字符,行,块.并注意函数功能的分层*/ #include<stdio.h> #includ ...