SpringMVC框架①

目录

一、SpringMVC概述

1. 什么是MVC

2. 什么是SpringMVC

3. springMVC特点

二、HellWorld

1. 开发环境

2. 创建maven工程

3. 配置web.xml

4. 创建请求控制器

5. 创建springMVC的配置文件

6. 测试HelloWorld

三、@RequestMapping注解

1、@RequestMapping功能

2、@RequestMapping注解的位置


一、SpringMVC概述

1. 什么是MVC

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

M:model 模型层,指工程中的JavaBean(不是实例类,是当前工程里所有处理数据的一个类 处理数据 的类学过 实体类存储数据 原来实现持久化操作时查询表中的一个数据都让他来对应当前实体类对象就 是因为实体类是用来存储数据的),作用是处理数据

JavaBean分为两类

一类称为实体类bean:专门用来存储业务数据 原来实现持久化操作时查询表中的一个数据都让他 来对应当前实体类对象就是因为实体类是用来存储数据的

一类称为业务处理的bean:处理数据的类 比如Service处理业务逻辑Dao用来查询数据库实现持久 化操作的,专门用于处理业务逻辑和数据访问

V:视图层,指工程中的html或jsp等页面,作用是与用户进行业务交互,展示数据

C:Controller,其实就是Servlet 控制层 主要接受请求和响应 Controller再根据请求处理的结果找到响 应的View视图,渲染数据后最终响应给浏览器。

MVC的工作流程:

用户通过视图层发送请求到服务器,服务器中能够接受请求处理请求响应浏览器的就是控制层 接受请 求之后 调用对应的service来处理业务逻辑 service再调用Dao进行数据库的操作 然后结果 返回service 再返回给控制层 控制层根据结果来响应浏览器 在服务器中请求被Controller接受,Controller调用相应 的Model层处理请求,处理完毕后将结果返回Controller,再根据请求处理的结果找到相应的View视 图,渲染数据后最终响应给浏览器

2. 什么是SpringMVC

SpringMVC是Spring的一个后续产品 是spring的一个子项目

SpringMVC是spring为表述层开发提供的一整套完备的解决方案

不用写的很复杂 因为springMVC封装了请求响应等功能 所以我们只需使用springMVC为我们提供的实现 各个功能的代码 然后完成一个请求的处理了

目前业界普遍选择了SpringMVC作为javaEE项目表述层开发的首选方案

框架其实是配置文件加jar包

3. springMVC特点

  • Spring家族原生产品,与IOC容器等基础设施无缝对接,不需要我们创建ioc容器
  • 基于原生的Servlet,封装了之后,通过了功能强大的前端控制器DispatcherServlet,对请求和 响应进行统一处理(原来的浏览器发送请求要我们自己写servlet处理 而现在 发送的请求都是被前端 控制器来进行统一处理,过程都封装了比如跳转重定向传参。所以我们需要使用mvc提供使用的方 式)
  • 表述层各细分领域需要解决的问题全方位覆盖,提供全面解决方案。 只需要接受前端控制器处理之后的数据就可以 形参不用getparamer了只要在真正处理请求和响应方法里面在形参位置写一个形参直接接收请求 参数
  • 代码清新简洁,大幅度提升开发效率
  • 内部组件化程度高,可插拔式即插即用,想要什么功能配置相应组件即可 如果要实现什么功能,只需要将对应的组件配置到springMVC的核心配置文件中就可以直接实现
  • 性能卓越,尤其适合现代大型、超大型互联网项目要求

二、HellWorld

1. 开发环境

2. 创建maven工程

是一个构建工具 通过原材料生产完整工程--构建 我们使用的maven其实是通过maven来管理jar包 打包 得引入依赖

web.app里配web.xml是web工程的入口配置文件 里面可以注册过滤器监听器

servlet webinfo下只放页面

3. 配置web.xml

注册SpringMVC的前端控制器DispatcherServlet

servlet要处理请求就得注册 为什么注册 因为浏览器不能直接访问到一个类,想访问servlet必须设置 一个匹配路径 如果路径匹配,当前请求就会被servlet来进行处理

/  当前浏览器发送的所有请求 但是不包括jsp为后缀的请求路径 因为它本质是servlet服务器处理了就不 会显示页面了 其他请求都交给前端控制器处理

<?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">
<!-- 4 为什么要配置 因为当前浏览器发送的请求统一交给前端控制器来处理,而前端控制器是一个
servlet 我们想要servlet处理请求就必须在web.xml中进行注册
注册过程中通过init-param 配置文件的位置和名称-->
<servlet><servlet-name>mvcServlet</servlet-name>
<servletclass>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 配置springMVC配置文件的位置和名称-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-config.xml</param-value>
</init-param><!-- servlet的生命周期,默认是在第一次访问时候初始化 前端控制器封装了所有请求的处理 所
以初始化执行很多内容 会影响第一次访问的速度 -->
<!-- 所以 加load 将前端控制器初始化时间提前到服务器启动时候 这时就不会影响到第一次访问
速度了--><load-on-startup>1</load-on-startup></servlet><servlet-mapping>
<servlet-name>mvcServlet</servlet-name>
<!-- 前端控制器处理请求的路径是上下文路径下的所有的请求路径-->
<url-pattern>/</url-pattern>
<!-- / 当前浏览器发送的所有请求 但是不包括jsp为后缀的请求路径 因为它本质是servlet服
务器处理了就不会显示页面了 其他请求都交给前端控制器处理-->
<!-- 如果写路径就相当于告诉Dispatcher只处理这个路径的请求了,就不能进行统一处理了-->
</servlet-mapping>
</web-app>

4. 创建请求控制器

由于前端控制器对浏览器发送的请求进行了统一的处理,但是具体的请求有不同的处理过程,因此需要 创建处理具体请求的类,即请求控制器

请求控制中每一个处理请求的方法成为控制器方法

和servlet一样吗不一样 因为数据已经在前端处理器中获取过了 所以只需要创建方法 通过springMVC方 式去匹配这个方法

因为springMVC的控制器由一个普通java类担任,因此需要通过@Controller注解将其标识为一个控制层 组件,交给spring的IoC容器管理,此时SpringMVC才能够识别控制器的存在

注解加扫描的方式来配置当前控制器

把一个类标识为IoC容器组件的注解有四个 :

  • Component------当前类标识为普通组件
  • Controller---------当前标识为控制层组件
  • Service-------------当前标识为业务层组件
  • Repository--------当前标识为持久层组件

5. 创建springMVC的配置文件


<servlet-mapping>
<servlet-name>mvcServlet</servlet-name>
<!-- 前端控制器处理请求的路径是上下文路径下的所有的请求路径-->
<url-pattern>/</url-pattern>
<!-- / 当前浏览器发送的所有请求 但是不包括jsp为后缀的请求路径 因为它本质是servlet服
务器处理了就不会显示页面了 其他请求都交给前端控制器处理-->
<!-- 如果写路径就相当于告诉Dispatcher只处理这个路径的请求了,就不能进行统一处理了-->
</servlet-mapping>
</web-app>
<!-- 自动扫描包 -->
<context:component-scan base-package="com.atguigu.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>
<!--
处理静态资源,例如html、js、css、jpg
若只设置该标签,则只能访问静态资源,其他请求则无法访问
此时必须设置<mvc:annotation-driven/>解决问题
-->
<mvc:default-servlet-handler/>
<!-- 开启mvc注解驱动 -->
<mvc:annotation-driven>
<mvc:message-converters>
<!-- 处理响应中文内容乱码 -->
<bean
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="defaultCharset" value="UTF-8" />
<property name="supportedMediaTypes">
<list>
<value>text/html</value>
<value>application/json</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>

6. 测试HelloWorld

实现对首页的访问

@Controller
public class HelloController {
// 只有我们把这个类作为IoC容器的一个组件的时候他才是一个控制器
// 变绿了表示,当前这个类对象交给IoC容器管理了
// 注解请求映射 作用 将浏览器当前的请求和控制器方法创建映射关系 如果设置value属性
// 就是当浏览器发送的请求为/即上下文路径时候 他就会执行我们当前注解所标识的方法
// 返回视图名称 index被视图解析器解析加上前后缀就能跳转到最终的页面
@RequestMapping(value = "/")
public String index(){
// 返回视图名称 ---决定了我们要跳转到的页面 因为当前的htnl是无法直接访问的
return "index";
}
}

href

以斜线开头的路径叫做绝对路径 而绝对路径又分为浏览器解析 和 服务器解析

要想通过thmleaf解析属性可以在属性前加th:

怎么解决浏览器解析的绝对路径 当检测到里面是绝对路径时候 就会自动添加上下文路径 访

<a th:href="@{/target}">访问目标页面target.html</a>

主页index.html中设置超链接

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h1>首页</h1>
<a th:href="@{/hello}">HelloWorld</a><br/>
</body>
</html>

在请求控制器中创建处理请求的方法

@RequestMapping("/hello")
public String HelloWorld() {
return "target";
}

三、@RequestMapping注解

1、@RequestMapping功能

作用,将请求和处理请求的控制器方法关联起来,建立映射关系

SpringMVC接收到指定的请求,就会来找到映射关系中对应的控制器方法 来处理这个请求

一个对应请求对应一个处理器方法 value值不能相同

2、@RequestMapping注解的位置

@RequestMapping标识一个类:设置映射请求的请求路径的初始信息

@RequestMapping标识一个方法:设置映射请求请求路径的具体信息 先初始再具体信息

@Controller
@RequestMapping("/test")
public class RequestMappingController {
//此时请求映射所映射的请求的请求路径为:/test/testRequestMapping
@RequestMapping("/testRequestMapping")
public String testRequestMapping(){
return "success";
}
}

3、@RequestMapping注解的value属性

必须设置

发送一个请求最直观的表示方式就是一个请求路径

alt+enter 进入接口方法 再用 alte+7 查看里面的属性

value值可以是数组 value={"test","test1"} 只满足任何一个请求地址就会调用此方法

@RequestMapping注解的value属性通过请求的请求地址匹配请求映射 @RequestMapping注解的 value属性是一个字符串类型的数组,表示该请求映射能够匹配多个请求地址 所对应的请求

@RequestMapping注解的value属性必须设置,至少通过请求地址匹配请求映射

<a th:href="@{/testRequestMapping}">测试@RequestMapping的value属性--
>/testRequestMapping</a><br>
<a th:href="@{/test}">测试@RequestMapping的value属性-->/test</a><br>
@RequestMapping(
value = {"/testRequestMapping", "/test"},
method = {RequestMethod.GET, RequestMethod.POST}
)
public String testRequestMapping(){
return "success";
}

下文请看文章 SpringMVC框架②

欢迎大家指点评论~ 点赞+关注⭐⭐⭐

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

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

相关文章

Android如何实现复制到剪贴板

文章目录 核心代码关于权限举例 在 Android 开发中&#xff0c;可以使用 ClipboardManager 来复制文本到剪贴板。以下是一个简单的示例代码&#xff0c;演示如何将文本复制到剪贴板&#xff1a; 核心代码 // 获取剪贴板管理器 val clipboardManager getSystemService(Contex…

Linux - 安装 maven(详细教程)

目录 一、下载二、安装三、配置环境变量四、镜像资源配置 一、下载 官网&#xff1a;https://maven.apache.org/download.cgi 打开 maven 的官网下载页面&#xff0c;点击 bin.tar.gz 文件链接 即可下载最新版本的 maven 如果想要下载旧版本的 meven&#xff0c;则点击 Maven…

图形系统开发实战课程:进阶篇(上)——9.空间算法(一)

图形开发学院&#xff5c;GraphAnyWhere 课程名称&#xff1a;图形系统开发实战课程&#xff1a;进阶篇(上)课程章节&#xff1a;“图形样式”原文地址&#xff1a;https://www.graphanywhere.com/graph/advanced/2-9.html 第九章 空间算法&#xff08;一&#xff09; \quad 在…

SpringBoot 自定义映射规则resultMap collection一对多

介绍 collection是封装一对多关系的&#xff0c;通常情况下是一个列表&#xff0c;association是一对一&#xff0c;通常情况是一个对象。例如&#xff1a;查询班级下所有的学生&#xff0c;一个班级可以有多个学生&#xff0c;这就是一对多。 案例 有一个学生表&#xff0c…

基于 Redis 的 JWT令牌失效方案

应用场景 当用户登录状态到登出状态时&#xff0c;对应的JWT的令牌需要设置为失效状态&#xff0c;这时可以使用基于 Redis 的黑名单方案来实现JWT令牌失效。 基于 Redis 的黑名单方案 当用户需要登出系统时&#xff0c;将用户携带的Token进行解析&#xff0c;解码出JWT令牌…

Go语言中的时间控制:定时器技术详细指南

Go语言中的时间控制&#xff1a;定时器技术详细指南 引言定时器基础创建和使用time.Timer使用time.Ticker实现周期性任务定时器的内部机制小结 使用time.Timer实现简单的定时任务创建和启动定时器停止和重置定时器定时器的实际应用小结 利用time.Ticker处理重复的定时任务创建和…

这里推荐一款unity3d人物动物控制器详细的等学会再写文章

unity3d Animal Controller 1.4.0a 动物NPC行为控制器 动物控制器&#xff08;AC&#xff09;是一个基于脚本架构的动画框架控制器。它适用于任何动物或人形角色的根运动或原地动画。 人和动物的各种动作都有; 小白必选、 我只是运行乐demo就感觉牛 demo路径&#xff1a;Asset…

Python不换行print在终端中不显示

问题描述 当使用不换行 print 即 print(‘test, end) 后立即关闭标准输出 sys.stdout open(os.devnull, w)则 print 的内容不会显示在正常的终端上&#xff08;例外是 PyCharm 中的终端能够正常显示&#xff09;。 复现问题 复现该问题的简易代码&#xff1a; import sys,…

基于pytorch的手写体识别

一、环境搭建 链接: python与深度学习——基础环境搭建 二、数据集准备 本次实验用的是MINIST数据集&#xff0c;利用MINIST数据集进行卷积神经网络的学习&#xff0c;就类似于学习单片机的点灯实验&#xff0c;学习一门机器语言输出hello world。MINIST数据集&#xff0c;可以…

【go从入门到精通】go环境安装和第一个经典程序

go下载和环境变量配置 下载地址 Go官网下载地址&#xff1a;https://golang.org/dl/All releases - The Go Programming Languagehttps://golang.org/dl/ 然后根据自己的系统环境来选择不同的安装包下载&#xff0c;下面我分别针对不同环境进行说明&#xff08;大家可以根据自…

计算机网络中常用的命令

Ping 通过发送一系列的ICMP回送数据报来确定本机与目的主机是否可以正常通信。输出中TTL代表ICMP报文存活时间&#xff0c;可以推算报文经过了几个路由器。ping失败有可能是由于Windows防火墙-IPv4回显请求没有开启。Ipconfig 获取主机的网络配置信息&#xff0c;例如IP地址、子…

LeetCode 438. 找到字符串中所有字母异位词

对于判断两个词是否为异位词&#xff0c;可以改而判断它们的词频表是否相同。基于此&#xff0c;在s串中设置滑动窗口&#xff0c;大小跟p串一样&#xff0c;移动&#xff08;剔除左边&#xff0c;增加右边&#xff09;这个窗口并实时记录下它的词频表然后与p的词频表比较。 cl…

数据库之Oracle数据导入导出

目录 一、单表导出和导入1、单表导出数据2、单表导入数据二、全表导出和导入1、远程导出全表数据2、导入本地数据三、密码带特殊字符的写法1、Windows OS写法2、Linux/Unix OS写法 四、总结 一、单表导出和导入 1、单表导出数据 --导出远程服务上的表数据 exp 用户名/密码IP…

Platformview在iOS与Android上的实现方式对比

Android中早期版本Platformview的实现基于Virtual Display。VirtualDisplay方案的原理是&#xff0c;先将Native View绘制到虚显&#xff0c;然后Flutter通过从虚显输出中获取纹理并将其与自己内部的widget树进行合成&#xff0c;最后作为Flutter在 Android 上更大的纹理输出的…

【java】redis的bitmap实现签到功能

功能&#xff1a; 1.签到 2.判断某天是否签到 3.统计某月的签到情况 4.统计某月连续签到了多少天 5.统计某月一共签到了多少次 代码 1.依赖 <dependencies><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId>…

Unity2023.1.19_ECS_DOTS

Unity2023.1.19_ECS_DOTS 盲学-盲目的学习&#xff1a; 懒着自己整理就看看别人整理的吧&#xff0c;整合一下逻辑通了不少&#xff1a; DOTS/data oriented technology stack-面向数据的技术栈 ECS/Entities-Component-System Unity-Entities包 Entities提供ECS架构面向数…

BUUCTF---[ACTF2020 新生赛]BackupFile1

1.题目描述 2.题目提示backup file &#xff0c;是备份文件的意思。点开链接&#xff0c;页面提示 3.查看源码没有什么有用信息&#xff0c;也没有登录界面&#xff0c;所以也不会用到蚁剑链接来找备份文件&#xff0c;所以大概率就是通过构造playload来查找备份文件。 4.备份…

kubectl 速查手册

资源对象文件 --- kind: Pod apiVersion: v1 metadata:name: myweblabels:app: nginx spec:containers:- name: webserverimage: nginx status: {} annotate # 更新资源所关联的注释信息 #-----------------------------------------# [rootmaster k8s]# kubectl apply -f m…

图像检测 - 模板匹配方法(算法详解)

1、介绍 在如今深度学习、神经网络遍地的世界,检测已经很常见了。在深度学习领域,关于目标检测也提出了很多很成熟的算法,例如双阶段的Fast-RCNN、单阶段的YOLO系列等等。 尤其是YOLO系列的不断更新迭代,目标检测的任务变得不再困难,可以做到实时检测的跟踪等等 但对于数…

新手想玩硬件,买单片机还是树莓派好?

新手想玩硬件&#xff0c;买单片机还是树莓派好&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#x…