🍿*★如果文章对你有帮助【关注👍点赞??收藏?】一起努力!★* 🍿
🧑?🎓 个人主页:花棉袄
📖 本章内容:【Spring】📺学习视频推荐🗒?配套代码📝官方文档 👑 版权: 本文由【花棉袄】原创🟠在CSDN首发🟠需要转载请联系博主
🏰SpringMVC概述
?🏰SpringMVC是基于Servlet封装的用于实现MVC控制的框架,实现前端和服务端的交互。 ?🏰SpringMVC是基于Spring的扩展、提供了一套完善的MVC注解 ?🏰SpringMVC对RESTful URL设计方法提供了良好的支持 ?🏰SpringMVC在数据绑定、视图解析都提供了多种处理方式,可灵活配置
🥦SpringMVC本质工作
?🥦接收并解析请求 ?🥦处理请求 ?🥦数据渲染、响应请求
🍵框架部署
?🍵基于Maven创建一个web工程 ??💜SpringMVC是一个web框架,应用在web工程中 ??💜添加webapp目录并创建WEB-INF目录 ??💜打包方式改成war ??💜首先通过组件的方式添加tomcat ??💜配置tomcat用来启动项目 ?🍵添加SpringMVC依赖
?🧡spring-context ?🧡spring-aspects ?🧡spring-jdbc ?🧡spring-test ?🧡spring-web ?🧡spring-webmvc
<properties>
<spring.version>5.2.13.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
?🍵创建SpringMVC配置文件 ??添加MVC命名空间
<?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:aop="http://www.springframework.org/schema/aop"
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/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:annotation-config/>
<context:component-scan base-package=""/>
<mvc:annotation-driven/>
</beans>
?🍵在web.xml中配置SpringMVC的前端控制器 ?SpringMVC提供了一个名为DispatcherServlet的类(SpringMVC前端控制器),用于拦截用户请求交由SpringMVC处理
<?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_3_1.xsd"
version="3.1">
<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:spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>
?如果出现下面这个问题需要进行配置 ?web.xml 是部署描述器,不能直接拷贝,需要进行配置
🍥框架使用
?在SpringMVC中,我们把接收用户请求、处理用户请求的类称之为Controlelr(控制器)
?🍥创建控制器 ????创建控制器类
????创建一个名为com.qfedu.controllers 的包(包需要在Spring注解扫描的范围内) ????创建一个类(无需做任何的继承和实现) ????在类上添加@Controller 注解声明此类为SpringMVC的控制器 ????在类上添加@RequestMapping("url") 声明此控制器类的请求url(可以省略)
@Controller
@RequestMapping("/book")
public class BookController {
@RequestMapping("/add")
public void addBook(){
System.out.println("---book akdd");
}
}
访问:http://localhost:8080/springmvc/book/add ?🍥静态资源配置 ????/* 和 / 的区别 ???/* 拦截所有的HTTP请求,包括.jsp的请求,都做为控制器类的请求路径来处理 ???/ 拦截所有的HTTP请求,但不包括.jsp的请求,不会放行静态资源的请求(html/css/js/图片) ????静态资源放行配置
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/imgs/**" location="/imgs/"/>
<mvc:resources mapping="/pages/**" location="/pages/"/>
🧆前端提交数据到控制器
?🧆表单提交 ??表单提交:输入框需要提供name属性,SpringMVC控制器是通过name属性取值的
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
<title>Title</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<h3>添加图书</h3>
<form action="book/add" method="post">
<p>图书名称:<input type="text" name="name"/></p>
<p>图书作者:<input type="text" name="author"/></p>
<p>图书价格:<input type="text" name="price"/></p>
<p><input type="submit" value="提交"/></p>
</form>
</body>
</html>
?🧆URL提交
<h3>超链接提交</h3>
<a href="book/get?name=Java">URL提交</a>
?🧆AJAX提交 ??AJAX提交:请求行、请求头、请求体都可以用来传值
<h3>AJAX提交</h3>
<input type="button" value="ajax提交" id="btn1"/>
<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
$("#btn1").click(function(){
var obj = {};
obj.bookName = "Python";
obj.bookAuthor="杰哥";
obj.bookPrice = 2.22;
var s = JSON.stringify(obj);
$.ajax({
url:"book/update",
type:"post",
contentType:"application/json",
data:s,
success:function(res){
console.log(res);
}
});
});
</script>
🍑控制器接收前端提交的数据
?🍑 @RequestParam 接收请求行传值
💜 表单提交 💜 URL提交 💜 $.ajax()请求的url传值 💜 $.post()中的{}传值 💜 $.get()中的{}传值
??前端提交数据
<form action="book/add" method="post">
<p>图书名称:<input type="text" name="name"/></p>
<p>图书作者:<input type="text" name="author"/></p>
<p>图书价格:<input type="text" name="price"/></p>
<p><input type="submit" value="提交"/></p>
</form>
??控制器接收数据
@RequestMapping("/add")
public void addBook(@RequestParam("name") String a,
@RequestParam("author") String b,
@RequestParam("price") double c){
System.out.println("---book add");
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
🚨注意 如果控制器方法中接收数据的参数名与请求行传值的key一致,则@RequestParam注解可省略
?🍑 @RequestHeader :接收请求头 传递的数据
??前端提交数据
<input type="button" value="ajax提交" id="btn1"/>
<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
$("#btn1").click(function(){
$.ajax({
url:"book/get",
type:"post",
headers:{
token:"ajax:headers"
},
success:function(res){
console.log(res);
}
});
});
</script>
??控制器接收数据
@RequestMapping("/get")
public void getName(@RequestHeader("token") String token) {
System.out.println(token);
}
?🍑 @RequestBody :注解用于接收请求行 传递的数据 ??前端提交数据
<input type="button" value="ajax提交" id="btn1"/>
<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
$("#btn1").click(function(){
var obj = {};
obj.bookName = "Python";
obj.bookAuthor="杰哥";
obj.bookPrice = 2.22;
var s = JSON.stringify(obj);
$.ajax({
url:"book/update",
type:"post",
contentType:"application/json",
data:s,
success:function(res){
console.log(res);
}
});
});
</script>
??控制器接收数据
@RequestMapping("/update")
public void update(@RequestBody String param) {
Map maps = JSON.parseObject(param);
for (Object obj : maps.keySet()){
System.out.println("key为:"+obj+"值为:"+maps.get(obj));
}
}
?🍑 ??前端提交数据
??控制器接收数据 ?🍑
🍵
🌸
🍅
🍎
🥭
🍍?
🍌
🍏往期回顾
|