SpringMVC-HelloWorld

一、SpringMVC简介

1.1 SpringMVC和三层架构

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

  • M:model,模型层,指工程中的JavaBean,用于处理数据。JavaBean分为两类:
    • 实体类Bean:用于存储业务数据,如Student类等。
    • 业务处理Bean:Service或Dao对象,专门用于处理业务逻辑和数据访问。Dao对象用于实现对数据的增删改查,Service对象用于实现带业务逻辑的增删改查。
  • V:View,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据。
  • C:Controller,控制层,指工程中的Servlet,作用是接收请求和做出响应。
    MVC工作流程:用户通过视图层发送请求给服务器,服务器通过Controller调用Model层的API来处理请求,然后得到处理结果,并由Controller响应给客户端。

三层架构是指将软件划分为三个层次:表示层、业务逻辑层和数据访问层。

  • 表示层:主要指与用户交互的界面,接收用户请求并做出响应。
  • 业务逻辑层:用于处理业务逻辑。
  • 数据访问层:完成对数据库的基本操作。

SpringMVC是Spring为表示层开发提供的一整套完备的解决方案,具有以下特点:

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

二、HelloWorld

2.1 创建工程

  • 首先在IDEA中创建一个空项目,接着记得在项目结构中添加使用的JDK版本,然后创建一个maven工程。接着配置使用的maven,可以配置本地maven,也可以使用默认的maven。在这里插入图片描述+ 接着将maven工程转换成web工程。首先将工程的打包方式声明为war,接着在项目结构中右键单击项目,为项目添加web组件,在src/main/webapp/WEB-INF目录下配置web.xml文件。在这里插入图片描述
  • 最后导入项目所需要的依赖。
<dependencies><!--注意依赖的版本,不对可能会报错,建议使用和下面一样的版本--><!--springMVC--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.9</version></dependency><!--thymeleaf和spring5的整合--><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId><version>3.0.11.RELEASE</version></dependency><!--日志--><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency><!--ServletAPI--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><!--设置依赖范围为provided,因为Tomcat提供了servletAPI--><scope>provided</scope></dependency></dependencies>

2.2 配置web.xml

在web.xml中配置SpringMVC的前端控制器DispatcherServlet。

2.2.1 默认配置方式

在默认配置方式下,SpringMVC的配置文件默认位于WEB-INF目录下,默认名称为<servlet-name>-servlet.xml。

    <servlet><servlet-name>DispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class></servlet><servlet-mapping><servlet-name>DispatcherServlet</servlet-name><!--/可以匹配除jsp外的所有资源,也就是说除jsp外的所有请求都会由DispatcherServlet处理由于jsp需要特殊的servlet处理,所以不由DispatcherServlet处理/*表示匹配所有的请求,包括jsp--><url-pattern>/</url-pattern></servlet-mapping>

2.2.2 扩展配置方式

可以通过init-param标签设置SpringMVC配置文件的位置和名称,然后在resources目录下创建spring的配置文件,通过load-on-startup标签设置前端控制器DispatcherServlet的初始化时间。
将springMVC配置文件放在resources目录下是因为我们在实际中,也是将配置文件都放在这个目录下的,所以需要使用扩展配置方式,而不是让springMVC配置文件在WEB-INF目录下。

    <servlet><servlet-name>DispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><!--contextConfigLocation是固定值--><param-name>contextConfigLocation</param-name><!--使用classpath表示从类路径查找配置文件类路径即打包后的classes文件夹在工程中也就是src/main下的java目录和resources目录--><param-value>classpath:springMVC.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>DispatcherServlet</servlet-name><!--/可以匹配除jsp外的所有资源,也就是说除jsp外的所有请求都会由DispatcherServlet处理由于jsp需要特殊的servlet处理,所以不由DispatcherServlet处理/*表示匹配所有的请求,包括jsp--><url-pattern>/</url-pattern></servlet-mapping>

在这里插入图片描述

2.3 创建请求控制器

由于前端控制器需要对每一个浏览器发送的请求进行出路,但是不同的请求有不同的处理过程,因此需要创建处理具体请求的类,即请求控制器。
springMVC的控制器由一个POJO(普通Java类)担任,需要使用@Controller注解将其标识为一个控制层组件,交给IOC容器管理。
请求控制器中的方法称为控制器方法。在这里插入图片描述

2.4 创建springMVC配置文件

要使得控制器能被识别,还需要开启扫描。接着配置thymeleaf视图解析器。

	<!--组件扫描--><context:component-scan base-package="pers.beiluo.springMVC.hello" /><!--配置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>

2.5 访问index.html

在WEB-INF目录下的templates目录下创建index.html文件,并且要在html标签中加入 xmlns:th="http://www.thymeleaf.org"属性。并且index.html文件位于WEB-INF目录下,是受保护的资源,需要通过请求转发来访问。
要访问index.html文件,就需要在请求控制器中通过控制方法返回视图名称给前端控制器,并通过thymeleaf视图解析器获得资源完整路径再进行请求转发。

/*** @RequestMapping注解用于指定请求地址与请求控制器方法的映射关系* 使用字符串作为参数就是直接给value属性赋值* /表示输入当前项目的时匹配的就是这个方法,也就是访问index.html视图* @return 返回视图名称,并通过thymeleaf视图解析器得到完整路径*/@RequestMapping("/")public String toIndex(){return "index";}

在这里插入图片描述

2.6 通过a标签跳转页面

设置a标签

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>HelloWorld</h1>
<!--如果通过href跳转页面,路径中就需要写上项目的上下文路径但是项目的上下文路径是可以改变的,所以这不方便可以通过thymeleaf语法来自动获得项目的上下文路径因为要使用thymeleaf语法,所以必须加上 xmlns:th="http://www.thymeleaf.org"-->
<a th:href="@{/target}">通过a标签跳转到指定页面</a>
</body>
</html>

配置处理该请求的方法:

/*** 处理/springMVC/target请求的方法* @return 返回视图的名称*/@RequestMapping("/target")public String toTarget(){return "target";}

在这里插入图片描述
在这里插入图片描述

2.7 总结

浏览器发送请求后,若请求地址符合前端控制器的url-pattern,该请求就会交由前端控制器来处理,前端控制器会根据springMVC.xml配置文件,扫描组件找到控制器,将请求地址与控制器方法的@RequestMapping注解的value属性进行比较,如果匹配成功,就执行匹配成功的控制器方法。该方法返回一个字符串类型的视图名称,该名称会被thymeleaf视图解析器解析,加上前后缀组成完整路径,通过thymeleaf对视图进行渲染,最终转发到视图对应页面。

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

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

相关文章

KG+LLM(一)KnowGPT: Black-Box Knowledge Injection for Large Language Models

论文链接&#xff1a;2023.12-https://arxiv.org/pdf/2312.06185.pdf 1.Background & Motivation 目前生成式的语言模型&#xff0c;如ChatGPT等在通用领域获得了巨大的成功&#xff0c;但在专业领域&#xff0c;由于缺乏相关事实性知识&#xff0c;LLM往往会产生不准确的…

瑞吉外卖项目详细总结

文章目录 瑞吉外卖1.技术栈2.项目文件架构3.业务功能模块&#xff08;例子&#xff09;3.1管理员登录接口层(Controller)3.2管理员登录实现层(ServiceImpl)3.3管理员登录服务层&#xff08;Service&#xff09;3.4管理员登录Mapper层 4.公共模块4.1 BaseContext&#xff08;保存…

王力机器人安全门|用细节开拓高端精致家居生活

细微之处见风范,毫厘之优定乾坤。在追求高端品质的道路上,细节往往是最有力的诠释。如在入户门的选择方面,考虑到老人、孩子、宠物等每一位家庭成员不同需求的设计、科技运用才称得上是充满人性化、品质化的高端细节,幸福感直抵心灵。在该方面,王力机器人安全门做出了表率,每一…

【连接池】-从源码到适配(下),使用dynamic-datasource导致连接池没生效(升级版本)

写在前面 书接上文&#xff0c;连接池没生效&#xff0c;启用了一个什么默认的连接池。具体是什么&#xff0c;一起来看看源码吧。 目录 写在前面一、问题描述二、本地调试三、升级dynamic-datasource四、新的问题&#xff08;一&#xff09;数据源初始化问题&#xff08;二&am…

公司创建百度百科需要哪些内容?

一个公司或是一个品牌想要让自己更有身份&#xff0c;更有知名度&#xff0c;更有含金量&#xff0c;百度百科词条是必不可少的。通过百度百科展示公司的详细信息&#xff0c;有助于增强用户对公司的信任感&#xff0c;提高企业形象。通过百度百科展示公司的发展历程、领导团队…

ASP.Net实现汽车添加查询(三层架构,含照片)

演示功能&#xff1a; 点击启动生成页面 点击搜索模糊查询 点击添加跳转新界面 此处设置文本框多行 点击Button添加 步骤&#xff1a; 1、建文件 下图是三层架构列表&#xff0c;Models里面有模拟数据库中列的类&#xff0c;DAL中有DBHelper和service,BLL中有BllManager文件…

TiDB 7.5 LTS 发版丨提升规模化场景下关键应用的稳定性和成本的灵活性

互联网时代&#xff0c;数据的迅猛增长给数据库带来了可扩展性的挑战&#xff0c;Gen AI 带来的数据暴增更加剧了这种挑战。传统的数据分片已经不能承载新时代数据暴增的需求&#xff0c;更简单且具有前瞻性的方法则是采用原生分布式数据库来解决扩展性问题。在这种规模化场景的…

SpringValidation自定义注解以及分组校验

SpringValidation的参数校验使用可参考&#xff1a;【SpringMVC应用篇】Spring Validation 参数校验-CSDN博客 目录 1. 引入依赖 2. 自定义注解校验 2.1 创建Validation类 2.2 创建注解对象 2.3 使用注解 3. 分组校验 3.1 实体类内部定义接口 3.2 在参数上指定分组 1. …

CISSP 第1章:实现安全治理的原则和策略

作者&#xff1a;nothinghappend 链接&#xff1a;https://zhuanlan.zhihu.com/p/669881930 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 CIA CIA 三性&#xff1a; 机密性&#xff1a;和数据泄露有关。完整性…

存算分离降本增效,StarRocks 助力聚水潭 SaaS 业务服务化升级

作者&#xff1a;聚水潭数据研发负责人 溪竹 聚水潭是中国领先的 SaaS 软件服务商&#xff0c;核心产品是电商 ERP&#xff0c;协同350余家电商平台&#xff0c;为商家提供综合的信息化、数字化解决方案。公司是偏线下商家侧的 toB 服务商&#xff0c;员工人数超过3500&#xf…

C++初阶------------------入门C++

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

带大家做一个,易上手的家常糖醋白菜

准备 如果是大白菜就一个 小白菜就要两个 因为白菜炒完之后会变少 将白菜叶剥开每叶分成三个小块 整个剥完之后 放入盆中清洗干净 调一个糖醋汁 一勺料酒 两勺生抽 三勺白砂糖 四勺香醋 起锅烧油 放两个干辣椒 辣椒炒一下 然后倒入白菜 翻炒直到油全部融入白菜 然后倒入…

Windows本地如何部署Apache服务器搭配内网穿透实现无公网IP远程访问?

文章目录 前言1.Apache服务安装配置1.1 进入官网下载安装包1.2 Apache服务配置 2.安装cpolar内网穿透2.1 注册cpolar账号2.2 下载cpolar客户端 3. 获取远程桌面公网地址3.1 登录cpolar web ui管理界面3.2 创建公网地址 4. 固定公网地址 前言 Apache作为全球使用较高的Web服务器…

自然语言处理1——探索自然语言处理的基础 - Python入门篇

目录 写在开头1. 介绍自然语言处理的基本概念1.1 NLP的核心目标1.2 常见的NLP任务1.3 应用场景详细介绍1.3.1 医疗保健1.3.2 金融领域1.3.3 教育领域1.3.4 社交媒体分析 2. Python中常用的自然语言处理库简介2.1 NLTK (Natural Language Toolkit)2.2 Spacy2.3 Transformers2.4 …

张量操作与线性回归

一、张量的操作&#xff1a;拼接、切分、索引和变换 &#xff08;1&#xff09;张量拼接与切分 1.1 torch.cat() 功能&#xff1a;将张量按维度dim进行拼接 • tensors: 张量序列 • dim : 要拼接的维度 torch.cat(tensors, dim0, outNone)函数用于沿着指定维度dim将多个张量…

ES6之生成器(Generator)

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

复兴计划01-lc06

StringBuilder和StringBuffer的区别 1. StringBuffer和StringBuilder都是用于字符串动态拼接,但是StringBuffer拼接的函数方法的实现中用了synchornized上锁&#xff0c;效率较低&#xff0c;不过可以用于多线程以此来维护线程安全&#xff1b;相比之下&#xff0c;StringBuil…

理解SQL中not in 与null值的真实含义

A not in B的原理是拿A表值与B表值做是否不等的比较, 也就是a ! b. 在sql中, null是缺失未知值而不是空值。 当你判断任意值a ! null时, 官方说, “You cannot use arithmetic comparison operators such as , <, or <> to test for NULL”, 任何与null值的对比都将返…

Postman使用

Postman使用 Pre-request Script 参考&#xff1a; Scripting in Postman 可以请求、集合或文件夹中添加Pre-request Script&#xff0c;在请求运行之前执行JavaScript 如设置变量值、参数、Header和正文数据&#xff0c;也可以使用Pre-request Script来调试代码&#xff0…

jupyter notebook打开其他盘的文件

jupyter notebook打开其他盘文件 打开jupyter notebook打开terminal输入&#xff1a;jupyter-notebook 路径打开你想打开的工程的文件 打开jupyter notebook 打开terminal 输入&#xff1a;jupyter-notebook 路径 打开你想打开的工程的文件