返回顶部
首页 > 资讯 > 后端开发 > Python >聊聊Controller中RequestMapping的作用
  • 622
分享到

聊聊Controller中RequestMapping的作用

2024-04-02 19:04:59 622人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录Controller@RequestMapping作用1.value,method2.consumes,produces3.params,headersController配置总

Controller @RequestMapping作用

@RequestMapping是一个用来处理请求地址映射的注解,可用于类或者方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

@RequestMapping注解有六个属性,下面进行详细的说明。

1.value, method

  • value:指定请求的实际地址,指定的地址可以是URI Template模式。
  • method:指定请求的method类型,GET、POST、PUT、DELETE等。

2.consumes, produces

  • consumes:指定处理请求的提交内容类型(Content-Type),例如application/JSON,text/html
  • produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。

3.params, headers

  • params:指定request中必须包含某些参数值才让该方法处理。
  • headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。

其实还可以简单的认为这个注解就是使用在controller类上面的注解

如果在controller类上面添加了注解@RequestMapping("/product") ,然后又在方法上面加上了注解@RequestMapping("/findAll"),你的项目端口是8080,然后在访问的时候就是localhost:8080/product/findAll

Controller配置总结及RequestMapping说明

控制器Controller

  • 控制器负责提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现。
  • 控制器负责解析用户的请求并将其转换为一个模型。
  • spring mvc中一个控制器可以包含多个方法
  • 在Spring MVC中,对于Controller的配置方式有很多种

实现Controller接口

Controller是一个接口,在org.springframework.WEB.servlet.mvc包下,接口中只有一个方法

//实现该接口的类获得控制器功能
public interface Controller {
   //处理请求且返回一个模型与视图对象
   ModelAndView handleRequest(httpservletRequest var1, HttpServletResponse var2) throws Exception;
}

测试

1.新建一个Moudle,springMVC-04-controller。

2.编写web,xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!-- 配置DispatcherServlet -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

3.编写springmvc-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <context:component-scan base-package="com.chen.controller"/>
    <mvc:annotation-driven/>
    <mvc:default-servlet-handler/>
    <!-- 视图解析器: 模板引擎 Thymeleaf Freemarker -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!-- 后缀 -->
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

4.编写一个Controller类,ControllerTest1

package com.chen.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//只要实现了 Controller 接口的类,说明这就是一个控制器了
public class ControllerTest1 implements Controller {
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","ControllerTest1");
        mv.setViewName("test");
        return mv;
    }
}

编写完毕后,去Spring配置文件中注册请求的bean;name对应请求路径,class对应处理该请求的类

<bean name="/test1" class="com.chen.controller.ControllerTest1"/>

编写前端test.jsp,注意在WEB-INF/jsp目录下编写,对应我们的视图解析器

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

配置Tomcat运行测试

说明:

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

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

使用注解@Controller

@Controller注解类型用于声明Spring类的实例是一个控制器。

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

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

增加一个ControllerTest2类,使用注解实现;

// @Controller代表这个类会被Spring接管,被这个注解的类,中的所有方法,
// 如果返回值是String,并且有具体页面可以跳转,那么就会被视图解析器解析;
@Controller
public class ControllerTest2 {
    @RequestMapping("/test2")
    public String test1(Model model){
        model.addAttribute("msg","ControllerTest2");
        return "test";
    }
}

运行Tomcat测试

可以发现,我们的两个请求都可以指向一个视图,但是页面的显示结果是不也一样的,从这里可以看出视图是被复用的,而控制器与视图之间是弱耦合关系

RequestMapping说明

@RequestMapping

  • @RequestMapping注解用于映射url到控制器类或一个特定的处理程序方法。可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

测试一

@Controller
public class ControllerTest3 {
    @RequestMapping("/t1")
    public String test(Model model){
        model.addAttribute("msg","ControllerTest3");
        return "test";
    }
}

访问路径:http://localhost:8080 / 项目名 / t1

测试二

@Controller
@RequestMapping("/c3")
public class ControllerTest3 {
    @RequestMapping("/t1")
    public String test(Model model){
        model.addAttribute("msg","ControllerTest3");
        return "test";
    }
}

访问路径:http://localhost:8080 / 项目名/ admin /h1 , 需要先指定类的路径再指定方法的路径;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 聊聊Controller中RequestMapping的作用

本文链接: https://lsjlt.com/news/140038.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 聊聊Controller中RequestMapping的作用
    目录Controller@RequestMapping作用1.value,method2.consumes,produces3.params,headersController配置总...
    99+
    2024-04-02
  • 聊聊@RequestMapping和@GetMapping @PostMapping的区别
    @RequestMapping和@GetMapping @PostMapping的区别 最近学习看一些代码,发现对于发送请求这件事,有的地方用@RequestMapping,有的地方...
    99+
    2024-04-02
  • 聊聊注解@controller@service@component@repository的区别
    目录注解@controller@service@component@repository的区别命名不一样主要是为了区分类的作用和所属层级:Spring中的主要注解1.组件类注解@Co...
    99+
    2024-04-02
  • 聊聊Javascript中try catch的2个作用
    程序是从上到下顺序执行的,同时可以通过一些控制语句来改变执行的路线,受控制语句影响下,程序最终的执行路线就是控制流。 js 里面的控制语句有 if、for、while、try cat...
    99+
    2024-04-02
  • 聊聊jquery中常用的不等号操作
    随着网页交互越来越复杂,网页制作领域也出现了很多 JavaScript 的库和插件,让开发者更加方便地实现各种功能。其中,jQuery 是最为出名的一个,它简单易用却功能强大。本文将介绍 jQuery 中常用的不等号操作。相等和不相等在 J...
    99+
    2023-05-14
  • 聊聊maven的pom.xml中的exclusions标签的作用
    maven pom.xml的exclusions标签作用 项目中的例子 <dependency> <groupId>org.springfram...
    99+
    2024-04-02
  • 详细聊聊MySQL中auto_increment有什么作用
    目录问题来源解释注意事项总结问题来源 很多时候,mysql语句中会出现【auto_increment】这个词汇,大多数时候,表都是自动生成的,刚开始学习MySQL数据库时会学习到,后来,渐渐地可能会忘记,那么这个语句的作...
    99+
    2022-06-29
    mysql中auto_increment的作用 mysql auto increment
  • Spring MVC中@Controller和@RequestMapping注解使用
    目录@Controller和@RequestMapping注解使用RequestMapping注解类型通过@RequestParam接收请求参数SpringMVC应用@Autowir...
    99+
    2024-04-02
  • 聊聊Python代码中if __name__ == ‘__main__‘的作用是什么
    目录Python中if __name__ == ‘__main__‘作用补充:if __name__ == '__main__':的运行原理总...
    99+
    2024-04-02
  • 简单聊聊工作中常用的Java Lambda表达式
    目录前言1. list转map2. filter()过滤3. foreach遍历4. groupingBy分组5. sorted+Comparator 排序6.distinct去重7...
    99+
    2022-11-13
    Java Lambda表达式 Java Lambda
  • 聊聊Gitee中Fork的具体操作和工作原理
    Gitee是一个国内广受欢迎的代码托管平台,由于其稳定性和优秀的社交化特性,越来越多的开发者选择在Gitee上托管自己的代码。而其中,Fork是Gitee上一个重要而实用的功能之一。本文将介绍Gitee中Fork的具体操作和工作原理,希望能...
    99+
    2023-10-22
  • 聊聊MySQL中的参数
    前言: 在前面一些文章中,经常能看到介绍某某参数的作用,可能有些小伙伴仍搞不清楚 MySQL 参数是啥。本篇文章我们来聊聊 MySQL 参数,学习下如何管理维护 MySQL 参数。 1.MySQL参数概念 我们所说的...
    99+
    2022-05-29
    MySQL 参数
  • 聊一聊Android中的StateListAnimator
    简评:使用 StateListAnimator 轻松实现 Material Design 效果。 Material Design 中最基础的一条原则就是 'motion ...
    99+
    2022-06-06
    Android
  • 聊聊pytorch中Optimizer与optimizer.step()的用法
    当我们想指定每一层的学习率时: optim.SGD([ {'params': model.base.parameters()}, ...
    99+
    2024-04-02
  • 聊聊C#中的Mixin的具体用法
    目录写在前面从一个简单例子说起在类中实现单例在父类中实现单例轮到Mixin出场定义Mixin在C#中在8.0之前从C#8.0开始写在前面 Mixin本意是指冰淇淋表面加的那些草莓酱,...
    99+
    2024-04-02
  • 聊聊技术写作的个人体会
    有群友问过,是什么原因使我开始写技术公众号,又是什么动力让我坚持写的。 在我看来,写作是一件不能敷衍的事,通过写作来学习,反而要比单纯地学习的效果要好。为了写成一篇“拿得出手”的文章,我要反复查找资料,阅读与思考,拆解与整合,最终写成的...
    99+
    2023-01-30
    技术
  • 聊聊JS ES6中的解构
    概述 es6新增了一种从数组或者对象中获取指定元素的方式,这种方式就是我们今天要说的解构。 先来说说数组的解构 在有解构之前呢,我们获取数组中的指定元素通常是根据索引去做的: c...
    99+
    2024-04-02
  • 详细聊聊Vue.js中的MVVM
    目录MVVM的理解MVVM的原理脏检查机制:数据劫持相同点实现MVVM总结MVVM的理解 MVVM拆开来即为Model-View-ViewModel,有View,ViewModel...
    99+
    2024-04-02
  • 深入聊聊Golang中的sync.Cond
    本文将介绍 Go 语言中的 sync.Cond 并发原语,包括 sync.Cond的基本使用方法、实现原理、使用注意事项以及常见的使用使用场景。能够更好地理解和应用 Cond 来实现 goroutine 之间的同步。1. 基本使用1.1 定...
    99+
    2023-05-14
    后端 Go
  • 深入聊聊vue3中的reactive()
    在vue3的开发中,reactive是提供实现响应式数据的方法。日常开发这个是使用频率很高的api。这篇文章笔者就来探索其内部运行机制。小白一枚,写得不好请多多见谅。调试版本为3.2.45什么是reactivereactive是Vue3中提...
    99+
    2023-05-14
    前端 Vue.js JavaScript
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作