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++代码实战四、运行测试前言 本文由:我不会画饼呀 提供建议 大家如果有什么想看的文章(想了解的知识点),都可以在本专栏文章底部评论,或者私信我,在有能力的前提下,我都会尽量给大家写出来,供大家学习参考 …...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
游戏开发中常见的战斗数值英文缩写对照表
游戏开发中常见的战斗数值英文缩写对照表 基础属性(Basic Attributes) 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...