SpringMVC (1)第一个程序

server/2024/10/21 7:26:42/

springmvc

  • 1、介绍
  • 2、第一个应用程序
  • 3、其余问题:
    • 3.1 web.xml
    • 3.2 thymeleaf模板引擎

1、介绍

MVC是一种软件架构模式(是一种软件架构设计思想,不止Java开发中用到,其它语言也需要用到),它将应用分为三块:

M:Model(模型)
V:View(视图)
C:Controller(控制器)
MVC将应用分为三块,每一块各司其职,都有自己专注的事情要做,他们属于分工协作,互相配合:

Model:负责业务处理及数据的收集。
View:负责数据的展示
Controller:负责调度。它是一个调度中心,它来决定什么时候调用Model来处理业务,什么时候调用View视图来展示数据。
在这里插入图片描述

面试题:什么是三层模型,并说一说MVC架构模式与三层模型的区别? 三层模型:
在这里插入图片描述

MVC 和三层模型都采用了分层结构来设计应用程序,都是降低耦合度,提高扩展力,提高组件复用性。区别在于:他们的关注点不同,三层模型更加关注业务逻辑组件的划分。 MVC架构模式关注的是整个应用程序的层次关系和分离思想。现代的开发方式大部分都是MVC架构模式结合三层模型一起用。

2、第一个应用程序

步骤1:
创建一个空项目,修改jdk依赖和maven。
添加一个Maven模块。
将pom.xml的打包方式改为war
步骤2:
添加依赖

<dependencies><!-- Spring MVC依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>6.1.4</version></dependency><!--日志框架Logback依赖--><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.5.3</version></dependency><!--Servlet依赖--><!--tomcat其实含有servlet依赖,但是由于我们需要在程序中使用Httpservlet这些,所以添加上该依赖,但是在打包时并不会打包进去,在项目使用时会有其他第三方程序给予。--><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>6.0.0</version><scope>provided</scope></dependency><!--Spring6和Thymeleaf整合依赖--><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring6</artifactId><version>3.1.2.RELEASE</version></dependency>
</dependencies>

第三步:
添加web支持。
我们自己写一个webapp目录。
需要上边有小蓝点,如果没有就自己添加web
在这里插入图片描述
双击这里,修改路径。
在这里插入图片描述

在这里插入图片描述
点击加号,选择添加web.xml配置文件

在这里插入图片描述
在这里插入图片描述
第四步
配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"version="6.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><!-- /* 表示任何一个请求都交给DispatcherServlet来处理 --><!-- / 表示当请求不是xx.jsp的时候,DispatcherServlet来负责处理本次请求--><!-- jsp本质就是Servlet,因此如果请求是jsp的话,应该走它自己的Servlet,而不应该走DispatcherServlet --><!-- 因此我们的 url-pattern 使用 / --><url-pattern>/</url-pattern></servlet-mapping></web-app>

DispatcherServlet是SpringMVC框架为我们提供的最核心的类,它是整个SpringMVC框架的前端控制器,负责接收HTTP请求、将请求路由到处理程序、处理响应信息,最终将响应返回给客户端。DispatcherServlet是Web应用程序的主要入口点之一,它的职责包括:

接收客户端的HTTP请求:DispatcherServlet监听来自Web浏览器的HTTP请求,然后根据请求的URL将请求数据解析为Request对象。
处理请求的URL:DispatcherServlet将请求的URL(Uniform Resource Locator)与处理程序进行匹配,确定要调用哪个控制器(Controller)来处理此请求。
调用相应的控制器:DispatcherServlet将请求发送给找到的控制器处理,控制器将执行业务逻辑,然后返回一个模型对象(Model)。
渲染视图:DispatcherServlet将调用视图引擎,将模型对象呈现为用户可以查看的HTML页面。
返回响应给客户端:DispatcherServlet将为用户生成的响应发送回浏览器,响应可以包括表单、JSON、XML、HTML以及其它类型的数据。
第五步:编写控制器FirstController
DispatcherServlet接收到请求之后,会根据请求路径分发到对应的Controller,Controller来负责处理请求的核心业务。在SpringMVC框架中Controller是一个普通的Java类(一个普通的POJO类,不需要继承任何类或实现任何接口),需要注意的是:POJO类要纳入IoC容器来管理,POJO类的生命周期由Spring来管理,因此要使用注解标注:

java">package com.cky.controller;import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class Mycontroller {@RequestMapping("/hello")public String first(){}
}

第六步:
配置springmvc-servlet.xml文件
SpringMVC框架有它自己的配置文件,该配置文件的名字默认为:<servlet-name>-servlet.xml,默认存放的位置是WEB-INF 目录下:

<?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 https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.cky"></context:component-scan><!--视图解析器--><bean id="thymeleafViewResolver" class="org.thymeleaf.spring6.view.ThymeleafViewResolver"><!--作用于视图渲染的过程中,可以设置视图渲染后输出时采用的编码字符集--><property name="characterEncoding" value="UTF-8"/><!--如果配置多个视图解析器,它来决定优先使用哪个视图解析器,它的值越小优先级越高--><property name="order" value="1"/><!--当 ThymeleafViewResolver 渲染模板时,会使用该模板引擎来解析、编译和渲染模板--><property name="templateEngine"><bean class="org.thymeleaf.spring6.SpringTemplateEngine"><!--用于指定 Thymeleaf 模板引擎使用的模板解析器。模板解析器负责根据模板位置、模板资源名称、文件编码等信息,加载模板并对其进行解析--><property name="templateResolver"><bean class="org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver"><!--设置模板文件的位置(前缀)--><property name="prefix" value="/WEB-INF/templates/"/><!--设置模板文件后缀(后缀),Thymeleaf文件扩展名不一定是html,也可以是其他,例如txt,大部分都是html--><property name="suffix" value=".html"/><!--设置模板类型,例如:HTML,TEXT,JAVASCRIPT,CSS等--><property name="templateMode" value="HTML"/><!--用于模板文件在读取和解析过程中采用的编码字符集--><property name="characterEncoding" value="UTF-8"/></bean></property></bean></property></bean>
</beans>

在WEB-INF目录下新建springmvc-servlet.xml文件,并且提供以上配置信息。 image.png 以上配置主要两项:

第一项:组件扫描。spring扫描这个包中的类,将这个包中的类实例化并纳入IoC容器的管理。
第二项:视图解析器。视图解析器(View Resolver)的作用主要是将Controller方法返回的逻辑视图名称解析成实际的视图对象。视图解析器将解析出的视图对象返回给DispatcherServlet,并最终由DispatcherServlet将该视图对象转化为响应结果,呈现给用户。
注意:如果采用了其它视图,请配置对应的视图解析器,例如:

JSP的视图解析器:InternalResourceViewResolver
FreeMarker视图解析器:FreeMarkerViewResolver
Velocity视图解析器:VelocityViewResolver
第八步
提供视图
在WEB-INF目录下新建templates目录,在templates目录中新建html文件,例如:first.html,并提供以下代码:

<!DOCTYPE html>
<!--指定 th 命名空间,让 Thymeleaf 标准表达式可以被解析和执行-->
<!--th不是固定的,可以指定其它的命名空间,只不过大部分情况下用th-->
<!--表示程序中出现的 th 开头的后面代码都是 Thymeleaf语法,需要被 Thymeleaf识别-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>first springmvc</title>
</head>
<body>
<h1>我的第一个Spring MVC程序</h1>
</body>
</html>

对于每一个Thymeleaf文件来说 xmlns:th=“http://www.thymeleaf.org” 是必须要写的,为了方便后续开发,可以将其添加到html模板文件中:
在这里插入图片描述
thymeleaf模板引擎会自动解析该模板字符串 之后转为html格式 虽然我们是.html文件,但是内部引擎其实是thymeleaf

第九步
控制器FirstController处理请求返回逻辑视图名称

java">package com.cky.controller;import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class Mycontroller {@RequestMapping("/hello")public String first(){return "first";}
}

配置tomcat服务器 测试
在这里插入图片描述

执行流程总结:
浏览器发送请求:http://localhost:8080/springmvc/hello
SpringMVC的前端控制器DispatcherServlet接收到请求
DispatcherServlet根据请求路径 /hello 映射到 MyController first(),调用该方法
MyController first() 处理请求
MyController first() 返回逻辑视图名称 first 给视图解析器
视图解析器找到 /WEB-INF/templates/first.html 文件,并进行解析,生成视图解析对象返回给前端控制器DispatcherServlet
前端控制器DispatcherServlet响应结果到浏览器。

3、其余问题:

3.1 web.xml

在该配置文件中 我们可以指定springmvc配置文件的路径和名称

<?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"><servlet><servlet-name>Springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param>
<!--            初始化参数时 可以指定springmvc配置文件的位置 以及名称-->
<!--            其默认是存放在WEB-INF 下 名称默认是<servlet-name>-servlet.xml--><param-name>contextConfigLocation</param-name>
<!--            表示在根路径下  即放在resources目录下 名称是 springmvc.xml--><param-value>classpath:springmvc.xml</param-value></init-param>
<!--        这是一个优化策略 表示在服务器启动时就初始化DispatcherServlet 而不是在用户第一次请求时 可以增加用户体验--><load-on-startup>0</load-on-startup></servlet><servlet-mapping><servlet-name>Springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>

位置和名称变了
在这里插入图片描述

3.2 thymeleaf模板引擎

我们可以使用其模板,模板引擎会自动帮我们解析,比如项目名称
index.html

<!DOCTYPE html>
<!--指定 th 命名空间,让 Thymeleaf 标准表达式可以被解析和执行-->
<!--th不是固定的,可以指定其它的命名空间,只不过大部分情况下用th-->
<!--表示程序中出现的 th 开头的后面代码都是 Thymeleaf语法,需要被 Thymeleaf识别-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>index</title>
</head>
<body>
<h1>首页</h1>
<!--thref="/demo02/heihei  与其等价
-->
<a th:href="@{/heihei}">嘿嘿请求</a>
</body>
</html>

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

会自动帮我们添加上项目名称,灵活性强。


http://www.ppmy.cn/server/4011.html

相关文章

【黑马程序员——Redis入门】

1. 初识Redis 1.1 认识NoSQL NoSQL是指“不仅仅是SQL”&#xff08;Not Only SQL&#xff09;的缩写。它是一种数据库管理系统&#xff08;DBMS&#xff09;的范畴&#xff0c;用于存储和检索大量结构化或非结构化数据。与传统的关系型数据库管理系统&#xff08;RDBMS&#…

面试算法题之暴力求解

这里写目录标题 1 回溯1.1 思路及模板1.2 例题1.2.1 全排列1.2.2 N 皇后1.2.3 N皇后问题 II 1 回溯 1.1 思路及模板 抽象地说&#xff0c;解决一个回溯问题&#xff0c;实际上就是遍历一棵决策树的过程&#xff0c;树的每个叶子节点存放着一个合法答案。你把整棵树遍历一遍&a…

ssm420基于JavaEE的企业人事管理信息系统的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本企业人事管理信息系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

Ubuntu如何给tar.gz文件创建桌面快捷方式

在Ubuntu中&#xff0c;给.tar.gz文件创建URL桌面图标快捷方式或者是启动脚本桌面图标快捷方式可以通过创建一个.desktop文件来实现。.desktop文件是Linux系统中用于定义应用程序启动器的文件格式&#xff0c;它们通常包含图标、名称和执行命令等信息。以下是创建.tar.gz文件的…

javascript模块化学习

Js模块化 【成长期】原始的js模块化 // 使用立即执行函数 var的方式 // 例如 有base.js 和 main.js两个文件 // 其中main.js需要调用base.js中的函数 可以这样写/** base.js */ var baseModule (function () {var a 1;var b 11;var c 22;console.log(a, b, c)…

static+单例模式+类的复合继承

汇编语言 汇编语言是最靠谱的验证“编程语言相关知识点”正确性的方式 汇编语言与机器语言一一对应&#xff0c;每一条机器语言都有与之对应的汇编指令 机器语言是计算机使用的语言&#xff0c;它是一串二进制数字 汇编语言可以通过汇编得到机器语言机器语言可以通过反汇编得到…

FILE类与IO流

目录 File类的实例化与常用方法 File类的理解 文件路径的表示方式&#xff1a; API的使用 IO流概述与流的分类 I/O流中的是Input/Output的缩写 IO流的分类&#xff08;不同角度&#xff09; Java程序中的IO流涉及40多个&#xff0c;但实际上都是由4个抽象类衍生出来的。 F…

【教程】ubuntu20.04 下配置 Charm-crypto 0.5 实验环境

目录 前言先决条件基本依赖安装准备好 gcc&#xff0c;make 和 perl准备好 m4&#xff0c;flex&#xff0c;bison 和 libssl-dev安装 Python3.x&#xff0c;pip3 和 pyparsing 安装 OpenSSL安装 GMP5.x安装 PBC安装 Charm-crypto5.0安装开发环境检验 Charm-crypto5.0 安装成功主…