SpringMVC纯注解快速开发
此文章适合具有一定的java基础的同学看哦,如果有看不懂的基本代码还是先补补java基础哦。
此教程带您不使用xml文件而是纯注解开发,易懂、快捷、迅速,从0开始搭建,很快就能构建起一个SpringMVC项目,能学到两种使用tomcat部署的方法,并尽量对每个重点进行讲解,接下来开始吧。
目录
IDEA建立项目
引入依赖
建立软件包
编辑开始开发
部署tomcat
第一种方式
第二种方式
IDEA建立项目
从idea新建项目,这个大家总会吧。
先建个空项目,自定义名字、项目位置等,这些都可以随便,然后完成。
完成后在空项目里新建模块。
选择maven,java版本我依旧用万年java8
引入依赖
完成后便能看到项目的结构,我们编辑pom.xml文件,引入相关依赖,主要是两个依赖
<dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.10.RELEASE</version></dependency>
</dependencies>
可以看到springmvc版本是5.2.10,大家还是尽量跟我保持一致即可,然后点击一下maven图标按钮,会自动下载到本地maven仓库,没下载过的就是会显示红色,我这里已经下载过了所以是白色字,如果下载缓慢可以配置仓库源,可以百度搜索相关教程或查看文章:idea中Maven镜像源详细配置步骤记录(对所有项目)_java_脚本之家
如果没看到有maven按钮则从idea右边点出来,真的很保姆了。
建立软件包
下载完成后我们在java目录上右键,新建软件包
主要是controller和config包,所以我的是com.xiaoya.controller和com.xiaoya.config

开始开发
接下来是重点,我们在config包中新建ServletInit类(当然这个名字你随意取),然后我们需要继承这个类AbstractDispatcherServletInitializer,很多同学觉得这个类难记,其实我也记不住,记住前面这几个字母就行了,idea会自动提示的,如果怕忘,自己做好笔记就行了。
这个时候该类会爆红,因为要实现里面的三个方法,将鼠标放到红线上,就会提示你"实现方法",我们点击一下"实现方法"就行了(其实你按快捷键ctrl+i也行)
这个时候默认是这样子的
我们主要改一下图中标记的两个方法
package com.xiaoya.config;import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;public class ServletInit extends AbstractDispatcherServletInitializer {protected WebApplicationContext createServletApplicationContext() {AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();ctx.register(Config.class);return ctx;}protected String[] getServletMappings() {return new String[]{"/"};}protected WebApplicationContext createRootApplicationContext() {return null;}
}
第一个方法目的是要向Context中注册配置类,其中的Config.class是我们接下来要在config包新建的类。
第二个方法的内容很容易看出就是当我们进行请求时要从 / 路径开始。
然后我们在config包新建前面所说的Config类,内容不用写,就在上面写2个注解即可
@Configuration
@ComponentScan("com.xiaoya.controller")
第一个注解即标记为配置类,第二个注解就是扫描com.xiaoya.controller包里面的类
接着在controller包新建TestController类,在类上面写上@Controller,即控制层,我们来在里面写个函数返回hello字符串,然后使用@RequestMapping("/hello")注解,即访问/hello时执行hello函数,@ResponseBody就是返回响应体,即返回"hello"字符串,如果不加这个注解的话会去寻找静态资源下的hello文件而不是返回字符串,文章后面会讲到。
package com.xiaoya.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class TestController {@RequestMapping("/hello")@ResponseBodypublic String hello(){return "hello";}
}
这个时候就完成了非常简单,接下来我们来部署tomcat容器启动:
部署tomcat
第一种方式
第一种方式就是通过maven插件,我们在pom.xml中添加tomcat插件,然后点击maven按钮下载
<build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port>8080</port><path>/</path></configuration></plugin></plugins></build>
下载完成后我们点击添加配置,在弹出的界面中点击左上角的 + 按钮,选择maven
在运行命令行那里写上tomcat7:run,然后确定即可。写的时候会有提示的,前提是前面所说的tomcat的插件已经下载好了。
接着在pom.xml中添加
<packaging>war</packaging>
即打为war包的形式运行,点击一下maven按钮,只要pom.xml内容有变更就点一下maven按钮就对了。
都完成后便能发现有绿色的运行按钮了,我们点击就能启动。
如果不出意外的话应该要出意外了,在运行的过程中提示main目录下不存在webapp目录
那这很简单,在main目录下建webapp目录就行了
然后重新启动没有错误了,访问http://127.0.0.1:8080/hello,就能看到响应体字符串了
第二种方式
第二种便是下载tomcat,尽量选择版本9及以前的版本,10好像测试的时候有点问题,可以在我的资源下载:
tomcat8
https://download.csdn.net/download/MKIDM/90085926https://download.csdn.net/download/MKIDM/90085926tomcat9
https://download.csdn.net/download/MKIDM/90085933https://download.csdn.net/download/MKIDM/90085933下载任一版本后点击编辑配置
在弹出的界面中依旧点击左上角的+,选择Tomcat服务器-本地
名称任意,点击配置,选择你下载的tomcat所在的位置
选择好主目录后下面的基目录会自动调好的不用管,点击确定
此时我们看到有个警告,我们点击右边的修复
此时可以看到弹出来两个工件让我们选择,选择任一一个都可以
应用程序的上下文就是根路径,为了方便我们也可以改成 /,看您自己的意愿
点击修复的时候之所以有那两个工件那是因为我们前面已经通过maven生成好了,如果先用这个方法的话是没有工件的,那我们也可以点击文件--项目结构
点到工件,就能看到这两个工件
那么我们把它删除,说一下如果没有工件时该怎么创建,点击 - 就能删除,删除这2个工件
点击+按钮,选择Web应用程序:展开型,点击基于模块,选择我们这个项目的模块,我们这本来就只有一个模块,所以直接确定就行了。
这样就可以看见生成好了
然后我们重新配置tomcat,点到部署,点击+按钮,选择工件即可。
然后点击运行按钮即可,会自动跳转到浏览器,访问/hello路径就行了。注意上下文的路径,如果上下文的路径默认没更改的话根路径就不是/,如图应该是/springmvc1_war_exploded,所以没更改的话应该访问/springmvc1_war_exploded/hello。自动跳转到浏览器的时候也是跳到/springmvc1_war_exploded
如果没改上下文路径的话访问http://127.0.0.1:8080/springmvc1_war_exploded/hello即可看到回显字符串,就不演示了。
所以通过以上我们就发现通过纯注解也可以快速地就搭建SpringMVC项目,其实过程说的比较啰嗦了,主要是照顾到一些新手,所以有很多保姆级讲解,操作上能讲的都尽量讲了,有一定经验的可以跳着看。
源码:https://download.csdn.net/download/MKIDM/90086092https://download.csdn.net/download/MKIDM/90086092总结下来就是:
1. 在config包中新建配置类,添加注解@Configuration、@ComponentScan("com.xiaoya.controller")
2. 在config包建第二个类,继承AbstractDispatcherServletInitializer类,实现其中的三个方法,主要改动其中二个方法
3. 在controller包建控制请求路径的类,类上添加注解@Controller。
@RequestMapping("/hello2")就是请求路径
@ResponseBody 声明响应体就是该方法返回的内容,而不是静态资源名。
4. 部署tomcat容器,介绍了两种方法。
看到这已经差不多了,但是我们得把坑补完,前面说过不加@ResponseBody的话返回的就是静态资源名,如图,我们将@ResponseBody注解去掉,返回的内容改为hello.jsp
然后在webapp目录新建hello.jsp
body里面随便写点内容
启动tomcat,访问http://localhost:8080/springmvc1_war_exploded/hello就是访问hello.jsp
当然,访问http://localhost:8080/springmvc1_war_exploded/hello.jsp也行。
好了这篇文章到此结束了,有不懂的可以评论或者私信我,看到了就会回,现在看几个笑话放松一下吧*⸜( •ᴗ• )⸝*:https://blog.csdn.net/mkidm/category_12833444.html?spm=1001.2014.3001.5482
相关文章:

SpringMVC纯注解快速开发
此文章适合具有一定的java基础的同学看哦,如果有看不懂的基本代码还是先补补java基础哦。 此教程带您不使用xml文件而是纯注解开发,易懂、快捷、迅速,从0开始搭建,很快就能构建起一个SpringMVC项目,能学到两种使用tom…...
【JAVA】Java高级:多数据源管理与Sharding:在Spring Boot应用中实现多数据源的管理
一个电商平台可能需要一个数据库来存储用户信息,另一个数据库来存储订单信息,甚至可能还有一个数据库用于数据分析。这种情况下,如何在Spring Boot应用中实现多数据源的管理就显得尤为重要。 1. 多数据源管理的重要性 在实际应用中…...

汽车网络安全 -- IDPS如何帮助OEM保证车辆全生命周期的信息安全
目录 1.强标的另一层解读 2.什么是IDPS 2.1 IDPS技术要点 2.2 车辆IDPS系统示例 3.车辆纵深防御架构 4.小结 1.强标的另一层解读 在最近发布的国家汽车安全强标《GB 44495》,在7.2节明确提出了12条关于通信安全的要求,分别涉及到车辆与车辆制造商云平台通信、车辆与车辆…...
黑马点评项目测试总结
黑马点评项目测试面经总结: 一,怎么使用使用Postman进行接口测试? 1,安装Postman 2. 创建请求: 打开Postman,点击"New"按钮创建一个新的请求。在弹出的窗口中,选择请求的类型&#x…...

【Selenium】基于 WebDriverWait 爬取带有懒加载的静态页面
0x00 前言 朋友做标书,需要用到每日温度,他的老板让在这个网页手动复制做一个长期表出来:http://www.tianqihoubao.com/lishi/nanjing/month/202412.html 想着帮个忙,做个爬虫脚本吧,忽然发现这个页面很有意思…...
【docker】docker compose 和 docker swarm
Docker Compose 和 Docker Swarm 都是 Docker 生态中的工具,但它们有不同的用途和目标。 下面是这两者的主要区别,帮助你理解它们在不同场景中的使用。 1. 用途和目标 Docker Compose: 目标:主要用于在单个机器上定义和运行多个容器应用&a…...

Javaweb 前端 ajax
作用:和后端交互 script 是 js axios(这里是函数的调用方式){封装的是对象} {}是对象 案例 。then的含义,请求后端之后,后端把数据放在回调 点了清空之后,还要查询全部 await等待请求执行完之后,接收这个结果 代码…...
【蓝桥杯每日一题】重新排序
重新排序 2024-12-8 蓝桥杯每日一题 重新排序 前缀和 差分 题目大意 给定一个数组 A 和一些查询 L i , R i Li_,R_i Li,Ri, 求数组中第 L i L_i Li至第 R i R_i Ri个元素之和。 小蓝觉得这个问题很无聊, 于是他想重新排列一下数组, 使得最终每个查 询结果的和尽可能…...
《深入浅出HTTPS》读书笔记(16):消息验证码算法分类
MAC算法有两种形式,分别是CBC-MAC算法和HMAC算法。 CBC-MAC算法从块密码算法的CBC分组模式演变而来,简单地说就是最后一个密文分组的值就是MAC值。 HMAC(Hash-based Message Authentication Code)算法使用Hash算法作为加密基元&am…...
如何使用Apache HttpClient来执行GET、POST、PUT和DELETE请求
Apache HttpClient 是一个功能强大且灵活的库,用于在Java中处理HTTP请求。 它支持多种HTTP方法,包括GET、POST、PUT和DELETE等。 本教程将演示如何使用Apache HttpClient来执行GET、POST、PUT和DELETE请求。 Maven依赖 要使用Apache HttpClient&…...

数据结构-希尔排序
每次对5个间隔的元素进行插入排序,然后间隔依次递减,直到间隔为1 互质:相邻的两个元素没有公因子 这个例子只有间隔1起来作用 #include<iostream> using namespace std; typedef int ElmentType; void shell_Sort(ElmentType A[], int…...
Spire.doc 合并word,复制word
之前使用的poi来实现这个功能,然后发现在复制chart时,边框样式无法修改,于是就使用了spire.doc 1. 引入依赖 <repositories><repository><id>com.e-iceblue</id><name>e-iceblue</name><url>https…...

【Spring项目】表白墙,留言板项目的实现
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:项目实现准备 1:需求 2:准备工作 (1)…...

分布式事务-nacos/seata在windows环境下部署及开发
参考资料: nacos的windows环境部署 seata和nacos的结合及seata开发 参考demo及资料 nacos在windows环境下的部署: nacos在windows下的部署参考文章 seata加入nacos配置: 首先下载seata安装包:Release v1.7.0(Not Apache relea…...
分布式微服务架构下的密码安全性方案
在 Spring Cloud 微服务架构中,涉及登录或注册时的密码安全性问题,通常需要从传输过程中的安全性和存储过程中的安全性两个方面进行保护。以下是主流的安全性保证方案: 传输过程中的安全性 HTTPS 加密传输: 使用 HTTPS 协议来保…...

基于pytorch的深度学习基础4——损失函数和优化器
四.损失函数和优化器 4.1 均值初始化 为减轻梯度消失和梯度爆炸,选择合适的权重初值。 十种初始化方法 Initialization Methods 1. Xavie r均匀分布 2. Xavie r正态分布 4. Kaiming正态分布 5. 均匀分布 6. 正态分布 7. 常数分布 8. 正交矩阵初…...

网络安全信息收集(总结)更新
目录 重点: 前言: 又学到了,就是我们什么时候要子域名收集,什么时候收集域名,重点应该放前面 思考: 信息收集分为哪几类,什么是主域名,为什么要收集主域名,为什么要收…...

web斗地主游戏实现指北
前后端通信 作为一个即时多人游戏,不论是即时聊天还是更新玩家状态,都需要服务端有主动推送功能,或者客户端轮询。轮询的时间间隔可能导致游玩体验差,因为不即时更新,而且请求数量太多可能会打崩服务器。 建议在cs间…...

SpringMVC其他扩展
一、全局异常处理机制: 1.异常处理两种方式: 开发过程中是不可避免地会出现各种异常情况的,例如网络连接异常、数据格式异常、空指针异常等等。异常的出现可能导致程序的运行出现问题,甚至直接导致程序崩溃。因此,在开发过程中,…...
【Linux】网络服务
声明,以下内容均学习自《Linux就该这么学》一书 1、创建网络会话 Linux系统使用NetworkManager提供网络服务,它是一种动态管理网络配置的守护进程,能够让网络设备保持连接状态。 nmcli nmcli是一款基于命令行的网络配置工具,它…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...