使用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-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...

rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...