SpringMVC项目请求(请求映射路径)

SpringMVC是web层的框架,主要的作用是接收请求、接收数据、响应结果,分成四部分内容:

  • 请求映射路径
  • 请求参数
  • 日期类型参数传递
  • 响应json数据

本次介绍的是设置请求映射路径。

1. 环境准备

  • 创建一个Web的Maven项目

  • pom.xml添加Spring依赖

    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.dcxuexi</groupId>
      <artifactId>springmvc_03_request_mapping</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>war</packaging>
    
      <name>springmvc_03_request_mapping Maven Webapp</name>
      <!-- FIXME change it to the project's website -->
      <url>http://www.example.com</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>5.2.15.RELEASE</version>
        </dependency>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.1.0</version>
          <scope>provided</scope>
        </dependency>
    
      </dependencies>
    
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.1</version>
            <configuration>
              <port>80</port>
              <path>springmvc</path>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </project>
    
    
  • 创建对应的配置类SpringMvcConfig和ServletContainersInitConfig

    @Configuration
    @ComponentScan("com.dcxuexi.controller")
    public class SpringMvcConfig {
    }
    
    public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
        @Override
        protected Class<?>[] getRootConfigClasses() {
            return new Class[]{SpringMvcConfig.class};
        }
    
        @Override
        protected Class<?>[] getServletConfigClasses() {
            return new Class[0];
        }
    
        @Override
        protected String[] getServletMappings() {
            return new String[]{"/"};
        }
    }
    
    
  • 编写UserController和CityController

    @Controller
    public class UserController {
    
        @RequestMapping("/select")
        @ResponseBody
        public String select(){
            System.out.println("UserController select ,running .....");
            return "{\"username\":\"xiaochuang\"}";
        }
    
        @RequestMapping("/delete")
        @ResponseBody
        public String delele(){
            System.out.println("UserController delele ,running .....");
            return "user xiaochuang is deleted.";
        }
    }
    
    @Controller
    public class CityController {
    
        @RequestMapping("/select")
        @ResponseBody
        public String select(){
            System.out.println("CityController select ,running .....");
            return "{\"cityName\":\"shanghai\"}";
        }
    
        @RequestMapping("/delete")
        @ResponseBody
        public String delele(){
            System.out.println("CityController delele ,running .....");
            return "city shanghai is deleted.";
        }
    }
    
    

最终创建好的项目结构如下:

在这里插入图片描述

把环境准备好后,启动Tomcat服务器,后台会报错:

在这里插入图片描述

从错误信息可以看出:

  • UserController有一个select方法,访问路径为http://localhost/springmvc/select
  • CityController也有一个select方法,访问路径为http://localhost/springmvc/select
  • 当访问http://localhost/springmvc/select的时候,到底是访问UserController还是CityController?

2. 问题分析

团队多人开发,每人设置不同的请求路径,冲突问题该如何解决?

解决思路:为不同模块设置模块名作为请求路径前置

对于UserController模块的select,将其访问路径设置http://localhost/springmvc/user/select

对于CityController模块的select,将其访问路径设置http://localhost/springmvc/city/select

这样在同一个模块中出现命名冲突的情况就比较少了。

3. 设置映射路径

步骤1:修改Controller

@Controller
public class UserController {

    @RequestMapping("/user/select")
    @ResponseBody
    public String select(){
        System.out.println("UserController select ,running .....");
        return "{\"username\":\"xiaochuang\"}";
    }

    @RequestMapping("/user/delete")
    @ResponseBody
    public String delele(){
        System.out.println("UserController delele ,running .....");
        return "user xiaochuang is deleted.";
    }
}
@Controller
public class CityController {

    @RequestMapping("/city/select")
    @ResponseBody
    public String select(){
        System.out.println("CityController select ,running .....");
        return "{\"cityName\":\"shanghai\"}";
    }

    @RequestMapping("/city/delete")
    @ResponseBody
    public String delele(){
        System.out.println("CityController delele ,running .....");
        return "city shanghai is deleted.";
    }
}

启动Tomcat服务器:

在这里插入图片描述

问题是解决了,但是每个方法前面都需要进行修改,写起来比较麻烦而且还有很多重复代码,如果/user后期发生变化,所有的方法都需要改,耦合度太高。

步骤2:优化路径配置

优化方案:

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/select")
    @ResponseBody
    public String select(){
        System.out.println("UserController select ,running .....");
        return "{\"username\":\"xiaochuang\"}";
    }

    @RequestMapping("/delete")
    @ResponseBody
    public String delele(){
        System.out.println("UserController delele ,running .....");
        return "user xiaochuang is deleted.";
    }
}
@Controller
@RequestMapping("/city")
public class CityController {

    @RequestMapping("/select")
    @ResponseBody
    public String select(){
        System.out.println("CityController select ,running .....");
        return "{\"cityName\":\"shanghai\"}";
    }

    @RequestMapping("/delete")
    @ResponseBody
    public String delele(){
        System.out.println("CityController delele ,running .....");
        return "city shanghai is deleted.";
    }
}

注意:

  • 当类上和方法上都添加了@RequestMapping注解,前端发送请求的时候,要和两个注解的value值相加匹配才能访问到。
  • @RequestMapping注解value属性前面加不加/都可以

扩展小知识:

对于PostMan如何觉得字小不好看,可以使用ctrl+=调大,ctrl+-调小。


项目代码

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring MVC提供了多种请求映射注解来指定处理请求的地址。其中常用的注解包括: - `@RequestMapping`:通用的请求处理类,可以用在类和方法上。 - `@GetMapping`:处理HTTP GET请求的查询方法。 - `@PostMapping`:处理HTTP POST请求的新增或修改方法。 - `@PutMapping`:处理HTTP PUT请求的新增或修改方法。 - `@PatchMapping`:处理HTTP PATCH请求的新增或修改方法。 - `@DeleteMapping`:处理HTTP DELETE请求的删除方法。 注意,当类和方法上都添加了`@RequestMapping`注解时,前端发送请求时,需要将两个注解的value值相加匹配才能访问到对应的处理方法。而且,`@RequestMapping`注解的value属性前面加不加斜杠都可以。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringMVC请求映射注解](https://blog.csdn.net/weixin_56295084/article/details/115695830)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [SpringMVCSpringMVC请求映射路径(3)](https://blog.csdn.net/qq_43751200/article/details/128340053)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [SpringMVC请求映射原理](https://blog.csdn.net/weixin_43808717/article/details/118345382)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.D.Chuang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值