SpringMVC
我是跟着b站狂神说的SpringMVC来进行学习的。这是我的笔记。www.bilibili.com/video/BV1aE…
一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情。
ssm:mybatis + Spring + SpringMVC
JavaSE:认真学习。老师带,入门快。
JavaWeb:认真学习。老师带,入门快。
框架:研究官方文档,锻炼自学能力,锻炼笔记能力,锻炼项目能力。
以后要学的东西:CSS + HTML + JS + SpringMVC + VUE + SpringBoot + SpringCloud + LInux
需要了解的前端框架:vue、angularjs、react、
后续要从 MVC 延申的框架:MVP MVVM
什么是 MVC
- MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。
- 是将业务逻辑、数据、显示分离的方法来组织代码。
- MVC主要作用是降低了视图与业务逻辑间的双向偶合。
- MVC不是一种设计模式,MVC是一种架构模式。当然不同的MVC存在差异。
**Model(模型):**数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据Dao) 和 服务层(行为Service)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。
**View(视图):**负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。
**Controller(控制器):**接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。也就是说控制器做了个调度员的工作。
最典型的MVC就是JSP + servlet + javabean的模式。
回顾Servite
MVC框架要做哪些事情
- 将url映射到java类或java类的方法 .
- 封装用户提交的数据 .
- 处理请求--调用相关的业务处理--封装响应数据 .
- 将响应的数据进行渲染 . jsp / html 等表示层数据 .
什么是 SpringMVC
Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。
SpringMVC 优点
- 轻量级,简单易学
- 高效 , 基于请求响应的MVC框架。和之前的 MVC 相似。
- 与Spring兼容性好,无缝结合
- 约定优于配置
- 功能强大:RESTful、数据验证、格式化、本地化、主题等
- 简洁灵活
MVC 和 SpringMVC 的区别
原来的 MVC 可能用户需要面对多个 servlet
当我们使用了 SpringMVC 的时候,就出现了一个 DispatcherServlet 来作为用户和 servlet 之间的中转站
它起到了 调度、请求处理、适配URL、跳转页面 的功能。
第一个 SpringMVC 程序
第一步 :导入依赖
<dependencies>
<!-- junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- log4j日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--Spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.17</version>
</dependency>
<!--servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
确保自己的项目中有spring依赖 我们的 Spring 是 SpringMVC 的基础
第二步:将项目依赖存入 lib 目录下
如果没有,则在 WEB-INF 目录上右键新建 lib 目录
将依赖全选即可
第三步:配置 DispatchServlet
<?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">
<!--
第三步:配置 DispatchServlet
这个是 SpringMVC 的核心。用来代替以前 Servlet 的任务进行请求转发和选择页面返回给用户的
现在所有的请求都会走 DispatchServlet
-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--DispatchServlet 要绑定 Spring 的配置文件-->
<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 中,url-pattern 有 ‘/’ 和 ‘/*’
/:表示会匹配(响应)所有的请求,但是不会去匹配(响应) jsp 后缀的 请求。
/*:响应所有格式 url 的请求。
-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
我们可以选择先创建 Spring 配置文件或配置 DIspatchServlet。
这里的配置的 DispatchServlet 和以前学习的 MVC 中的 Servlet 的作用是一样的。
第四步:创建 Spring 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--springmvc 核心三要素-->
<!--
处理器映射器:用来分析 url,找到相应 url 的 bean 的 id 并返回到 DispatchServlet
-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--
处理器适配器:根据 DispatchServlet 给的 bean id 找到相应的 bean。
-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--
视图解析器,class 是可以根据需求修改。
识别 controller 返回的视图地址,在地址名字前后加上下面设置的前缀后缀。
未来要学的模板引擎 Thymeleaf Freemarker
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
这一步的作用就是完成了 2、4、5、8、9、10 这几步
可以理解为这步骤起到了:
【识别 URL 内容】
【选择合适的 controller 并返回数据和要跳转的页面】
【给用户调取要跳转的页面并返回给前端】
第五步:创建 Controller 和对应的 JSP 页面
controller
package cn.hyz.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author workplace
* @date 2022/4/9 20:09
*/
public class HelloController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView();
// 业务代码
String str = "helloHYZ";
mv.addObject("str", str);
// 视图跳转
mv.setViewName("test");
return mv;
}
}
jsp
<%--
Created by IntelliJ IDEA.
User: workplace
Date: 2022/4/9
Time: 19:30
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>
${str}
</body>
</html>
第六步:测试结果
加上框起的后缀就可以跳转到对应的页面并输出内容