一、SpringMVC概念
SpringMVC 是 Spring 框架中的一个模块,它是一个基于 MVC设计模式的 Web 框架,用于构建基于 Java 技术的 Web 应用程序。Spring的web框架围绕DispatcherServlet [ 调度Servlet ] 设计。
它的主要原理是将 Web 应用程序分成模型(Model)和视图(View)两个部分,并采用控制器(Controller)来管理它们之间的交互。模型表示 Web 应用程序中的数据部分,通常对应于 Java 对象或数据库表;视图表示 Web 应用程序中的用户界面部分,通常对应于 HTML、JSP 页面等;控制器作为 Web 应用程序的中心组件,负责管理模型和视图之间的数据传递和交互。
二、SpringMVC基础程序
1、添加框架支持
2、导入pom依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.27</version>
</dependency>
</dependencies>
3、创建jsp包,在包下创建hello.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>SpringMVC</title>
</head>
<body>
${msg}
</body>
</html>
4、在controller层创建HelloController.java
@Controller
public class HelloController {
@RequestMapping("/hello")
public String sayHello(Model model){
//向模型中添加属性msg与值,可以在JSP页面中取出并渲染
model.addAttribute("msg","hello,SpringMVC");
return "hello";
}
}
5、配置springmvc-servlet.xml
<?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: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
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
<context:component-scan base-package="com.demo.controller"/>
<!-- 让Spring MVC不处理静态资源 -->
<mvc:default-servlet-handler />
<mvc:annotation-driven />
<!--添加 视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
6、配置web.xml文件
<?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_4_0.xsd"
version="4.0">
<!--1.注册servlet-->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--通过初始化参数指定SpringMVC配置文件的位置,进行关联-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!-- 启动顺序,数字越小,启动越早 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!--所有请求都会被springmvc拦截 -->
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
7、配置tomcat服务器
8、打开模块设置,创建lib文件夹,把库导进去(不做这步会404)
9、运行后输入http://localhost:8080/hello测试
三、RestFul风格
传统方式操作资源 :通过不同的参数来实现不同的效果!方法单一,post 和 get
http://127.0.0.1/item/queryItem.action?id=1 查询,GET
http://127.0.0.1/item/saveItem.action 新增,POST
http://127.0.0.1/item/updateItem.action 更新,POST
http://127.0.0.1/item/deleteItem.action?id=1 删除,GET或POST
使用RESTful操作资源 :可以通过不同的请求方式来实现不同的效果!如下:请求地址一样,但是功能可以不同!
http://127.0.0.1/item/1 查询,GET
http://127.0.0.1/item 新增,POST
http://127.0.0.1/item 更新,PUT
http://127.0.0.1/item/1 删除,DELETE
在Spring MVC中可以使用 @PathVariable 注解,让方法参数的值对应绑定到一个URI模板变量上。
@RequestMapping("/commit/{p1}/{p2}")
public String index(@PathVariable int p1, @PathVariable int p2, Model model){
int result = p1+p2;
model.addAttribute("msg", "结果:"+result);
//返回视图位置
return "hello";
}
使用method属性指定请求类型
@RequestMapping(value = "/hello",method = {RequestMethod.POST})
public String sayHello(Model model){
//向模型中添加属性msg与值,可以在JSP页面中取出并渲染
model.addAttribute("msg","hello,SpringMVC");
return "hello";
}
所有的地址栏请求默认都会是GET类型的,所以会报405错误
以下几个是组合注解
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
如@GetMapping 是 @RequestMapping(method =RequestMethod.GET) 的一个快捷方式。
四、数据处理及跳转
通过SpringMVC来实现转发和重定向 - 无需视图解析器;
测试前,需要将视图解析器注释掉
//转发
@RequestMapping(value = "/hello")
public String sayHello(Model model){
//向模型中添加属性msg与值,可以在JSP页面中取出并渲染
model.addAttribute("msg","hello,SpringMVC");
return "/hello.jsp";
}
//转发
@RequestMapping(value = "/hello")
public String sayHello(Model model){
//向模型中添加属性msg与值,可以在JSP页面中取出并渲染
model.addAttribute("msg","hello,SpringMVC");
return "forward:/hello.jsp";
}
@RequestMapping(value = "/hello")
public String sayHello(Model model){
//向模型中添加属性msg与值,可以在JSP页面中取出并渲染
model.addAttribute("msg","hello,SpringMVC");
return "redirect:/index.jsp";
}
@RequestParam和@RequestBody
@RequestParam用于获取URL和Header中的参数,而@RequestBody用于获取请求体中的数据。一般@RequestBody用于传输一个对象,@RequestParam用于传输基本类型,例如
public void createUser(@RequestParam(name = "id") int id, @RequestBody User user) {
}
@Controller和@RestController
都可以用来标注一个类,表示这个类是处理HTTP请求的控制器。它们的区别如下:
@Controller注解用于标记一个类是Spring MVC中的控制器,可以处理HTTP请求。在方法中处理请求时,需要使用@ResponseBody注解将方法的返回值转换为HTTP响应体。
@RestController是一个组合注解,包含@Controller和@ResponseBody注解,对于Spring 4.0及以上版本,建议使用@RestController。使用@RestController注解标注的控制器自动将所有带有@ResponseBody的方法返回的对象转换为JSON或XML格式的响应体。
五、Json交互
六、Ajax
七、拦截器
参考视频:【狂神说Java】SpringMVC最新教程IDEA版通俗易懂