SpringMVC学习(二)

控制器Controller

我们通常通过接口或注解定义两种方式实现

1、实现Controller接口

Controller是一个接口,在org.springframework.web.servlet.mvc包下。

@FunctionalInterface
public interface Controller {
        //处理请求并返回一个模型与视图对象
	@Nullable
	ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;
}

实现接口Controller定义控制器是较老的方法

缺点是:一个控制器中只有一个方法,如果要多个方法则需要定义多个Controller;定义的方式比较麻烦!

2、使用注解@Controller

@Controller注解类型用于声明Spring类的实例是一个控制器;还有三个相同的注解!

@Component     组件
@Service       Service层
@Controller    Controller层
@Repository    dao层

Spring可以使用扫描机制来找到对应程序中所有基于注解的控制器类,为了保证Spring能找到控制器,需要在配置文件中声明组件扫描。

<!-- 自动扫描指定的包,下面所有注解类交给IOC容器管理 -->
<context:component-scan base-package="com.star.controller"/>

注意:页面是可以进行复用,但是页面的结果是不一样的,可以多个请求指向一个视图,控制器与视图之间是弱耦合关系。

RestFul风格

概念

RestFul就是一个资源定位及资源操作的风格,不是标准也不是协议,只是一种风格,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

功能

资源:互联网所有的事物都可以被抽象为资源

资源操作:使用POST、DELETE、PUT、GET使用不同方法对资源进行操作。

分别对应:添加、删除、修改、查询

传统操作资源

通过不同的参数来实现不同的效果!方法单一,post和get

使用RestFul风格

测试

1、新建一个类RestFulController

package com.star.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class RestFulController {

    @RequestMapping("/add") //设两个参数a,b,并将结果输出到前端
    public String test1(int a, int b, Model model){
        int ans = a+b;
        model.addAttribute("msg","a + b 的结果:" + ans);
        return "hello";
    }
}

2、测试请求,我们使用传统的操作:

3、现在我们使用RestFul风格

在Spring MVC中可以使用@PatnVariable注解,让方法参数的值对应绑定到一个URL模板变量上

@Controller
public class RestFulController {

    @RequestMapping("/add/{a}/{b}")
    public String test1(@PathVariable int a,@PathVariable int b, Model model){
        int ans = a+b;
        model.addAttribute("msg","a + b 的结果:" + ans);
        return "hello";
    }
}

4、重启项目,测试请求:

可以看到原来的路径就会报错!url就要改为:/add/a/b

指定请求类型

我们可以使用method属性指定请求类型

​用于约束请求的类型,可以收窄请求范围。指定请求谓词的类型如GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE等;

我们进行测试一下:

@Controller
public class RestFulController {

    @RequestMapping(value = "/add/{a}/{b}", method = RequestMethod.POST)//指定post请求
    public String test1(@PathVariable int a,@PathVariable int b, Model model){
        int ans = a+b;
        model.addAttribute("msg","a + b 的结果:" + ans);
        return "hello";
    }
}

我们使用浏览器访问默认是GET请求,会报错:

我们可以使用表单提交post请求,或者将请求改为get

创建一个表单提交页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<form action="add/1/2" method="post">
    <input type="submit">
</form>

</body>
</html>

测试请求:

Spring MVC的@RequestMapping注解能够处理HTTP请求的方法,比如GET,PUT,POST,DELETE以及PATCH。

所有的地址请求默认都会是HTTP GET类型的

方法级别的注解有如下几个:组合注解

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping

@XXXMapping是一个组合注解

相当于@RequestMapping(method = RequestMethod.XXX)的一个快捷方式,通常使用这个!

原文地址:https://www.cnblogs.com/lmx-181028/p/12504071.html