史上最简单的 Spring MVC 教程(三)

1 前言


在史上最简单的 Spring MVC 教程(二)中,咱们讲解了常见的处理器映射(handlerMapping),并给出了应用示例。在本篇博客中,咱们讲解常见的控制器(Controller),在这里有一点需要大家知晓,那就是:在我们创建Controller,并继承父类的时候,父类上会被画上一条横线,这表示该类已经过时啦!这是因为在 Spring 框架在升级到 Spring 3.0 后,推荐大家使用注解的方式进行开发,因此用继承的方式就过时啦!

2 Controller


2.1 CommandController

在使用命令控制器 CommandController 的时候,我们需要在类的构造方法中进行传参,指定 command 对应的实体。 由于要指定实体,我们就需要创建一个实体类,在此以 Person 为例;其次,我们需要在“springmvc-servlet.xml”中声明一个命令控制器;最后,在访问链接的地址有多个单词的时候,都需要小写,也可以去掉其中的 Controller 单词。修改后的项目结构图如下所示:

史上最简单的 Spring MVC 教程(三)_第1张图片
项目结构图

第一步:创建实体类(Person)

package spring.mvc.domain;

/** * Created by 维C果糖 on 2017/1/25\. */

public class Person {
    private Integer id;
    private String name;
    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

第二步:创建命令控制器(DemoCommandController)

package spring.mvc.controller;

import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractCommandController;
import spring.mvc.domain.Person;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/** * Created by 维C果糖 on 2017/1/25\. */
public class DemoCommandController extends AbstractCommandController {

    // 在构造函数中初始化 command 对象
    public DemoCommandController() {
        // 页面封装数据到 command 对象,对应的实体为 Person
        this.setCommandClass(Person.class);
    }

    @Override
    protected ModelAndView handle(HttpServletRequest request, HttpServletResponse response,
                                  Object command, BindException e) throws Exception {
        Person p = (Person) command;
        System.out.println(p);
        return null;
    }
}

第三步:修改“springmvc-servlet.xml”配置文件




    
    
    
        
    

    
    
        
            
                homeController
                homeController
                homeController
            
        
        
    

    
    

    
    
    
    

    
    
        
        
    

2.2 SimpleFormController


在使用简单表单控制器 SimpleFormController 的时候,我们也需要在类的构造方法中进行传参,指定 command 对应的实体。 接下来,同 CommandController 的配置类似,需要在“springmvc-servlet.xml”中声明一个简单表单控制器。由于这是表单控制器,所以我们需要新建一个 JSP 页面用于提交表单。在这里,有一点需要注意:当链接以 get 方式提交时,转向 formView 视图;当链接以 post 方式提交时,转向 successView 视图。修改后的项目结构图如下所示:

史上最简单的 Spring MVC 教程(三)_第2张图片
项目结构图

第一步:创建简单表单控制器(PersonFormController)

package spring.mvc.controller;

import org.springframework.web.servlet.mvc.SimpleFormController;
import spring.mvc.domain.Person;

/** * Created by 维C果糖 on 2017/1/25\. */
public class PersonFormController extends SimpleFormController {

    public PersonFormController() {
        // 设置 command
        this.setCommandClass(Person.class);
    }

    // 提交后,交给业务处理
    protected void doSubmitAction(Object command) throws Exception {
        Person p = (Person) command;
        System.out.println(p);
    }
}

第二步:新建 JSP 页面(PersonForm)

<%-- Created by IntelliJ IDEA. User: 维C果糖 Date: 2017/1/25 Time: 14:03 To change this template use File | Settings | File Templates. --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    
    人员列表



    
编号:
姓名:
年龄:

第三步:修改“springmvc-servlet.xml”配置文件




    
    
    
        
    

    
    
        
            
                homeController
                homeController
                homeController
            
        
        
    

    
    

    
    
    
    
    
    
          
            
    

    
    
        
        
    

2.3 WizardController


在使用向导控制器WizarController 的时候,我们也需要在类的构造方法中设置关联的实体,并且可以在构造方法中实现页面参数的回显功能。 接下来,在类中覆写 processFinish 方法,实现点击“完成”操作后需要跳转的页面;覆写 processCancel 方法,实现点击“取消”操作后跳转的页面。由于在使用向导控制器时,涉及多个页面,因此我们需要新建多个 JSP 页面,并在“springmvc-servlet.xml”中声明一个向导控制器,并配置页面的流转顺序。修改后的项目结构图如下所示:

史上最简单的 Spring MVC 教程(三)_第3张图片
项目结构图

第一步:创建向导控制器(DemoWizardController)

package spring.mvc.controller;

import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractWizardFormController;
import spring.mvc.domain.Person;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/** * Created by 维C果糖 on 2017/1/26\. */
public class DemoWizardController extends AbstractWizardFormController{

    // 在构造函数中初始化 command 对象
    public DemoWizardController() {
        // 页面封装数据到 command 对象,对应的实体为 Person
        this.setCommandClass(Person.class);
        // 帮助页面实现回显功能
        this.setCommandName("p");
    }

    // 最终完成后提交
    @Override
    protected ModelAndView processFinish(HttpServletRequest request,
                                         HttpServletResponse response, Object command, BindException e) throws Exception {
        Person p = (Person) command;
        System.out.println(p);
        return new ModelAndView("index");
    }

    // 取消填写,返回第一个页面
    @Override
    protected ModelAndView processCancel(HttpServletRequest request,
                                         HttpServletResponse response, Object command, BindException e) throws Exception {
        return new ModelAndView("wizard/PersonInfo");
    }
}

第二步:新建 JSP 页面(PersonInfo、PersonEdu、PersonWork)

<%-- Created by IntelliJ IDEA. User: 维C果糖 Date: 2017/1/26 Time: 00:15 To change this template use File | Settings | File Templates. --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    
    人员信息 PersonInfo



    
编号:
<%-- Created by IntelliJ IDEA. User: 维C果糖 Date: 2017/1/26 Time: 00:18 To change this template use File | Settings | File Templates. --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    
    教育信息 PersonEdu



姓名:
<%-- Created by IntelliJ IDEA. User: 维C果糖 Date: 2017/1/26 Time: 00:20 To change this template use File | Settings | File Templates. --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    
    工作信息 PersonWork



年龄:

第三步:修改“springmvc-servlet.xml”配置文件




    
    
    
        
    

    
    
        
            
                homeController
                homeController
                homeController
            
        
        
    

    
    

    
    

    
    

    
    
          
            
    

    
    
        
        
            
                wizard/PersonInfo
                wizard/PersonEdu
                wizard/PersonWork
            
        
    

    
    
        
        
    

在完成以上操作及配置后,启动 tomcat 服务器,在 Chrome 浏览器中访问 http://localhost:8080/springmvc/demowizard.action,然后在显示的页面中,依次输入编号、姓名和年龄,点击“完成”,将会返回如下页面:

操作结果页面

查看原文: 史上最简单的 Spring MVC 教程(三)

你可能感兴趣的:(史上最简单的 Spring MVC 教程(三))