SpringMVC入门和控制器
了解SpringMVC之前需要了解三层架构,三层架构是一种经典的软件设计模式,通过将应用进行分层,来实现应用内部的解耦,提升可扩展性和可维护性。定位:****系统级分层(垂直拆分)。
- 表现层:处理用户交互、接收参数、展示数据
- 业务层:处理业务逻辑,(例如用户注册就是一个业务)判断用户是否注册,如果已经注册,则给出异常提示等。
- 持久层(又名数据访问层):与数据源交互,例如我们之前学的mybatis就是持久层的框架。

这样的三层架构被称为MVC架构,分开来就是三个单词的首字母:Model,View,Controller一种软件设计模式,其核心在于通过数据、界面、控制分离,让代码更清晰。
安装和配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.25.RELEASE</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.0</version> </dependency>
|
请根据自己的java版本选择适配的依赖版本。
将项目的打包方式设定为war包
1
| <packaging>war</packaging>
|
引入Tomcat
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8080</port> <uriEncoding>UTF-8</uriEncoding> <path>/</path> </configuration> </plugin>
</plugins> </build>
|
用类配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| @Configuration @ComponentScan("com.example.mvc") @EnableWebMvc public class SpringMvcConfig implements WebMvcConfigurer {
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry .addResourceHandler("/static/**") .addResourceLocations("classpath:/static/") .setCacheControl(CacheControl.maxAge(Duration.ofDays(365))); } }
|
配置servlet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override protected Class<?>[] getRootConfigClasses() { return new Class[0]; }
@Override protected Class<?>[] getServletConfigClasses() { return new Class[]{SpringMvcConfig.class}; }
@Override protected String[] getServletMappings() { return new String[]{"/"}; } }
|
使用
写一个测试Controller
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;
@RequestMapping("/mvc") @Controller public class MvcController { @RequestMapping("/test") @ResponseBody public String test() { System.out.println(1); return "test"; }
@RequestMapping("/index") public String index() { return "/static/index.html"; } }
|
测试路径是/mvc/test和/mvc/index
写一个静态界面
1 2 3 4 5 6 7 8 9 10 11
| <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>测试用例</title> </head> <body> <h1>这是一个测试界面</h1> <p>测试完毕</p> </body> </html>
|
访问http://localhost:8080/mvc/test和http://localhost:8080/mvc/index来展示效果
关于控制器注释
Controller即控制器,是处理客户端请求、执行业务逻辑并返回响应的核心组件,是MVC中的C
| 职责 |
具体说明 |
| 请求接收 |
接收HTTP请求(GET、POST、PUT、DELETE等) |
| 参数绑定 |
从请求中提取参数(URL参数、表单数据、JSON、文件等) |
| 业务处理 |
调用Service层处理业务逻辑 |
| 响应构建 |
返回视图名称、JSON数据、重定向等响应 |
| 异常处理 |
处理请求过程中的异常情况 |
我们写的每一个控制器都要用@Controller注释标记,才能被Spring容器所管理,然而能够起到相同作用的注释有四个,约定俗成上有不同的适用场景。
- Controller注解:通常用在控制器上。(非常常用)
- Service注解:通常用在我们的业务实现类上(非常常用)
- Repository注解:通常用在持久层上,跟数据库交互的类上(取决于你使用的持久层框架)
- Indexed注解:通常用在类或方法上(相对较少使用)