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是一款基于命令行的网络配置工具,它…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...