spring MVC 之controller (一)

本博客中介绍了两类controller,一类是与页面直接跳转相关的ParameterizableViewController和UrlFilenameViewController,另外一类是与表单数据封装相关的AbstractCommandController和SimpleFormController。
摘要由CSDN通过智能技术生成

在spring MVC 中,每个请求到DispatcherServlet后根据需求,将会分配到相对应的控制器controller去处理,因此controller在 spring MVC中的作用是非常重要的。本文先介绍两类controller。

一、页面直接跳转

当我们请求一个页面时,由于文件都隐藏在了文件下,无法直接访问,因此需要有一个控制器来实现简单的页面跳转,跳转到对应的页面。这类控制器不需要对请求做太多的处理地,只需实现页面跳转即可。这时,我们可以不需要自己去设计自己的controller,而是直接配置现有的controller类。与页面直接跳转的现有controller主要有以下两个:

1、ParameterizableViewController

我们在“/WEB-INF/jsp/”目录下创建了一个welcome.html文档,为了实现在浏览器中输入welcome.test就直接跳转到welcome.html,spring-servlet.xml文件配置主要如下:

这里写图片描述

不需要自己写控制器,而是直接调用现有的ParameterizableViewController类来实现。只需要指定对应的视图名就可以。然后就能根据视图解析器去查找需要跳转的页面,视图解析器设置如下:

<!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!-- 后缀 -->
        <property name="suffix" value=".html" />
    </bean>

2、UrlFilenameViewController

这个控制器相对于ParameterizableViewController更为简洁,可以不用指明视图名,而直接通过请求的url去查找文件,直接以请求 的URL来确定视图名,然后直接跳转过去。例如请求的url是“welcome.test”,那么从中提取出视图名为“welcome”,而不需要另外指定视图名。这种方法适用于请求的url跟视图名一致。

这里写图片描述

这两种方法都是直接配置现有的controller类来实现页面的直接跳转,区别在于ParameterizableViewController类可以根据需要指定视图名,较为灵活,而UrlFilenameViewController类只能跳转到跟url对应的视图名,而不能自行指定视图名。

welcome.html文档如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>welcome page</title>
</head>
<body>
    <h1>this is the welcome page</h1>
</body>
</html>

启动服务器后,在外部浏览器中输入:http://localhost:8080/springMVC/welcome.test,即可正常跳转到welcome.htm页面。

这里写图片描述

二、封装表单参数的控制器

一般我们在进行表单登记或者注册时,会要求填较多的信息,这些信息如果按照之前介绍的继承Controller来实现参数的注入,当表单参数较多时,代码就会显得冗余。因此我们希望controller能实现数据的自动封装。这里,我将介绍两种方法来实现表单参数的自动封装。

1、AbstractCommandController

首先需要注意的一个问题是由于AbstractCommandController在spring 3之后就不建议使用了,因此在一些比较新的spring MVC框架中并不包含这个类,这里本着学习的态度,还是了解一下。所以在导入jar包是需要注意版本问题。通过查看各版本的jar包,注意到3.2.2这个版本中包含有AbstractCommandController,读者们可以到 http://repo.spring.io/libs-release-local/org/springframework/spring/3.2.2.RELEASE/ 中下载。在测试中,我导入的jar包如下:

这里写图片描述

接下来使配置文件,首先配置info.javainfoController.java文档

这里写图片描述

infoController.java文档

package test.springMVC;

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

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

@SuppressWarnings("deprecation")
public class infoController extends AbstractCommandController {
   

    @Override
    protected ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object command, BindException exception)
            throws Exception {
        info inf = (info)command;
        System.out.println(inf);
        return new ModelAndView("addsucc");
    }

}

info.java文档

package test.springMVC;

public class info {

    private String name;

    private int num;

    private String phone;

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getName() {
        return name;
    }

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

    public int getNum() {
        return num;
    }

    public void setNum
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值