【计算机网络】Tomcat和Servlet基础知识汇总

news2025/7/18 6:06:47

目录

1.Tomcat:

2.Servlet:


1.Tomcat:

  1. Tomcat是一个HTTP的服务器,本质上就是一个TCP服务器,只不过加上了一些按照HTTP协议格式进行解析/构造这样的代码。
  2. 学习Tomcat的目的就是能够熟练掌握Tomcat api,基于Tomcat开发网站后端程序,基于这些http服务器进行二次开发。
  3. 将前端和后端代码放到webapps目录里面就可以通过自己的浏览器来访问了。在webapps目录下创建一个文件就被视为一个webapp,文件创建好之后需要重启Tomcat,才可以在浏览器上正常访问到。
  4. Tomcat是运行在JVM上的,跨平台!默认的编码是UTF-8,而windows的cmd默认编码是gbk。
  5. 若没有写具体的路径则默认是在webapps的ROOT目录下进行查找若文件没有给出路径并且文件名也不在ROOT中存在,就会报404务必要保证是在webapps目录中进行访问!

2.Servlet:

  1. Servlet就是Tomcat给程序员提供的进行二次开发的api。
  2. 静态页面和动态页面的概念。静态页面意思就是页面是固定的(以文件的形式,放在硬盘指定的的目录当中),无论是什么时候什么人来访问都是一样的页面。而动态页面不是一个真实的硬盘文件,而是代码在内存上构造出来的”虚拟文件资源“,不同的人不同的时间访问的页面就会不同。举个例子:我开水果摊,静态页面就是已经切好的水果,每一盒都是一样的;动态页面就是个性搭配,需要现做一个。
  3. 静态页面直接拷贝到webapps里面就行;动态页面就需要基于Servlet api进行写代码实现。
  4. 使用Servlet来编写一个hello world,
    一共7个步骤:
    1.创建项目
    2.引入Servlet依赖
    3.创建目录结构
    4.编写代码 
    5.打包程序
    6.部署程序
    7.验证程序
  5. 第1步:创建一个maven项目。maven是一个作用不限于编译、打包、部署的构建工具(build)。我们使用maven主要就是借助maven进行编译、打包和管理依赖。
  6. 第2步:引入Servlet依赖。Servlet不是Java标准库自带的需要下载并引入到项目中。maven的一个核心功能就是能够自动的管理依赖,就会把咱们使用的库里依赖的东西自动从中央仓库上下载下来。
  7. 第3步:创建目录结构。虽然maven已经创建出了一些目录但是还不够,还需要搞一个符合Tomcat要求的目录结果。这个目录结构的位置名称层次都要严格的一致,还需要在web.xml中复制一段代码。schema文件就描述了xml中都允许写哪些节点,节点之间的层级关系,哪些属性是违法的。
  8. 第4步:编写代码。把要编写的代码放到java这个目录下。Tomcat可以关联上很多路径,这样就关联上了不同的类,也就执行了不同的方法了。
    @WebServlet("/hello")   会针对某些GET请求生效
    这里写的是“/hello”
    意思是 GET请求并且url里面的路径是 /hello 的请求才会生效
    这样Tomcat才会调用到这里的doGet方法
  9. 第5步:打包程序。之前我们写的代码都是带main方法的相当于一个小汽车自带发动机(自己就能跑),当前我们写的Servlet代码没有main方法,就相当于一个火车车厢必须要把车厢挂到车后后面才可以跑起来(车头就是Tomcat,Tomcat带main,自带个发动机)。把写好的代码挂到火车头后面的过程就是打包+部署。一个类就是一个.class文件,是在方法区里加载的。当打包完成之后(打成了jar包),但Tomcat不使用,因为Tomcat要求的压缩包格式是war包。因此需要在pom.xml文件中配置。
  10. 第6步:部署程序。就是把war包拷贝到Tomcat的webapps中
  11. 第7步:验证程序。通过浏览器构造一个HTTP请求来访问Tomcat中的服务器,Tomcat服务器就会解析请求。例如:构造一个请求:127.0.0.1:8080/servlet/hello  。大致是先匹配Context Path第一级路径(/servlet),再匹配Servlet Path第二级路径(/hello),最后匹配HTTP方法。
    浏览器发送的请求时怎么和自己写的代码建立联系的:
    Tomcat服务器解析请求:
    1.获取到URL中的第一级路径/servlet(Context Path / Application Path),就是确定一个webapp。
    2.找到webapp之后就会加载里面的类,重点就是去识别出@WebServlet注解修饰的类。
      取出URL中的第二级路径/hello(Servlet Path),
      就在@WebServlet注解中找到名字为/hello的这个类
      找到类之后创建实例,这个实例只会创建一次,如果之前创建过就直接使用上次的实例
    3.再解析出HTTP请求的方法(如果是GET),取出GET之后就根据HTTP方法来调用对应的Servlet中的(do...方法),
      同时Tomcat还会构造出HttpServletRequest对象和HttpServletResponse对象
  12. Tomcat中的main方法主要做的事情就是针对webapps里的webapp进行加载将Context Path、Servlet Path和请求的方法加载到内存上。
  13. 使用Servlet编写个hello world这7个步骤中,第5和6步可以合并在一起。在idea中可以使用第三方的Smart Tomcat插件(plugin)来完成”一键式“的打包和部署。
  14. 如果Tomcat已经启动了,此时smart tomcat调用的tomcat就会绑定端口号失败。“一山不容二虎”!
    一个程序能不能绑定多个端口号? 
       -> 一个人能不能有多个手机号? 可以
    一个端口号能不能被多个程序绑定? 
       -> 一个手机号能不能被多个人使用? 不可以
  15. tomcat的运行方式有多种?
    1.直接在startup.bat上运行,需要手动拷贝war包到webapps目录中
    2.直接通过java代码,调用Tomcat的jar包运行,不需要拷贝war包。
      在webapps的目录中不会有war包,也没有欢迎页面(没有加载webapps目录下的东西)
  16. Context Path分成俩种情况来看待:(这是Tomcat俩种不同的运行模式,这俩种模式对Context Path的认知是不一样的!)
  17. 使用Smart Tomcat 时经常会遇到的问题。404:路径写错了或者是你的webapp没有被tomcat正确的加载(web.xml写错了,web.xml是tomcat加载war包的重要依据!)。405:请求的方法服务器这里没有实现(GET请求,服务器这里是doPOST方法就会出现405)或者是没有把super给删了。500:服务器这里的代码出BUG了。空白页面:说明服务器没有响应。无法访问此网站:说明tomcat服务器没有启动或者是IP地址端口号写错了。

如果对您有帮助的话,

不要忘记点赞+关注哦,蟹蟹

如果对您有帮助的话,

不要忘记点赞+关注哦,蟹蟹

如果对您有帮助的话,

不要忘记点赞+关注哦,蟹蟹

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17461.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

公司的这种打包启动方式,我简直惊呆了

前言 大家都知道,SpringBoot应用最终会打出一个Fat Jar, 里面包含了用到的全部依赖,启动也非常简单,java -jar xxx.jar即可。 但是我们公司打出的最终包,将依赖包挪到了外部,然后启动的时候通过loader.path指定依赖包…

第1章 数据库及其表的自动生成与前言

001 RootEntityTkey<Tkey>、BlogArticle RootEntityTkey<Tkey>&#xff1a;该实体类以泛型形式&#xff0c;定义了当前程序中所有实体的自增型主键。 BlogArticle&#xff1a;继承了RootEntityTkey<Tkey>&#xff0c;通过该实体类及其属性成员&#xff0c;用…

基于sklearn的机器学习实战

本文目录如下&#xff1a;LinearRegression线性回归入门数据生成定义模型模型测试与比较多项式回归具体实现LogisticRegression算法思想简述算法实现Decision TreeMLPSVM线性SVM多项式核高斯核对比不同核在Mnist上的效果读取数据高斯核多项式核线性核NBayesbagging与随机森林Ad…

适用于Linux的6个最佳Python IDE

早在 1991 年&#xff0c;当Guido van Rossum第一次引入 Python 时&#xff0c;他不会想到 Python 的未来发展这么好。现在我们在这里规模地使用Python构建项目。根据 2022 年的一份报告&#xff0c;Python 在全球拥有 29.53% 的份额&#xff0c;位居榜首。 Python 的设计牢记…

④开启shift后门实验报告

班级 计科1班 姓名 彭彭头 学号 时间 2022.05.13 成绩 实验项目名称 开启shift后门 实验目的 1、了解常用入侵主机的方法 2、掌握操作系统常见漏洞&#xff0c;并学会防范 实验内容 利用Windows7系统的shift漏洞&#xff0c;开启后门。 实验环境 操作系统&a…

分布式前修课:Zookeeper锁实现方式

前言 聊完MySQL和Redis&#xff0c;我们接下来在聊一聊Zookeeper。相信大家都已经发现了&#xff0c;这些都是我们在开发过程非常常用的技术。搞定他们&#xff0c;一切难题都不在话下。 Zookeeper&#xff0c;盘它 官网是我们学习某一种技术框架的第一手资料&#xff0c;通…

JAVA泛型

泛型的由来 因为JAVA中假如构建了一个object集合&#xff0c;在集合里存储任何的数据类型对象&#xff0c;定义了一个字符串&#xff0c;又定义一个常数。呢么在遍历数组Arraylist的时候&#xff0c;在代码行里并不会报错&#xff0c;但是运行之后会出现ClassCastException异常…

传奇私服开服架设教程 传奇服务端设置教程

首先开区要使用两个必备的软件&#xff1a;DBC2000、传奇引擎&#xff0c;当然也少不了传奇服务端(传奇服务端在论坛免费服务端和商业服务端中有下载)。 先把下载好的服务端解压到D盘或者某个般的根目录(所谓根目录&#xff0c;就是D盘或E盘&#xff0c;不是D盘和E盘的某个文件…

TCN代码详解-Torch (误导纠正)

1. 绪论 TCN网络由Shaojie Bai&#xff0c; J. Zico Kolter&#xff0c; Vladlen Koltun 三人于2018提出。对于序列预测而言&#xff0c;通常考虑循环神经网络结构&#xff0c;例如RNN、LSTM、GRU等。他们三个人的研究建议我们&#xff0c;对于某些序列预测&#xff08;音频合…

基于Matlab仿真极化双基地雷达系统(附源码)

目录 一、系统设置 二、系统仿真 三、使用圆极化接收阵列 四、总结 五、程序 此示例演示如何仿真极化双基地雷达系统以估计目标的范围和速度。发射器、接收器和目标运动学被考虑在内。 一、系统设置 该系统以 300 MHz 的频率运行&#xff0c;使用线性 FM 波形&#xff0…

Devkit代码迁移工具——smartdenovo源码迁移

smartdenovo源码迁移 迁移前准备工作 1、服务器和操作系统正常运行。 2、PC端已经安装SSH远程登录工具。 3、Porting Advisor已在准备好的x86平台环境和鲲鹏平台环境中完成安装并正常运行。 4、待迁移的相关软件包、源代码已准备就绪。 迁移步骤 1、利用Porting Advisor的源码…

人工智能学习:ResNet神经网络(8)

ResNet是一种非常有效的图像分类识别的模型&#xff0c;可以参考如下的链接 https://blog.csdn.net/qq_45649076/article/details/120494328 ResNet网络由残差&#xff08;Residual&#xff09;结构的基本模块构成&#xff0c;每一个基本模块包含几个卷积层。其中&#xff0c;…

【MySQL数据库笔记 - 进阶篇】(五)锁

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;暂定 &#x1f4dd;视频地址&#xff1a;黑马程序员 MySQL数据库入门到精通 &#x1f4e3;专栏定位&#xff1a;这个专栏我将会整理 B 站黑马程序员的 MySQL…

硬件科普系列之显示篇——LCD与OLED知多少

前言 无论是手机还是电脑&#xff0c;作为机器与人交互最为频繁的硬件设备&#xff0c;显示屏一直是决定用户体验最为关键的因素之一。大家近几年在购买手机的时候&#xff0c;可以发现目前大部分手机都在使用OLED屏幕&#xff0c;那么你有没有思考过为什么各大厂商都在大力推…

jupuyter的背景主题

jupuyter的背景主题一.背景主题安装查看可用主题1.主题安装2. **查看可用主题**3.更换主题&#xff0c;字体等其他设置4.其他命令&#xff0c;还原原本主题二.每个主题的效果1.chesterish2. grade33.gruvboxd4.oceans165.onedork6.solarizedd7.solarizedl一.背景主题安装查看可…

上帝视角看Vue源码整体架构+相关源码问答

前言 这段时间利用课余时间夹杂了很多很多事把 Vue2 源码学习了一遍&#xff0c;但很多都是跟着视频大概过了一遍&#xff0c;也都画了自己的思维导图。但还是对详情的感念模糊不清&#xff0c;故这段时间对源码进行了总结梳理。 本篇文章更合适于已看过 Vue2 源码&#xff0c…

使用NNI对DLASeg剪枝的失败记录

本文希望对CenterNet算法的Backbone暨DLASeg进行剪枝。 剪枝试验涉及3个文件&#xff0c;分别为&#xff1a; DCN可变性卷积dcn_v2.py&#xff0c;因为DLASeg依赖DCN。 #!/usr/bin/env python from __future__ import absolute_import from __future__ import print_functio…

如何在 Windows 10上修复0x000006ba错误

修复0x000006ba错误 可能导致此错误代码的原因已确认的可行的解决办法运行打印机疑难解答重新启动后台打印程序服务清除 PRINTERS 文件夹运行 SFC 和 DISM 扫描启用打印机共享某些 Windows 10 在尝试在 Windows 10 上打印新文档时遇到0x000006ba错误代码。其他用户在尝试使用 W…

【面试题】line-height继承问题

1. line-height为具体数值 当父元素line-height的值为具体数值的时候&#xff0c;例如30px&#xff0c;则子元素的line-height直接继承该数值。 <style>body{font-size: 20px;line-height: 50px;}p{background-color: #ccc;font-size: 16px;} </style><body&g…

类和对象的初步介绍

文章目录面向对象的初步认识什么是面向对象面向对象与面向过程类定义和使用简单认识类类的定义格式随堂练习定义一个学生类类的实例化什么是实例化类和对象的说明this 引用为什么要有this引用什么时this引用this引用的特性对象的构造和初始化构造方法概念特性默认初始化就地初始…