Tomcat+Servlet初识
文章目录
- Tomcat
- 什么是Tomcat
- Tomcat的安装
- 启动tomcat
- 静态页面的访问
- 动态页面的访问
- 一个Servlet程序的部署流程
Tomcat
什么是Tomcat
Tomcat是一个HTTP服务器,在开发或调试Servlet代码时应用广泛;使用Tomcat,实际就是将用户浏览器输入的http请求经Tomcat进行转发到目的服务器,再由Tomcat将目的服务器的响应信息返回给浏览器。
对于一些使用html,css等超文本标记语言编写的代码,可以直接通过浏览器使用Tomcat来查看效果;
Tomcat大抵就是充当一个中转站的效果,解析用户的http请求发给目的服务器,再将服务器的请求返回。
Tomcat的安装
直接去到tomcat的官网https://tomcat.apache.org/选择自己需要的版本,然后点击下图所示的压缩包进行下载即可:
下载完成之后,对压缩包进行解压,可以得到如下所示的目录结构:
这里简单介绍tomcat的目录结构,实际细节不必深究;
bin:该目录下主要存放一些可执行程序,像tomcat的启动就是使用该目录下的某个文件完成的;
conf:这里主要是有关tomcat的一些配置文件;
lib:该目录下是存放tomcat运行过程中所依赖的库;
logs:这里存放tomcat的运行日志;
temp:这里主要存放的是tomcat在运行过程中产生的一些临时文件;
webapps:该目录下就是存放业务代码(即自己写的代码),像html、css等
work:tomcat的工作目录;
启动tomcat
双击tomcat文件夹下bin目录中的文件startup.bat即可启动tomcat:
启动成功以后的效果图:
这里启动过程中出现乱码的原因是,tomcat默认使用UTF-8的编码方式来处理中文,但windows的cmd默认是使用GBK编码,两种编码方式的不同引起了这里启动时的乱码,但实际并不影响使用~
下面我们可以通过浏览器来尝试访问tomcat自带的页面:
127.0.0.1是一个环回ip,表示当前主机,而8080代表tomcat默认的端口号;
静态页面的访问
将一个静态文件(像html)拷贝到tomcat的webapps/root目录下,就可以使用浏览器进行访问:
动态页面的访问
一个Servlet程序的部署流程
相比于页面内容固定的静态页面,我们更多时候见到的都是根据用户操作不同而显示内容不同的动态页面,这就需要借助到Tomcat提供的API,即Servlet;
下面就是使用Servlet来完成一个简单代码,同时使用Tomcat通过浏览器来访问,整个过程需要这样7个步骤来完成:
- 创建项目
Tomcat自身是基于Java来实现的程序,因此它的正确运行是离不开Java的,这里创建项目就是使用Java的开发工具IDEA来创建一个Maven项目;
注意:如果是首次创建Maven项目,一定要等待项目的所有依赖加载成功(通过网络自动加载),这个过程可能会比较缓慢,需要耐心等待,但如果这里项目本身的依赖加载失败,后续势必会出现更多更加棘手的问题,当这里的目录结构如下图时,代表加载完成;
- 引入依赖
引入编写Servlet程序所需要的依赖;
大致流程如下:
访问maven中央仓库,https://mvnrepository.com/,在输入框中servlet;
选择第一个即可
然后根据自己的Java版本和Tomcat版本选择servlet的版本(可以在http://tomcat.apache.org/whichversion.html)查询三者对应的版本要求,这里我选择了servlet3.1的版本,然后复制如下面图所示的内容到maven项目的pom.xml文件中;
粘贴之前首先需要在pom.xml文件中写入一个标签 < dependencies > </ dependencies >,将复制的内容粘贴在标签内:
然后可以再次点击界面右侧的maven按钮,再次加载依赖,防止依赖加载失败而后续带来问题;
- 创建目录
在main目录下创建如下所示的目录结构,一定要保证与图上目录一致,因为这是tomcat方识别程序的要求,遵守是必须的;
然后在我们所创建的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>
- 编写代码
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** Created with IntelliJ IDEA.* Description:* Date: 2023-03-13* Time: 19:21*///添加路径注解
@WebServlet("/hello")
public class ServletDemo1 extends HttpServlet {//重写doGet方法@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//简单打印一句代码到服务器的控制台System.out.println("hello,servlet!");//这句代码将在浏览器页面显示resp.getWriter().write("Hello,Servlet!");}
}
注解表示在tomcat收到的众多请求中,路径为/hello的请求才会调用ServletDemo1这个类中的代码,如果路径不对。tomcat就无法正确访问到代码;
doGet方法的两个参数分别表示收到的http请求和需要构造的http响应,这里的响应参数最初是一个空对象,后续调用方法以后返回的响应数据将被填充到此处;这个方法在tomcat收到get请求时才会被触发;
resp.getWrite()是将我们后面写入的数据作为响应数据的body,写回给浏览器;
这段代码不需要main方法作为程序的入口,因为在tomcat中就包含了main方法;
- 打包程序
打包程序依然是借助maven来完成,双击这里的package即可:
看到如下的提示就表示打包完成:
打包完成以后,就可以在项目的目录部分看到一个打包之后得到的jar包
maven打包生成的是默认的jar包,但是实际tomcat能够识别的却是一个war包,所以我们需要重新操作来得到一个war包,在pom.xml中添加如下代码:
<packaging>war</packaging><build><finalName>ServletDemo1</finalName></build>
packaging标签就是用来设置打包格式;
build标签下的finalName标签用来设置生成包的名字;
重新进行打包~
jar包中包含一些.class文件,是普通的Java程序打包的结果;
war包中包含.class文件,同时包含html、css、其他的jar包等;
- 部署
打包成功之后,就可以进行程序的部署了,实际就是将打包得到的war包复制粘贴到我们tomcat的webapps目录中去
然后,启动tomcat~
- 验证程序
部署成功之后,就可以使用浏览器构造http请求来验证我们程序的执行情况了;
http请求的构造我们借助环回ip来实现,这里的路径,首先是我们打包的war包的名字,然后是我们代码中注解的内容,注意不要写错哦~
这样,我们就在浏览器看到了程序的运行结果,一个简单的servlet程序就完成啦~
over!
相关文章:

Tomcat+Servlet初识
文章目录Tomcat什么是TomcatTomcat的安装启动tomcat静态页面的访问动态页面的访问一个Servlet程序的部署流程Tomcat 什么是Tomcat Tomcat是一个HTTP服务器,在开发或调试Servlet代码时应用广泛;使用Tomcat,实际就是将用户浏览器输入的http请…...

ChatGPT-4 终于来了(文末附免费体验地址)
大家好,我是小钱学长。 ChatGPT4.0 重磅来袭,今天一打开plus页面出现的就是这个GPT-4的体验界面!现在就带大家一起看看GPT4.0。 进入之后是这样的 看到最下面有一行话,目前应该是4个小时限制100条消息。 GPT-4有什么优势&…...

【C++学习】类和对象(中)一招带你彻底了解六大默认成员函数
前言:在之前,我们对类和对象的上篇进行了讲解,今天我们我将给大家带来的是类和对象中篇的学习,继续深入探讨【C】中类和对象的相关知识!!! 目录 1. 类的6个默认成员函数 2. 构造函数 2.1概念介…...
面试——Java基础
说一说你对Java访问权限的了解 在修饰成员变量/成员方法时,该成员的四种访问权限的含义如下: private:该成员可以被该类内部成员访问; default:该成员可以被该类内部成员访问,也可以被同一包下其他的类访…...

JavaWeb——Request(请求)和Response(响应)介绍
在写servlet时需要实现5个方法,在一个service方法里面有两个参数request和response。 浏览器向服务器发送请求会发送HTTP的请求数据——字符串,这些字符串会被Tomcat所解析,然后这些请求数据会被放到一个对象(request)里面保存。 相应的Tom…...

JMeter压测文件上传接口和中文乱码
一、压测文件上传接口 新建测试计划,然后添加需要的元件。 1、添加HTTP信息头管理器 可以在测试计划中添加,也可以在线程组里面添加。 我的接口使用到 token信息。这里在测试计划中添加。 2、添加线程组 上图解释:会在 2秒钟之内启动起来 5…...

CSRF漏洞复现
目录标题原理如何实现和xss区别危害CSRF实战(pikachu)dvwa靶场CSRF(Cross Site Request Forgery)。跨站请求伪造原理 攻击者会伪造一个请求(一般是一个链接),然后让用户去点击,然后…...

Google Colab导入GitHub python项目进行运行
本文介绍包含 ipynb后缀文件的github项目,导入到GitHub上进行运行的方法。 导入项目 Colab是需要梯子的。 访问网址:https://colab.research.google.com 输入github网之后回车,下面的内容是从github上自动获取的。 选择项目要打开的ipynb文…...

Qss样式表语法
QSS样式表语法 更多精彩内容👉个人内容分类汇总 👈👉QSS样式学习 👈文章目录QSS样式表语法[toc]概述一、样式规则二、选择器类型三、子控件四、伪状态五、样式表冲突解决六、级联七、继承八、命名空间中的控件概述 Qt样式表的概念…...
「Python 基础」异步 I/O 编程
I/O 密集型应用程序大大提升系统多任务处理能力; 异步 I/O 模型 一个消息循环,主线程在消息循环中不断重复 读取消息-处理消息; # 获取线程池 loop get_event_loop() while True:# 接收事件消息event loop.get_event()# 处理事件消息pro…...

通配符的匹配很全面, 但无法找到元素 ‘tx:advice‘ 的声明
💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 通配符的匹配很全面, 但无法找到元素 ‘tx:advice’ 的声明 错误原因: xmlns和xsi:schemaLocation未书写约束或者书写错误 正确书写 <beans xmlns:tx&q…...

响应式编程详解,带你熟悉Reactor响应式编程
文章目录一、什么是响应式编程1、Java的流和响应式流2、Java中响应式的使用3、Reactor中响应式流的基本接口4、Reactor中响应式接口的基本使用二、初始Reactor1、Flux和Mono的基本介绍2、引入Reactor依赖3、响应式类型的创建4、响应式类型的组合(1)使用m…...

踩坑篇之WebSocket实现类中无法使用@Autowired注入对象
大家好,我是小简,今天我又大意了,在WebSocket这个类上踩坑了。 接下来我讲讲我踩坑的经历吧! package cn.donglifeng.shop.socket.endpoin;import cn.donglifeng.shop.common.context.SpringBeanContext; import cn.donglifeng.s…...

QT CTK插件框架 (一 下载编译)
CTK 为支持生物医学图像计算的公共开发包,其全称为 Common Toolkit。为医学成像提供一组统一的基本功能;促进代码和数据的交互及结合;避免重复开发;在工具包(医学成像)范围内不断扩展到新任务,而…...

【Java版oj】day10 井字棋、密码强度等级
目录 一、井字棋 (1)原题再现 (2)问题分析 (3)完整代码 二、密码强度等级 (1)原题再现 (2)问题分析 (3)完整代码 一、井字棋 &a…...

JavaScript的事件传播机制
你在学习和编写JavaScript时可能听说过事件冒泡(event bubbling)。它会发生在多个元素存在嵌套关系,并且这些元素都注册了同一事件(例如click)的监听器时。 但是事件冒泡只是事件机制的一部分。它经常与事件捕获(event capturing)和事件传播…...

队列的定义及基本操作实现(链式)
个人主页:【😊个人主页】 系列专栏:【❤️数据结构与算法】 学习名言:天子重英豪,文章教儿曹。万般皆下品,惟有读书高 系列文章目录 第一章 ❤️ 学前知识 第二章 ❤️ 单向链表 第三章 ❤️ 递归 文章目录…...

集成方法!
目录 关注降低variance,选择bias较小的基学习器 Bagging Stacking Random Forest 关注降低bias,选择variance较小的基学习器 Adaboost Boosting 关注降低variance,选择bias较小的基学习器 Bagging 给定m个样本的数据集,利用有放回的随机采样法,得…...

20年程序员生涯,读了200多本技术书,挑了几本精华好书分享给大家
不知不觉已经又走过了20个年头了,今年已经44了,虽然我已经退休在家,但一直都保持着读书的习惯,我每年平均要读10本技术书籍,保持不让自己的技术落伍。 这些年读的技术书不下200本,很多好书我都会保存在家&a…...
C++ 手写一个WebServer
文章目录 前言一、WebServer的原理刨析二、HTTP协议基础三、C++代码实战四、运行测试前言 本文由:我不会画饼呀 提供建议 大家如果有什么想看的文章(想了解的知识点),都可以在本专栏文章底部评论,或者私信我,在有能力的前提下,我都会尽量给大家写出来,供大家学习参考 …...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...