zoukankan      html  css  js  c++  java
  • 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)的一个快捷方式,通常使用这个!

  • 相关阅读:
    错误:net::ERR_BLOCKED_BY_CLIENT
    ui-grid angularjs
    angular Js 回车处理
    百度云盘-真实地址 F12 控制台
    Js 跨域CORS报错 Response for preflight has invalid HTTP status code 405
    angularjs 路由参数
    AngularJs Angular数据类型判断
    Bootstrap+AngularJS对话框实例
    AngularJs表单自动验证
    IIS7.5上的REST服务的Put操作发生HTTP Error 405.0
  • 原文地址:https://www.cnblogs.com/lmx-181028/p/12504071.html
Copyright © 2011-2022 走看看