使用Maven实现Servlet程序
创建Maven项目
我们打开idea的新建项目,选中里面Maven即可,如下图:

创建完成之后,会看到这样的目录结构

其中,main目录存放业务代码,其中的java目录存放的就是java代码,而resources目录存放是程序中依赖的文件,比如:图片,视频等.
然后是 test目录,test目录存放的是测试代码.
最后一个是pom.xml 这个文件里面描述了Maven项目里面总的配置文件.
图示如下:

引入依赖
我们引入的依赖就是Servlet所对应的jar包
而Servlet代码是基于tomcat的api来执行,这些api我们通过第三方库的形式来导入
首先打开Maven的中央仓库:https://mvnrepository.com/
然后在里面搜索Servlet,找到如下位置:

点进去之后,选择3.1.0这个版本(这个版本和tomcat 8 是匹配的).

然后复制这里的代码即可,当然下载下来然后在导入也是可以的.

复制下来之后,我们点开pom.xml文件
在红框的这个位置添加一个<dependencies></dependencies>标签

然后将复制下来的内容粘贴到标签里面,如下:

此处如果是第一次创建Maven项目,可能会爆红条,但是不用担心,等下载完刷新一下就好了.
创建目录
因为此处是要创建一个web程序,所以还需要额外的创建一些目录
创建的目录是在main目录下的,和java、resources并列,然后如下:

里面是一个web.xml文件
web.xml
在外面上面创建好的web.xml目录里面还要放一些东西进去
<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app><display-name>Archetype Created Web Application</display-name>
</web-app>
把这一段代码粘贴进去就可以了.
web.xml的作用:
当我们创建完web.xml之后就可以开始编写代码了.
但是此处我们编写的代码是没有main方法的,所以我们运行就需要tomcat来帮助,而web.xml文件就是为了让tomcat能够识别当前我们的代码是webapp,并进行加载.
编写代码
首先要创建一个java文件

创建好类之后,让其继承HttpServlet
然后重写里面的 doGet方法并将里面自带的super给删掉.
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 父类里面的这个方法只是返回了一个错误页面// super.doGet(req, resp);}
}
这个doGet里面有一些参数我们进行解读.

第一个参数表示了一个HTTP请求,第二个参数表示了一个HTTP响应
写好的这个doGet方法会交给tomcat调用,Tomcat收到get请求,然后会触发doGet方法,同时Tomcat会构造好两个参数:req和resp
req参数是从TCPsocket中读出来的字符串,按照HTTP协议解析后得到的对象.
而resp是一个空的对象,程序员就需要根据req和业务逻辑构造出一个HTTP响应出来.
接下来就是代码的编写,此处没有业务逻辑,所以就只是打印一个hello world
同时还要在类上面加上一个@WebServlet("/hello")这样的注解.
注解的作用是针对某一个 类/方法 ,进行额外的"解释说明",赋予这个 类/方法 额外的 功能或含义.
此处这个注解的作用就是,把当前的类和一个HTTP请求的路径关联起来.
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 父类里面的这个方法只是返回了一个错误页面// super.doGet(req, resp);//这个打印是打印在控制台上面的System.out.println("hello world");//这里的代码是将 write 里面的数据写入 resp 的 body 中//等 resp 对象构造好了 tomcat 会统一的转成HTTP的格式 然后再写socketresp.getWriter().write("hello world");}
}
打包
打包的过程就是将程序编译好,得到一些.class文件,之后打成压缩包,比如:jar包就是一种.class构成的压缩包.
此处我们需要打的是war包,和jar包相比.
jar包只是一个普通的java程序,而war包是tomcat专属的描述webapp程序,一个war就是一个webapp.
打包的方法也比较简单,就是点击右侧的Maven后运行第一个目录下面的package

如果打包顺利此处会显示如下:


但是此时我们可以看到生成的是一个jar包,这是因为Maven是默认生成jar包的,如果想打war包就需要在pom.xml里面加一些东西,如下:
</dependencies><packaging>war</packaging>//可加可不加 build里面的finalName是包的名字<build><finalName>hello_servlet</finalName></build>

此时我们在重复之前的操作就生成war包了.

部署
所谓部署就是将打好的war包粘贴到Tomcat的webapps目录下

然后运行Tomcat(打开bin目录里面的startup)就完毕了.
验证
当部署好了之后,我们打开url验证下代码是否正常运行.
在网址栏中输入127.0.0.1:8080之后,输入这个文件夹名

最后再输入这里的注解

然后hello world就显示在我们的网页里面了.

当在浏览器地址栏中输入url之后,浏览器就构造了一个对应的HTTP GET请求,发给了Tomcat,然后Tomcat根据第一级路径确定了具体的webapp,根据第二级路径找到了具体要调用的类,然后在通过GET/POST 等方法确定调用HelloServlet的哪个方法(doGet,doPost....)
idea插件简化
上面过程中的打包和部署两个步骤可以通过idea里面的一个插件来完成.
首先点开idea的setting(设置)然后点击里面的插件选项搜索Smart Tomcat

最后进行安装.
此时插件就已经安装好了,然后我们点击面板右侧有一个小锤子旁边的下滑栏.

然后点击这个加号

在里面找到Smart Tomcat

然后再这里找到Tomcat的路径

其他的属性并不需要修改,不过有一个属性要记一下,下面会用到.

部署好了之后,我们关闭Tomcat(这一步书为了让端口空出来,不然会报异常)
在之后就运行程序即可.
若执行顺利,此时我们将url输入到浏览器的地址栏就可以重现之前的效果了.
这里的url和前面的可能有所不同.
127.0.0.1:8080 这一串是不变的,
它后面的路径要写成上面我们用红框标记的那一串路径,最后将标签里面的路径输入就完成了.
127.0.0.1:8080


相关文章:

使用Maven实现Servlet程序
创建Maven项目我们打开idea的新建项目,选中里面Maven即可,如下图:创建完成之后,会看到这样的目录结构其中,main目录存放业务代码,其中的java目录存放的就是java代码,而resources目录存放是程序中依赖的文件,比如:图片,视频等.然后是 test目录,test目录存放的是测试代码.最后一个…...

百度的文心一言 ,没有想像中那么差
robin 的演示 我们用 robin 的演示例子来对比一下 文心一言和 ChatGPT 的真实表现(毕竟发布会上是录的)。 注意,我使用的 GPT 版本是 4.0 文学创作 1 三体的作者是哪里人? 文心一言: ChatGPT: 嗯&a…...
文心一言发布的个人看法
文心一言发布宣传视频按照发布会上说的,文心一言并非属于百度赶工抄袭Chat-GPT的作品,而是十几年一直布局AI产业厚积薄发的成果,百度在芯片,机器学习,自然语言处理,知识图谱等方面均有相对深厚的积累。 国…...

【C5】111
文章目录bmc_wtd:syscpld.c中wd_en和wd_kick节点对应寄存器,crontab,FUNCNAMEAST2500/2600 WDT切换主备:BMC用WDT2作为主备切换的watchdog控制器AC后读取:bmc处于主primary flash(设完后:实际主…...
静态成员,友元函数
🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C 🔥座右铭:“不要等到什么都没有了,才下…...
数学分析课程笔记(张平):函数
01 函数 \quad作为数学分析的第一节课,首先深入了解一下函数。 \quad翻看一些教材可以发现,有些教材将“函数”与“映射”区分为两个概念,有些教材(尤其是前苏联时期的一些教材)则将其视为一个概念。实际上,…...
spring事务 只读此文
文章目录一. 事务概述1.1. MySQL 数据库事务1.2 spring的事务支持:1.2.1 编程式事务:1.2.2 声明式事务1.2.3 事务传播行为:1.2.4 事务隔离级别1.2.5 事务的超时时间1.2.6 事务的只读属性1.2.7 事务的回滚策略二. spring事务(注解 Transaction…...

真实的软件测试日常工作是咋样的?
最近很多粉丝问我,小姐姐,现在大环境不景气,传统行业不好做了,想转行软件测试,想知道软件测试日常工作是咋样的?平常的工作内容是什么? 别急,今天跟大家细细说一下一个合格的软件测…...

【UML】软件需求说明书
目录🦁 故事的开端一. 🦁 引言1.1编写目的1.2背景1.3定义1.4参考资料二. 🦁 任务概述2.1目标2.2用户的特点2.3假定和约束三. 🦁 需求规定3.1 功能性需求3.1.1系统用例图3.1.2用户登录用例3.1.3学员注册用例3.1.4 学员修改个人信息…...
面试官:html里面哪个元素可以让文字换行展示
在HTML中,可以使用 <br> 元素来强制换行,也可以使用CSS的 word-break 或 white-space 属性来实现自动换行。以下是这些方法的具体说明: 1.使用 <br> 元素 <br> 元素可以在文本中插入一个换行符,使文本从该位置…...

XGBoost和LightGBM时间序列预测对比
XGBoost和LightGBM都是目前非常流行的基于决策树的机器学习模型,它们都有着高效的性能表现,但是在某些情况下,它们也有着不同的特点。 XGBoost和LightGBM简单对比 训练速度 LightGBM相较于xgboost在训练速度方面有明显的优势。这是因为Ligh…...

JVM高频面试题
1、项目中什么情况下会内存溢出,怎么解决? (1)误用固定大小线程池导致内存溢出 Excutors.newFixedThreadPool内最大线程数是21亿(2) 误用带缓冲线程池导致内存溢出最大线程数是21亿(3)一次查询太多的数据,导致内存占用…...

Windows环境下实现设计模式——状态模式(JAVA版)
我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下Windows环境下如何编程实现状态模式(设计模式)。不知道大家有没有这样的感觉,看了一大堆编程和设计模式的书,却还是很难理解设计模式,无…...
【总结】多个条件排序(pii/struct/bool)
目录 pii struct bool pii 现在小龙同学要吃掉它们,已知他有n颗苹果,并且打算每天吃一个。 但是古人云,早上金苹果,晚上毒苹果。由此可见,早上吃苹果和晚上吃苹果的效果是不一样的。 已知小龙同学在第 i 天早上吃苹果能…...

基于stm32mp157 linux开发板ARM裸机开发教程Cortex-A7 开发环境搭建(连载中)
前言:目前针对ARM Cortex-A7裸机开发文档及视频进行了二次升级持续更新中,使其内容更加丰富,讲解更加细致,全文所使用的开发平台均为华清远见FS-MP1A开发板(STM32MP157开发板)针对对FS-MP1A开发板ÿ…...

最适合游戏开发的语言是什么?
建议初学者学习主流的开发技术 主流开发技术有大量成熟的教程、很多可以交流的学习者、及时的学习反馈等;技术的内里基本都是相同的,学习主流技术的经验、知识可以更好更快地疏通学习新知识和技术。 因此,对C#或者C二选一进行学习较好。 Un…...

C语言刷题(7)(字符串旋转问题)——“C”
各位CSDN的uu们你们好呀,今天,小雅兰的内容依旧是复习之前的知识点,那么,就是做一道小小的题目啦,下面,让我们进入C语言的世界吧 实现一个函数,可以左旋字符串中的k个字符。 例如: A…...

有趣且重要的JS知识合集(18)浏览器实现前端录音功能
1、主题描述 兼容多个浏览器下的前端录音功能,实现六大录音功能: 1、开始录音 2、暂停录音 3、继续录音 4、结束录音 5、播放录音 6、上传录音 2、示例功能 初始状态: 开始录音: 结束录音: 录音流程 …...

面试官:聊聊你知道的跨域解决方案
跨域是开发中经常会遇到的一个场景,也是面试中经常会讨论的一个问题。掌握常见的跨域解决方案及其背后的原理,不仅可以提高我们的开发效率,还能在面试中表现的更加游刃有余。 因此今天就来和大家从前端的角度来聊聊解决跨域常见的几种方式。…...

SpringCloud五大核心组件
Consul 等,提供了搭建分布式系统及微服务常用的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性token、全局锁、选主、分布式会话和集群状态等,满足了构建微服务所需的所有解决方案。 服务发现——Netflix Eureka …...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...