使用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 …...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...

解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...