SpringMVC - 第一个 SpringMVC 程序

news2024/11/16 19:39:03

MVC: 模块 视图 控制器 的简写,表示层 属于 C + V,业务层和逻辑层属于 M
SpringMVC 是对 web 使用的一套框架,可以更加快捷高效的管理 web应用
所有的请求都会经过 DispatcherServlet 这一个 Servlet
支持 IoC 和 AOP 
统一处理请求
可以解析多种视图,如JSP,Freemarker 

第一个简单的 SpringMVC 程序

第一步,创建一个经典的 Maven 工程模块

126a91e90045410d846f8a16e300b2d4.png

第二步,引入依赖

<?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>org.example</groupId>
    <artifactId>MVC</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!--springmvc依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>6.1.4</version>
        </dependency>
        <!--servlet依赖-->
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>6.0.0</version>
            <!--指定该依赖的范围,provided表示这个依赖由第三方容器来提供-->
            <!--打war包的时候,这个依赖不会打入war包内。因为这个依赖由其它容器来提供的。-->
            <scope>provided</scope>
        </dependency>
        <!--logback日志依赖-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.5.3</version>
        </dependency>
        <!--thymeleaf和spring6的整合依赖-->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring6</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
    </dependencies>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>

</project>

第三步,添加 webApp 文件夹

将 webApp 文件夹添加到 main 目录下,再点击构造模块,点击 + 号指定 webApp 文件夹的路径为 webApp 的根路径e770458a140544c3bb38513da1133431.png

修改后:

49b6a2ef8ae34e93ab7f23b8b8402478.png

上面一栏是 webApp.xml 的地址,下面一栏是 webApp 文件夹的地址

webApp 文件夹上出现一个小蓝点则表示添加成功

11dad77a78764c96be684dc45e8306c8.png

第四步,配置 xml 文件

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

    <!--Spring MVC框架的配置文件-->

    <!--组件扫描-->
    <context:component-scan base-package="controller"/>

    <!--配置视图解析器-->
    <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-->
                        <!--将来要在 xxxx.thymeleaf 文件中编写符合 Thymeleaf 语法格式的字符串:Thymeleaf 模板字符串。-->
                        <property name="suffix" value=".thymeleaf"/>
                        <!--设置模板类型,例如:HTML,TEXT,JAVASCRIPT,CSS等-->
                        <property name="templateMode" value="HTML"/>
                        <!--用于模板文件在读取和解析过程中采用的编码字符集-->
                        <property name="characterEncoding" value="UTF-8"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>

</beans>

web.xml 指定所有路径到 DispatcherServlet 这个 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">

    <!--前端控制器,SpringMVC中最核心的类。-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!--
            / 表示:除xxx.jsp结尾的请求路径之外所有的请求路径。
            /* 表示:所有的请求路径。
            如果是xxx.jsp请求路径,那么就走自己JSP对应的Servlet,不走SpringMVC的前端控制器。
        -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

访问任意非 JSP 路径都会执行 DispatcherServlet  这个 Servlet

第五步,编写前端视图页面

这里用的是 thymeleaf 作为视图页面

在 WEB-INF 目录下创建 templates 文件夹用于存放页面,我这里命名的是 hello.thymeleaf

<!doctype html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <title>First Spring MVC</title>
    </head>
    <body>
        <h1>Your first Spring MVC succeeds running!</h1>
        <a th:href="@{/heihei}">heihei</a>
    </body>
</html>

第六步,编写 Servlet 方法指向视图页面

@Controller
public class HelleCotroller {

    @RequestMapping("/a")//浏览器中访问的地址
    public String hello(){
        return "hello";
    }

}

当浏览器输入该地址后,该注解会给返回的这个字符串自动拼接前缀和后缀,使得其能够与前端的视图文件匹配上,这里我的视图页面的的名称为 hello 故返回 hello。底层会自动凭借前面的路径以及结尾的 .thyemleaf

 

第七步,引入 Tomcat ,启动

引入 tomcat ,并加入对应工程的 war 包

如果没有,可以手动创建,在如下界面点击 + 号,选择如下的选项后,找到自己的模块添加即可

ab083a52e8a54bc6919d7062f2ca1bff.png

添加 Tomcat 10 ,并启动(注意,低于 10 的Tomcat 会报 500 错误,亲测)

如果之前配置了 Tomcat 9 可能会占用 8080 和 1099 端口,我们将它们都 -1 即可

5f739ed4b01f4a218b3274ef234d2656.png

添加 war 包,设置根路径为/mvc

68699df663d44856b6dfb6eb2ef9306c.png

最后,访问 localhost:8079/mvc/a

5ae402a1c54948309db45139d4db0831.png

 

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

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

相关文章

找工作——行秋24届求职面试经验汇总

前言 求职记录&#xff1a;本人bg双9&#xff08;末流&#xff09;&#xff0c;共投岗位200&#xff0c;收到5个offer&#xff0c;求职方向偏向于国企&#xff0c;求职城市青睐新一线城市。个人求职记录 (qq.com)https://docs.qq.com/sheet/DSlBBVWRKZVZ5TWlD?tabBB08J2&…

C 06 编译4阶段

c语言编译的4个阶段&#xff1a;预处理、 编译、 汇编、 链接 预处理阶段会在源代码中查找预编译指令&#xff0c;其中主要是头文件展开&#xff08;include)&#xff0c;宏定义&#xff08;defind&#xff09;&#xff0c;选择性编译&#xff08;ifdef&#xff09;三种指令 预…

Claude 3.5 Sonnet引入了LaTeX公式渲染功能!!

终于&#xff0c;Claude 也引入了LaTeX公式渲染功能&#xff0c;消息一出&#xff0c;评论区的网友们热议不断。 【最新版】手把手Claude 3.5 Sonnet 详细步骤注册方法&#xff01;_claude 3.5 sonnet 注册 早在 ChatGPT 率先支持 LaTeX 语言用于输入和显示数学公式时&#xf…

[从0开始AIGC][LLM]:LLM中Encoder-Only or Decoder-Only?为什么主流LLM是Decoder-Only?

LLM中Encoder-Only or Decoder-Only & 为什么主流LLM是Decoder-Only&#xff1f; 文章目录 LLM中Encoder-Only or Decoder-Only & 为什么主流LLM是Decoder-Only&#xff1f;1. 什么是Encoder-only、Decoder-Only2. 为什么当前主流的LLM都是Decoder-only的架构低秩问题 …

欧瑞康oerlikon PECVD 系统 KAI MT R1.0 模块化 操作说明

欧瑞康oerlikon PECVD 系统 KAI MT R1.0 模块化 操作说明

HTML5手机端通用网站模板源码

文章目录 1.设计来源1.1 主界面1.2 文章信息界面1.3 文章列表界面1.4 双列文章列表界面1.5 通用标签界面1.6 联系我界面1.7 折叠框标签界面1.8 相关界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作…

如何给笔记本或台式机顺利升级内存条

先查一下主板还有无剩下卡槽 win r 输入命令 taskmgr 调用后台查看 获取两个关键信息 速度 2666MHZ &#xff0c;卡槽 2/4 意味着还剩下两个空卡槽 接下来 用鲁大师纯净版查一下主板型号 鲁大师 v5.21.1300 绿色纯净版 - 果核剥壳 (ghxi.com) 查完之后&#xff0…

如何使用双重IP代理实现更安全的网络访问

在进行网络爬虫或其他需要隐匿真实IP的操作时&#xff0c;单一的代理IP有时并不能完全满足我们的需求。为了进一步提高安全性和隐私保护&#xff0c;我们可以使用双重IP代理。本文将详细介绍如何使用Java实现双重IP代理&#xff0c;帮助你在网络环境中更加游刃有余。 什么是双重…

TOMCAT “tom小猫”向你招手!!赶紧学起来!

一、WEB技术 1.1HTTP协议和B/S 结构 操作系统有进程子系统&#xff0c;使用多进程就可以充分利用硬件资源。进程中可以多个线程&#xff0c;每一个线程可以被CPU调度执行&#xff0c;这样就可以让程序并行的执行。这样一台主机就可以作为一个服务器为多个客户端提供计算服务。…

文件系统 -文件的基本了解

文章目录 一、文件的基本了解1. 文件 内容 属性2. 文件被访问之前&#xff0c;要被打开3. 谁在打开文件&#xff1f; 二、fopen()w 方式打开文件① 基本使用&#xff1a;② 标准重定向&#xff1a; a 方式打开文件① 基本使用&#xff1a;② 重定向&#xff1a; fopen&#x…

Runtime:源码解析Golang 的map实现原理

go version 1.15.6 map作为一种常见的 key-value 数据结构&#xff0c;不同语言的实现原理基本差不多。首先在系统里分配一段连接的内存地址作为数组&#xff0c;然后通过对map键进行hash算法(最终将键转换成了一个整型数字)定位到不同的桶bucket(数组的索引位置)&#xff0c;然…

【国产游戏行业的崛起与挑战:技术革新与全球市场机遇】

近年来&#xff0c;国产游戏行业确实取得了显著的发展&#xff0c;不仅在技术水平上不断提升&#xff0c;而且在国际市场上也崭露头角。然而&#xff0c;面对全球游戏市场的激烈竞争&#xff0c;国产游戏技术仍面临一些挑战和机遇。 首先&#xff0c;国产游戏在原创IP方面存在…

Autodesk系列软件批量激活工具出现许可证管理器版本不被支持问题解决方案!

使用Autodesk系列软件批量激活工具时&#xff0c;如果出现许可证管理器版本不被支持。 解决办法&#xff1a; 1、确定您安装的最高Autodesk软件版本。 例如&#xff0c;如果您同时安装了AutoCAD2020和Inventor 2022,那么您应该下载2022版对应的AdskLicensing。 说明&#xf…

汽车信息安全--攻破SecOC,就在今天!

目录 1.SecOC和系统安全&#xff1f; 2.破解实录 2.1 破解安全访问授权 2.2 程序控制的漏洞 3.小结 2020年左右&#xff0c;汽车信息安全开始在业内普及。 对于这种新概念&#xff0c;部分OEM仍采取以往开发模式&#xff0c;在不影响软件架构的大背景下&#xff0c;直接进…

企业级NoSql数据库Redis集群

一、关系型数据库和 NoSQL 数据库 1.1 数据库主要分为两大类&#xff1a;关系型数据库与 NoSQL 数据库 关系型数据库&#xff0c;是建立在关系模型基础上的数据库&#xff0c;其借助于集合代数等数学概念和方法来处理数据库中的数据主流的 MySQL、Oracle、MS SQL Server 和 …

OpenHarmony中的fastjson gson应该这样用

【问题背景】 随着越来越多的开发者开始投入北向应用的开发&#xff0c;无数的人开始问我&#xff1a;鸿蒙三方库是否有fastjson&#xff0c;是否有gson&#xff0c;当前json和对象的转换要怎么搞。 作为程序员&#xff0c;我的每个项目都逃不掉fastjson/gson等三方库&#x…

C++基础知识5 string

string 1. string类1.1 C语言中的字符串 2. 标准库中的string类2.1 string类(了解)2.2 auto和范围for2.3 string类的常用接口说明 3. string类对象的访问及遍历操作4. string类对象的修改操作5. string类非成员函数6. vs和g下string结构的说明7. string类的模拟实现8.写时拷贝(…

认知杂谈35

今天分享 有人说的一段争议性的话 I 《日常藏宝&#xff0c;多留意》 嘿&#xff0c;你想想看哈&#xff0c;生活里那些让咱佩服得不行的小窍门&#xff0c;其实都藏在咱平常的小事儿里呢。 I 就好比啊&#xff0c;很多有用的道理其实就在咱身边晃悠&#xff0c;就看咱有没有…

nginx访问控制、用户认证、https

nginx访问控制 用于location段 Allow&#xff1a;设定允许哪台或哪些主机访问&#xff0c;多个参数间用空格隔开 Deny&#xff1a;设定禁止那台或哪些主机访问&#xff0c;多个参数间用空格隔开 //deny [rootnginx ~]# vim /usr/local/nginx/conf/nginx.conflocation /stat…

【数据结构篇】~链式二叉树(附源码)

链式二叉树 前言&#xff08;含头文件&#xff09;头文件 1.链式二叉树的组成2.前、中、后、层序遍历1.前序遍历2.中序遍历3.后序遍历 3.结点个数以及高度等​4.判断二叉树是否为完全二叉树 前言&#xff08;含头文件&#xff09; 之前的堆是特殊的二叉树是顺序结构的二叉树&a…