Java开发学习(二十四)—-SpringMVC设置请求映射路径

一、环境准备

  • 创建一个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.itheima</groupId>   <artifactId>springmvc_03_request_mapping</artifactId>   <version>1.0-SNAPSHOT</version>   <packaging>war</packaging> ​   <dependencies>     <dependency>       <groupId>javax.servlet</groupId>       <artifactId>javax.servlet-api</artifactId>       <version>3.1.0</version>       <scope>provided</scope>     </dependency>     <dependency>       <groupId>org.springframework</groupId>       <artifactId>spring-webmvc</artifactId>       <version>5.2.10.RELEASE</version>     </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>/</path>         </configuration>       </plugin>     </plugins>   </build> </project> ​
  • 创建对应的配置类

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

    @Controller public class UserController { ​     @RequestMapping("/save")     @ResponseBody     public String save(){         System.out.println("user save ...");         return "{'module':'user save'}";     }          @RequestMapping("/delete")     @ResponseBody     public String save(){         System.out.println("user delete ...");         return "{'module':'user delete'}";     } } ​ @Controller public class BookController { ​     @RequestMapping("/save")     @ResponseBody     public String save(){         System.out.println("book save ...");         return "{'module':'book save'}";     } }

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

Java开发学习(二十四)----SpringMVC设置请求映射路径

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

Java开发学习(二十四)----SpringMVC设置请求映射路径

从错误信息可以看出:

  • UserController有一个save方法,访问路径为http://localhost/save

  • BookController也有一个save方法,访问路径为http://localhost/save

  • 当访问http://localhost/save的时候,到底是访问UserController还是BookController?

二、问题分析

团队多人开发,每人设置不同的请求路径,冲突问题该如何解决?解决思路:为不同模块设置模块名作为请求路径前置

对于Book模块的save,将其访问路径设置http://localhost/book/save

对于User模块的save,将其访问路径设置http://localhost/user/save

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

三、设置映射路径

步骤1:修改Controller
@Controller public class UserController { ​     @RequestMapping("/user/save")     @ResponseBody     public String save(){         System.out.println("user save ...");         return "{'module':'user save'}";     }          @RequestMapping("/user/delete")     @ResponseBody     public String save(){         System.out.println("user delete ...");         return "{'module':'user delete'}";     } } ​ @Controller public class BookController { ​     @RequestMapping("/book/save")     @ResponseBody     public String save(){         System.out.println("book save ...");         return "{'module':'book save'}";     } }

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

步骤2:优化路径配置

优化方案:

@Controller @RequestMapping("/user") public class UserController { ​     @RequestMapping("/save")     @ResponseBody     public String save(){         System.out.println("user save ...");         return "{'module':'user save'}";     }          @RequestMapping("/delete")     @ResponseBody     public String save(){         System.out.println("user delete ...");         return "{'module':'user delete'}";     } } ​ @Controller @RequestMapping("/book") public class BookController { ​     @RequestMapping("/save")     @ResponseBody     public String save(){         System.out.println("book save ...");         return "{'module':'book save'}";     } }

小结

Java开发学习(二十四)----SpringMVC设置请求映射路径

注意:

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

  • @RequestMapping注解value属性前面加不加/都可以

 

发表评论

相关文章