一.概述
Spring MVC 是一种基于 Java 的框架,用于创建 Web 应用程序。它是 Spring 框架的一部分,遵循 MVC(Model-View-Controller,模型-视图-控制器)设计模式。Spring MVC 的主要功能包括:
- 控制器(Controller):处理用户请求并返回响应。控制器通常会调用业务逻辑层,然后选择合适的视图来展示数据。
- 模型(Model):表示应用程序的数据和业务逻辑。它包含了处理数据和执行业务规则的类。
- 视图(view):负责显示数据给用户。视图可以是 JSP 页面、HTML 文件、或者其他任何形式的网页模板。
- 前端控制器(DispatcherServlet):Spring MVC使用前端控制器来接收所有的请求,然后将这些请求分发给具体的控制器进行处理。
- 视图解析器(ViewResolver):负责将逻辑视图名称解析为实际的视图文件(如 JSP 文件)。
Spring MVC 的主要优点包括:
1.松耦合:通过将请求处理逻辑、业务逻辑和视图分离,提高了应用程序的可维护性。
2.灵活性:支持多种视图技术,如 JSP、Thymeleaf 等。
3.集成:可以与 Spring 框架的其他组件(如 Spring Security、Spring Data)无缝集成,提供全面的解决方案。
二.原理与流程
1.常用注解
2.简单的页面访问测试
!!!在这之前要配置Tomcat。!!!
(1)首先在resources下创建配置文件spring-mvc.xml(任何名字都可以)并开启注解扫描:
<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
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="buka" />
</beans>
这里的base-package是要扫描的包
(2)配置DispatcherServlet:
在WEB-INF下的web.xml中添加以下代码:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
注意上面的classpath*后面接的是刚刚创建的配置文件
(3)在包下创建MyController并书写测试代码:
注意要用@Controller注解将该类注入并用@RequestMapping将地址映射保存进Map中
(4)启动服务器并访问"/hello"
这表明返回index.jsp页面成功,我们的项目没有问题。
3.@RequestMapping详解
(1)@RequestMapping 可以映射单个路径 也可以映射多个路径:
多路径的写法:@RequestMapping(value={"/hello","/test"})
(2)可以通过method指定请求类型,也可以用对应派生注解:
- 处理Get请求的映射: @GetMapping === @RequestMapping(method = RequestMethod.GET)
- 处理Post请求的映射: @PostMapping === @RequestMapping(method = RequestMethod.POST)
- 处理Put请求: @PutMapping === @RequestMapping(method = RequestMethod.PUT)
- 处理Delete请求: @DeleteMapping === @RequestMapping(method = RequestMethod.DELETE)
(3)可以通过 params 限定在发送请求的时候需要携带参数:
- params ={"name"} 发送请求时 必须携带name参数
- params={"!name"} 发送请求时 不能写携带name参数
- params={"name=zhangsan"} 发送请求时 必须携带name参数 而且参数值必须是zhangsan
- params={"name!=zhangsan"} 发送请求时 可以不携带name参数了 如果携带 参数的值不能为zhangsan
(4)通过headers进行请求头信息匹配
headers = {"User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"}
只能通过谷歌浏览器发送请求了 其他浏览器不好使
(5)部分演示:
创建test.jsp:
<%--
Created by IntelliJ IDEA.
User: Lenovo
Date: 2024/7/19
Time: 10:14
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/hello" method="post">
用户名:<input type="text" name="name">
<input type="submit" value="submit">
</form>
</body>
</html>
修改MyController中的hello方法:
启动服务器并访问test.jsp页面:
点击提交观察页面跳转和控制台:
(6)占位符的使用:
@RequestMapping(value = "/test/{id}" )
public String test(@PathVariable(value = "id",required = false)String id){
System.out.println("id=="+id);
System.out.println("test执行了");
return "/test.jsp";
}
注意@PathVariable后面的value要与上面路径中的{}中的名字一致
以上是SpringMVC的简单介绍
关于@RequestMapping接下来还有获取请求参数中的值和设置参数值,放到以后的文章中吧