SpringMVC学习(二)

控制器Controller

咱们一般经过接口或注解定义两种方式实现html

一、实现Controller接口

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

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

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

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

二、使用注解@Controller

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

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

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

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

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

RestFul风格

概念

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

功能

资源:互联网全部的事物均可以被抽象为资源mvc

资源操做:使用POST、DELETE、PUT、GET使用不一样方法对资源进行操做。app

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

传统操做资源

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

使用RestFul风格

测试

一、新建一个类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";
    }
}

二、测试请求,咱们使用传统的操做:

三、如今咱们使用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";
    }
}

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

能够看到原来的路径就会报错!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)的一个快捷方式,一般使用这个!

相关文章
相关标签/搜索