SpringMVC学习总结(一)SpringMVC简介入门案例

news2025/1/11 11:58:44

SpringMVC学习总结(一)SpringMVC简介/入门案例

一、SpringMVC简介

(一)什么是MVC

MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分。

  • M:Model,模型层,指工程中的JavaBean,作用是处理数据
    • JavaBean分为两类:
      一类称为实体类Bean:专门存储业务数据的,如 Student、User 等
      一类称为业务处理 Bean:指 Service 或 Dao 对象,专门用于处理业务逻辑和数据访问
  • VView,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据
  • CController,控制层,指工程中的servlet,作用是接收请求和响应浏览器

MVC的工作流程: 用户通过视图层发送请求到服务器,在服务器中请求被Controller接收,Controller
调用相应的Model层处理请求,处理完毕将结果返回到Controller,Controller再根据请求处理的结果
找到相应的View视图,渲染数据后最终响应给浏览器。

(二)什么是SpringMVC

  • SpringMVC是Spring的一个后续产品,是Spring的一个子项目。
  • SpringMVC 是 Spring 为表述层开发提供的一整套完备的解决方案。在表述层框架历经 Structs、WebWork、Structs2 等诸多产品的历代更迭之后,目前业界普遍选择了 SpringMVC 作为 Java EE 项目表述层开发的首选方案
  • 注:三层架构分为表述层(或表示层)、业务逻辑层、数据访问层。表述层表示前台页面和后台servlet。

(三)SpringMVC的特点

  • 是Spring 家族原生产品,与 IoC 容器等基础设施无缝对接
  • 基于原生的Servlet,通过了功能强大的前端控制器DispatcherServlet,对请求和响应进行统一处理
  • 表述层各细分领域需要解决的问题全方位覆盖提供全面解决方案
  • 代码清新简洁,大幅度提升开发效率
  • 内部组件化程度高,可插拔式组件即插即用,想要什么功能配置相应组件即可
  • 性能卓著,尤其适合现代大型、超大型互联网项目要求

二、入门案例

(1)创建Maven工程
首先,创建一个空的项目:
在这里插入图片描述
在这里插入图片描述

右键创建好的项目,创建一个web模块,New——>Module:

在这里插入图片描述
在这里插入图片描述
(2)在pom.xml文件中添加打包方式

<packaging>war</packaging>

(3)引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.fox.mvc</groupId>
    <artifactId>SpringMVC_demo1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies> 
    	<!-- SpringMVC -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.1</version>
        </dependency> 
        <!-- 日志 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency> 
        <!-- ServletAPI -->
        <!--SpringMVC以前学servlet不需要导这个包是因为Tomcat自带servlet的jar包和jsp的jar包-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <!--dependencies里面的所有依赖打包后都会存放在webapp\WEB-INF\lib目录下
            而provided就不会,它是由服务器提供-->
            <scope>provided</scope>
        </dependency> 
        <!-- Spring5和Thymeleaf整合包 -->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
            <version>3.0.12.RELEASE</version>
        </dependency>
    </dependencies>
</project>

依赖加载进来后,我们可以点击右边Maven按钮看到,不光是我们导入的依赖被加载进来了,这些依赖所依赖的依赖也加载进来了。这是因为 Maven 有传递性,我们不必将所有需要的包全部配置依赖,而是配置最顶端的依赖,其他靠传递性导入
在这里插入图片描述
(4)创建web.xml
首先,在src/main下创建一个webapp目录:
在这里插入图片描述
在这里插入图片描述
File——>Project Structure——>添加web.xml:

在这里插入图片描述
将web.xml放在src\main\webapp\WEB-INF\下:
在这里插入图片描述
在这里插入图片描述
(5)配置web.xml

注册SpringMVC的前端控制器DispatcherServlet

  • 默认配置方式
<?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">

    <!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 -->
    <servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <!--设置springMVC的核心控制器所能处理的请求的请求路径
        /所匹配的请求可以是/login或.html或.js或.css方式的请求路径
        但是/不能匹配.jsp请求路径的请求 -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

此配置作用下,SpringMVC的配置文件默认位于WEB-INF下,默认名称为<servlet-name></servlet-name>标签中的名字-servlet.xml,例如,以上配置所对应SpringMVC的配置文件位于WEB-INF下,文件名为springMVC-servlet.xml而我们希望配置文件放在src\main\resources下,而WEB-INF下用于放页面,这就需要下面这种配置方式:

  • 扩展配置方式
    可通过init-param标签设置SpringMVC配置文件的位置和名称,通过load-on-startup标签设置SpringMVC前端控制器DispatcherServlet的初始化时间。
<?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">

    <!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 -->
    <servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 通过初始化参数指定SpringMVC配置文件的位置和名称 -->
        <init-param>
            <!-- contextConfigLocation为固定值 -->
            <param-name>contextConfigLocation</param-name>
            <!-- 使用classpath:表示从类路径查找配置文件,例如maven工程中的 src/main/resources -->
            <param-value>classpath:springMVC.xml</param-value>
        </init-param>
        <!--作为框架的核心组件,在启动过程中有大量的初始化操作要做
        而这些操作放在第一次请求时才执行会严重影响访问速度
        因此需要通过此标签将启动控制DispatcherServlet的初始化时间提前到服务器启动时 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <!--设置springMVC的核心控制器所能处理的请求的请求路径
        /所匹配的请求可以是/login或.html或.js或.css方式的请求路径
        但是/不能匹配.jsp请求路径的请求 -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

再在src\main\resources\下新建一个springMVC.xml:
在这里插入图片描述

<url-pattern></url-pattern>标签中使用//*的区别:

  • /所匹配的请求可以是/login.html.js.css方式的请求路径,但是/不能匹配.jsp请求路径的请求,因此就可以避免在访问jsp页面时,该请求被DispatcherServlet处理,从而找不到相应的页面。
  • /*则能够匹配所有请求,例如在使用过滤器时,若需要对所有请求进行过滤,就需要使用/*的写法。

(6)创建请求控制器

  • 由于前端控制器DispatcherServlet对浏览器发送的请求进行了统一的处理,但是具体的请求有不同的处理过程,因此需要创建处理具体请求的类,即请求控制器。
  • 请求控制器中每一个处理请求的方法成为控制器方法
  • 因为SpringMVC的控制器由一个POJO(普通的Java类)担任,因此需要通过@Controller注解将其标识为一个控制层组件,交给Spring的IoC容器管理,此时SpringMVC才能够识别控制器的存在

src\main\java下创建包,并创建请求控制器类:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
请求控制器类:

import org.springframework.stereotype.Controller;

@Controller
public class MyController {

}

(7)编写springMVC的配置文件

<?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"
       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">

    <!-- 自动扫描包 -->
    <context:component-scan base-package="com.fox.mvc.controller"/>

    <!-- 配置Thymeleaf视图解析器 -->
    <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/><!--优先级-->
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <!-- 视图前缀 -->
                        <property name="prefix" value="/WEB-INF/templates/"/>
                        <!-- 视图后缀 -->
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean> 
</beans>

视图解析器负责页面跳转。

(8)创建html页面
根据视图前缀创建一个templates目录,并创建一个index.html:
在这里插入图片描述
index.html:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org"><!--这个是thymeleaf命名空间-->
<head>
	<meta charset="UTF-8">
	<title>首页</title>
</head>
<body>
首页
</body>
</html>

(9)编写请求控制器的方法
我们用了thymeleaf视图解析器就要根据它的规则实现访问页面

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class MyController {

    //当请求为"/"时访问/WEB-INF/templates/index.html
    @RequestMapping(value = "/") //requestmapping 为请求和控制器的方法创建映射关系
    public String toIndex(){//方法名不是固定的
        //返回视图名称
        return "index";//视图名称+视图前缀+视图后缀 即页面的访问地址
    }
}

将请求地址和控制器中@RequestMapping注解的value属性值进行匹配,若匹配成功,该注解所标识的控制器方法就是处理请求的方法。

(10)部署到 Tomcat 上运行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
运行Tomcat:
在这里插入图片描述
(11)也可以访问目标页面
我们再创建一个target.html:
在这里插入图片描述
target.html:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>
这是target.html
</body>
</html>

通过index.html的超链接访问target.html:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org"><!--这个是thymeleaf命名空间-->
<head>
	<meta charset="UTF-8">
	<title>首页</title>
</head>
<body>
首页
<!--假如我们想通过绝对路径访问target.html,以下这种方法行不通:-->
<!--<a href="/target">访问目标页面target.html</a>-->

<!--我们在Tomcat里配置的上下文路径是/SpringMVC,所以可以用下面这种方法
但是上下文路径可以被修改,每修改一次下面这个路径也要跟着改,很麻烦,所以不用这方法:-->
<!--<a href="/SpringMVC/target">访问目标页面target.html</a>-->

<!--使用了thymeleaf的语法,它就会自动给我们在/target前面添加上下文路径-->
<a th:href="@{/target}">访问目标页面target.html</a>

</body>
</html>

编写请求控制器的方法:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class MyController {

    //当请求为"/"时访问/WEB-INF/templates/index.html
    @RequestMapping(value = "/") //requestmapping 为请求和控制器的方法创建映射关系
    public String toIndex(){//方法名不是固定的
        //返回视图名称
        return "index";//视图名称+视图前缀+视图后缀 即页面的访问地址
    }

    @RequestMapping("/target")
    public String toTarget(){
        //返回视图名称
        return "target";
    }
}

运行Tomcat并点击链接:
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/477985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手把手教你学会gitee的注册和代码的提交

欢迎来到壮壮的代码世界 gitee的注册和提交 一、gitee是什么&#xff1f;二、gitee怎么注册三、gitee的一些基本配置四、在gitee上创建远程仓库&#xff08;存储代码的地方&#xff09;五、clone远程仓库到本地电脑六、怎么把本地的代码推送到远程仓库去&#xff08;git的三板斧…

jQuery操作

文章目录 1. jQuery基本介绍1.1 原理示意图1.2 快速入门1.2 什么是jquery对象1.3 dom对象转jQuery对象1.4 jQuery对象转dom对象1.5 jQuery选择器1.5.1 jQuery基本选择器1.5.2 jquery层次选择器1.5.3 基础过滤选择器1.5.4 内容过滤选择器1.5.5 可见度过滤选择器1.5.6 属性过滤选…

Vue(Vue脚手架)

一、使用Vue脚手架&#xff08;Vue Cli&#xff09; Vue官方提供脚手架平台选择最新版本&#xff1a; 可以相加兼容的标准化开发工具&#xff08;开发平台&#xff09; 禁止&#xff1a;最新的开发技术版本和比较旧版本的开发平台 Vue CLI&#x1f6e0;️ Vue.js 开发的标准工…

AWS VPC 配置指南:快速创建和设置你的虚拟私有云

文章目录 一、前言二、创建 VPC2.1 进入 AWS VPC 服务2.2 创建 VPC2.3 选择所要创建的 VPC 资源2.4 输入 VPC 名称2.5 设置 IPv4 CIDR block&#xff08;IPv4 CIDR 块&#xff09;2.6 选择可用区2.7 选择公有子网的数量2.8 设置 NAT 网关和 VPC 终端节点2.9 完成创建 VPC2.10 查…

python ast 详解与用法

目录 基本概念节点类型ast.Assignast.Nameast.Constantast.Callast.Attribute 结点的遍历ast源码示例 结点的修改示例 参考链接 基本概念 python 语言在编译前会解析为抽象语法树&#xff0c;整个文件可以看作一棵树&#xff0c;树上的每个节点就代表一条语句&#xff0c;中序…

计算机中找不到msvcp140.dll无法继续执行代码,解决方法

DLL是Dynamic Link Library的缩写&#xff0c;意为动态链接库。dll文件是电脑系统及软件运行的重要文件&#xff0c;电脑如果丢失dll文件&#xff0c;那么很多软件跟游戏都是无法运行的&#xff0c;msvcp140.dll丢失这个问题就有很多小伙伴遇到&#xff0c;小编今天就分享找不到…

山东专升本计算机第一章-计算机信息技术与计算机文化

计算机信息技术与计算机文化 计算机中的信息表示 数制及其转换 数制&#xff1a;用进位的原则进行计数数码&#xff1a;数制中表示基本数值大小的不同数字符号基数&#xff1a;一种数制所使用的数码个数位权&#xff1a;数码在不同位置的权值 数制的转换 • R进制转化为十进…

【操作系统和强化学习】1.内存管理策略

文章目录 前言1.内存是什么1.1 基本硬件保护措施 碎片1.2 分段机制1.2.1 分段硬件1.3 分页 前言 CPU的调度可以提高CPU的利用率和计算机的响应用户的速度。为了改进性能&#xff0c;应该将多个进程保存在内存中。也就是说必须共享内存。 本文讨论的是如管理内存。 1.内存是什么…

知识变现海哥:我是如何通过知识变现年赚100万的

我叫王海青&#xff0c;大家都称我海哥&#xff0c;是一名知识变现导师&#xff0c;海青教育创始人。从2011年开始&#xff0c;已经从事知识变现培训服务10多年&#xff0c;帮助3000人实现了个人知识技能变现&#xff0c;一直致力于帮助普通人&#xff0c;把自己的一项知识技能…

TiDB实战篇-操作系统参数TiDB Server

操作系统参数 CPU 绿色的是设置cpu用最高的频率去使用cpu。 专门有一个内存给指定的cpu使用。减少cpu的相应时间。 内存 大页的优化&#xff0c;操作系统关闭大页 。 磁盘 TiDB Server配置 cpu 同时多少个会话 如果负载很高那么就往下面调节。 控制优先级&#xff08;…

计算卸载论文阅读01-理论梳理

标题&#xff1a;When Learning Joins Edge: Real-time Proportional Computation Offloading via Deep Reinforcement Learning 会议&#xff1a;ICPADS 2019 一、梳理 问题&#xff1a;在任务进行卸载时&#xff0c;往往忽略了任务的特定的卸载比例。 模型&#xff1a;针…

BUUCTF ciscn_2019_c_1

小白垃圾做题笔记而已&#xff0c;不建议阅读。 1前期&#xff1a; 其实刚开始拿到程序的时候我还以为是逆向题放错地方了。唉&#xff0c;做题太少了。啥也不会。我是大笨蛋。 题目中用的是ubuntu18&#xff0c;我的ubuntu没怎么用过&#xff0c;vmtools都不能用&#xff0c…

【源码解析】canal核心功能源码解析

1. 项目地址 https://github.com/alibaba/canal.git2. 模块介绍 canal核心模块的功能&#xff1a; deployer模块&#xff1a;独立部署模块&#xff0c;用于canal-server的独立启动&#xff0c;包括本地配置解析、拉取远程配置、启动canal-server。server模块&#xff1a;cana…

山东专升本计算机第六章-数据库技术

数据库技术 SQL数据库与NOSQL数据库的区别 数据库管理系统 考点 6 数据库管理系统的组成和功能 组成 • 模式翻译 • 应用程序的翻译 • 交互式查询 • 数据的组织和存取 • 事务运行管理 • 数据库的维护 功能 • 数据定义功能 • 数据存取功能 • 数据库运行管理…

MySQL备份和恢复

文章目录 一、库的备份和恢复1.库的备份2.库的恢复 二、表的备份和恢复1.表的备份2.表的恢复 备份数据&#xff0c;其实就是生成一个 sql 文件&#xff0c;把创建数据库、创建表、插入数据等各种 SQL 语句都装载到这个文件中。恢复数据&#xff0c;其实就是按顺序执行 sql 文件…

操作系统进程概述、通信

进程 进程就是程序的一次执行过程&#xff0c;同一个程序多次执行对应多个进程&#xff1b; 一、进程的组成 1、PCB &#xff08;1&#xff09;进程描述信息&#xff1a;主要是PID等关键信息&#xff1b; &#xff08;2&#xff09;进程控制和管理信息&#xff1b; &#xf…

( 数组和矩阵) 566. 重塑矩阵 ——【Leetcode每日一题】

❓566. 重塑矩阵 难度&#xff1a;简单 在 MATLAB 中&#xff0c;有一个非常有用的函数 reshape &#xff0c;它可以将一个 m x n 矩阵重塑为另一个大小不同&#xff08;r x c&#xff09;的新矩阵&#xff0c;但保留其原始数据。 给你一个由二维数组 mat 表示的 m x n 矩阵…

unity-VRTK-simulator开发学习日记3(射线样式|忽略层|有无效名单)

目录 射线样式 组成 可用状态 材质替换 射线激活设置为常态 忽略层级&#xff08;射线等&#xff09; 自定义忽略层级 &#xff08;射线等&#xff09; 有效名单和无效名单 有效名单 无效名单 创建一个模拟手柄的按钮&#xff08;键盘键入按钮&#xff09; 输入系统…

最新Wordpress网站因重装宝塔而导致数据库崩溃无法访问的终极解决办法

在当今数字化时代&#xff0c;拥有自己的网站已成为越来越多人展示个人或企业信息的重要方式。虽然建立并维护自己网站看起来是一个简单的过程&#xff0c;但如果出现问题&#xff0c;比如数据丢失、网站无法正常运行等情况时&#xff0c;往往会令用户感到十分懊恼和无助。在这…

sql注入(二)盲注,二次注入,宽字节注入

目录 目录 一、布尔盲注 1.判断库名的长度 2.判断数据库名 2.1判断数据库名首字符 2.2 判断数据库名的其余字符 二、时间盲注&#xff1a; 1.判断库名的长度 2.判断库名&#xff1a; 3.判断表名payload&#xff1a; 4.爆出列名 5.爆数据 三、二次注入 1.原理&#…