ToB企服应用市场:ToB评测及商务社交产业平台

标题: 初识 SpringMVC,运行配置第一个Spring MVC 程序 [打印本页]

作者: 鼠扑    时间: 2024-6-22 20:31
标题: 初识 SpringMVC,运行配置第一个Spring MVC 程序
1. 初识 SpringMVC,运行配置第一个Spring MVC 程序

@
目次

1.1 什么是 MVC

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

应用为什么要被分为三块,长处是什么?

MVC 将应用分为三块,每一块各司其职,都有本身专注的事情要做,它们属于分工协作,互相配合:

MVC 架构图模式如下:所示

MVC 架构模式的形貌:前端欣赏器发送请求给 Web 服务器,Web 服务器中的 Controller 接收到用户的请求,Controller 负责将前端提交的数据进行封装,然后 Controller 调用 Model 来处置惩罚业务,当Model 处置惩罚完业务后,会返回处置惩罚之后的数据给 Controller,Controller 再调用 View 来完成数据的展示,终极将效果相应给欣赏器,欣赏器进行渲染展示页面的内容。
面试题:什么是三层模型,并说一说MVC架构模式与三层模型的区别?

MVC 和 三层模型都采用了分层结构来设计应用程序,都是低落耦合度,提高扩展力,提高组件复用性,区别在于:它们的关注点不同,三层模型更关注业务逻辑组件的分别。
MVC 架构模式关注的是整个应用程序的条理关系和分离思想。现代的开辟方式大部分都是 MVC 架构模式结合三层模型一起用的。
更多关于 MVC 架构的内容大家可以移步至:✏️✏️✏️  MVC 三层架构案例详细讲解_mvc三层架构-CSDN博客
2. Spring MVC 概述

Spring MVC 是一个实现了MVC架构模式的 Web 框架,底层基于 Servlet 实现。
Spring MVC 已经将MVC架构模式实现了,因此只要我们基于 Spring MVC 框架写代码,编写的程序就是符合 MVC架构模式的。(MVC的架子已经为我们搭好了,我们只需要添添补补即可)
Spring 框架中有一个子项目叫做:Spring Web,Spring Web 子项目当中包罗很多模块,例如:
可见 Spring MVC 是 Spring Web 子项目当中的一个模块,因此也可以说 Spring MVC 是Spring 框架的一部分。
以是学习 Spring MVC 框架之前要先学习 Spring 框架中的 IOC 和 AOP 等内容。
另外,使用Spring MVC 框架的时候,同样也可以始于 IOC 和 AOP 。
关于 Spring的学习内容,大家可以移步至:✏️✏️✏️  Spring_ChinaRainbowSea的博客-CSDN博客
下面是 Spring 官方给出的 Spring 架构图,其中的 Web 中的 Servlet 指的就是 Spring MVC 部分

2.1 Spring MVC  的作用:

Spring MVC 框架能帮我们做什么,与 纯粹的 Servlet 开辟有什么区别?
总之,与 Servelt 开辟相比,Spring MVC 框架可以帮我们节流很多时间和精力,减少代码的复杂度,更加专注于业务开辟。同时,也提供了更多的功能和扩展性,可以更好地满足企业级应用的开辟需求。
3. 运行配置第一个 Spring MVC 程序

3.1 第一步:创建Maven模块

第一步:创建Empty Project,起名:springmvc。

第二步:设置springmvc工程的JDK版本:Java21。

第三步:设置maven。

第四步:创建Maven模块


第五步:将pom.xml文件中的打包方式修改为 <packaging>war</packaging>
  1. <packaging>war</packaging>
复制代码
第六步:添加以下依赖


注意点:
这里我们是在一个单独的 Spring MVC 框架的容器中,配置的 Servlet依赖 ,而我们的 web 项目是运行在 Tomcat 服务器当中的,Tomcat 服务器本身就带 servlet 的依赖,防止冲突,以及重复,占用不必要的资源。以是我们在:Servlet依赖 jar 包下,设置: provided  指定依赖的访问,provided 体现这个依赖由第三方容器来提供,打<packaging>war</packaging>包的时候,这个依赖不会打入<packaging>war</packaging>包内,因为这个依赖由其它容器来提供的。就避免了在 Tomcat 当中重复了。同时注意:我们这里用的是:jakarta.servlet  包下的 Servlet 依赖,以是要用的 tomcat9以上才行,至于为什么要 Tomcat9以上(这里我使用的是 Tomcat 10 ),大家可以移步至:✏️✏️✏️ javaEE Web(Tomcat)深度明白 和 Servlet的本质_jakarta ee 部署 web server-CSDN博客
  1.     4.0.0    com.rainbowsea    springmvc-001    1.0-SNAPSHOT    <packaging>war</packaging>                                org.springframework            spring-webmvc            6.1.4                                    ch.qos.logback            logback-classic            1.5.3                                    jakarta.servlet            jakarta.servlet-api            6.0.0            provided                                    org.thymeleaf            thymeleaf-spring6            3.1.2.RELEASE            
复制代码
3.2 第二步:添加 web 支持

第一步:在 main 目次下创建一个 webapp目次。注意:目次名必须是:webapp ,不可以为其它的。

注意:一般情况下,我们添加了webapp ,IDE是会自动给我们添加上一个小蓝点的,假如没有的话,需要我们本技艺动添加。






注意 web.xml 文件的位置:E:\Java\SpringMVC\SpringMVC\springmvc-001\src\main\webapp\WEB-INF\web.xml
注意版本选择:6.0

手动在 WEB-INF 前面添加上 src\main\webapp路径。因为我们的WEB-INF 要在 webapp 目次下才行。



3.3 第三步:配置 web.xml文件

Spring MVC 是一个 web 框架,在 java web 中谁来负责接收请求,处置惩罚请求,以及相应?
固然是 Servlet ,在 Spring MVC 框架中已经为我们写好了一个 Servlet ,它的名字叫做:DispatcherServlet  ,我们称其为前端控制器 ,既然是 Servlet,那么它就需要在 web.xml 文件中进行配置。
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
  5.          version="6.0">
  6.    
  7.     <servlet>
  8.         <servlet-name>springmvc</servlet-name>
  9.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  10.     </servlet>
  11.     <servlet-mapping>
  12.         <servlet-name>springmvc</servlet-name>
  13.         
  14.         
  15.         
  16.         
  17.         <url-pattern>/</url-pattern>
  18.     </servlet-mapping>
  19. </web-app>
复制代码
注意:

/ 配置为 / 的作用意义是:
  1. /* 表示任何一个请求都交给DispatcherServlet来处理 -->
  2. / 表示当请求不是xx.jsp的时候,DispatcherServlet来负责处理本次请求-->
  3. jsp本质就是Servlet,因此如果请求是jsp的话,应该走它自己的Servlet,而不应该走DispatcherServlet
复制代码
DispatcherServlet  是 Spring MVC 框架为我们提供的最核心 的类。它是整个 Spring MVC 框架的前端控制器。负责接收 HTTP 请求,将请求路由随处置惩罚程序,处置惩罚相应信息,终极将相应返回给客户端。DispatcherServlet 是 Web 应用程序的主要入口之一,它的职责包罗:
DispatcherServlet 工作流程图:

3.4 第四步:编写控制器 FirstController

DispatcherServlet 接收到请求之后,会根据请求路径分发到对应的Controller,Controller 来负责处置惩罚请求的核心业务。在Spring MVC 框架中 Controller 是一个普通的Java类(一个普通的POJO类,不需要继续任何类或实现任何接口),需要注意的是:POJO类要纳入 IOC 容器来管理,POJO类的生命周期由 Spring 来管理,因此要使用注解标注@Controller 。
  1. package com.rainbowsea.springmvc.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. @Controller // 该注解表示,将该类交给 Spring IOC 容器管理
  5. public class FirsController {
  6. }
复制代码
3.5 第五步:配置springmvc-servlet.xml文件

SpringMVC框架有它本身的配置文件,该配置文件的名字默认为:-servlet.xml,默认存放的位置是WEB-INF 目次下:

固然,这个默认的,都是可以通过配置修改的。关于这部分的内容,在后续更新文章当中会分析的。
要在该 -servlet.xml 配置文件当中,配置如下两项信息:
第一项:组件扫描,Spring 扫描这个包中的类,将这个包中的类实例化并纳入IOC容器当中进行管理。


第二项:视图解析器:视图解析器(View Resolver) 的作用主要是将Controller 方法返回的逻辑视图名称解析成实际的视图对象。视图解析器将解析出的视图对象返回给 DispatcherServlet,并终极由 DispatcherServlet 将该视图对象转化为相应效果,呈现给用户

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:context="http://www.springframework.org/schema/context"
  5.        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">
  6.     <context:component-scan base-package="com.rainbowsea.springmvc.controller"></context:component-scan>
  7.    
  8.     <bean id="thymeleafViewResolver" >
  9.         
  10.         <property name="characterEncoding" value="UTF-8"/>
  11.         
  12.         <property name="order" value="1"/>
  13.         
  14.         <property name="templateEngine">
  15.             <bean >
  16.                
  17.                 <property name="templateResolver">
  18.                     <bean >
  19.                         
  20.                         <property name="prefix" value="/WEB-INF/templates/"/>
  21.                         
  22.                         <property name="suffix" value=".thymeleaf"/>
  23.                         
  24.                         <property name="templateMode" value="HTML"/>
  25.                         
  26.                         <property name="characterEncoding" value="UTF-8"/>
  27.                     </bean>
  28.                 </property>
  29.             </bean>
  30.         </property>
  31.     </bean>
  32. </beans>
复制代码
注意:
  1. <property name="prefix" value="/WEB-INF/templates/"/>
  2.                         
  3.                         <property name="suffix" value=".thymeleaf"/>
  4.                         
  5.                         <property name="templateMode" value="HTML"/>
  6.                         
  7.                         <property name="characterEncoding" value="UTF-8"/>
复制代码

3.6 第六步:根据自行定义好的视图解析器(的配置),提供视图


在WEB-INF目次下新建 templates目 录,在 templates 目次中新建 thymeleaf 文件,例如:first.thymeleaf,并提供以下代码:


注意:这个是 Thymeleaf的模板字符串,只有:Thymeleaf的模板引擎才可以解析,固然看上去是:html,但是它不是 html,本质上是 Thymeleaf的模板字符串,欣赏器是看不懂的的。只有将这些信息,交给 Thyemeleaf 视图解析器翻译真正转化为了 html代码(的时候才是真正的html),
,欣赏器才能看懂。至于为什么是 html 呢,是因为这里我们配置的 Thymeleaf 视图解析器,就是配置的翻译为 html 文件,固然也可以配置翻译为其它的类型的文件。

3.7 第七步:控制器 FirstController 处置惩罚请求返回逻辑视图名称

  1. package com.rainbowsea.springmvc.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. @Controller // 该注解表示,将该类交给 Spring IOC 容器管理
  5. public class FirsController {
  6.     // 请求映射
  7.     // 这个方法是一个实例方法
  8.     // 这个方法目前返回一个String 字符串
  9.     // 返回值代表一逻辑视图名称,一个逻辑视图名称,会对应上一个真正的物理上的文件
  10.     @RequestMapping(value = "/test")
  11.     public String hehe() {
  12.         // 返回一个逻辑视图名称
  13.         return "first";
  14.     }
  15. }
复制代码
@RequestMapping 注解标识:该请求的路径映射。
注意:方法名随意,但是返回类型肯定要是String 字符串的类型,因为这个返回值是一个逻辑视图的名称 是一个字符串。
什么是逻辑视图名称

  1. 最终会将逻辑视图名称转换为物理视图名称
  2. > 逻辑视图名称:first
  3. > 物理视图名称: 前缀 + first + 后缀
  4. > 最终路径是:/WEB-INF/templates/first.thymeleaf
  5. > 使用Thymeleaf 模板引擎,将/WEB-INF/templates/first.thymeleaf转换成 html代码,最终响应到浏览器端
复制代码
3.8 第八步:运行 Tomcat 测试

注意:由于我们这里导入的是:jakarta.servlet 包下的 servelt 以是要用,Tomcat 9 以上的版本才行,这里我使用的是 Tomcat 10

第一步:配置Tomcat服务器


第三步:启动Tomcat服务器。假如在控制台输出的信息有中文乱码,请修改tomcat服务器配置文件:apache-tomcat-10.1.19\conf\logging.properties

第四步:打开欣赏器,在欣赏器地址栏上输入地址:http://localhost:8080/springmvc/test

3.9 执行流程总结:

4. 第一个 Spring MVC  程序优化:

4.1 在web.xml 配置文件中 ,手动自定 spring mvc 的配置文件

Spring MVC 中的配置文件,名字是可以指定的,位置也是可以指定的,怎么指定?
设置 DispatcherServlet 的初始化参数
  1. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  2.         <init-param>
  3.             <param-name>contextConfigLocation</param-name>
  4.             <param-value>classpath:springmvc.xml</param-value>
  5.         </init-param>
复制代码
建议: 在 web 服务器启动的时候,初始化 DispatcherServlet,如许用户第一次请求时,服从较高。体验好
重点:SpringMVC 配置文件的名字和路径是可以手动设置的,如下:


  1.             springmvc        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  2.         <init-param>
  3.             <param-name>contextConfigLocation</param-name>
  4.             <param-value>classpath:springmvc.xml</param-value>
  5.         </init-param>        0                springmvc        /   
复制代码
通过来设置SpringMVC配置文件的路径和名字。在DispatcherServlet的init方法执行时设置的。
1建议加上,如许可以提高用户第一次访问的服从。体现在web服务器启动时初始化DispatcherServlet。
下面是 :springmvc.xml 的编写:

4.2 配置 thymeleaf 翻译为 html 的模板

这里我们将 thymeleaf 视图解析器的后缀改为:
WEB-INF目次下新建templates目次,在templates目次中新建html文件,例如:first.html,并提供以下代码:


对于每一个Thymeleaf文件来说 xmlns:th="http://www.thymeleaf.org" 是必须要写的,为了方便后续开辟,可以将其添加到html模板文件中:

4.3 编写 IndexController 定义个“首页”

  1. package com.rainbowsea.springmvc.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. @Controller // 表示交给 Spring IOC 容器管理
  5. public class IndexController {
  6.     @RequestMapping("/")
  7.     public String index() {
  8.         return "index";
  9.     }
  10. }
复制代码
体现请求路径假如是:http://localhost:8080/springmvc/ ,则进入 /WEB-INF/templates/index.html 页面。
这就是项目标首页效果!!!!!

index.html 的编写
  1. <!DOCTYPE html>
  2. <html lang="en" xmlns:th="https://www.thymeleaf.org">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>首页</title>
  6. </head>
  7. <body>
  8. <h1>首页</h1>
  9. <a th:target="_blank" href="https://www.cnblogs.com/@{/first}"> first Spring mvc </a>
  10. </body>
  11. </html>
复制代码
4.4 测试

部署到web服务器,启动web服务器,打开欣赏器,在地址栏上输入:http://localhost:8080/springmvc/

5. 总结:

6. 末了:

“在这个末了的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4