当前位置: 首页 > news >正文

Tomcat和Servlet基础知识的讲解(JavaEE初阶系列16)

目录

前言:

1.Tomcat

1.1Tomcat是什么

1.2下载安装

2.Servlet

2.1什么是Servlet

2.2使用Servlet来编写一个“hello world”

1.2.1创建项目(Maven)

1.2.2引入依赖(Servlet)

1.2.3创建目录(webapp)

1.2.4编写代码(HelloServlet)

1.2.5打包(war)

1.2.6部署(拷贝war到webapps目录中)

1.2.7验证(浏览器发一个GET请求)

2.3上述过程的简化

2.4Servlet程序中常见的问题

结束语:


前言:

在上节博客中小编主要是与大家一起分享了有关于HTTP和HTTPS的一些基础知识,以及一些有关于构造请求的方式,介绍了postman软件构造请求的使用。HTTP是前后端交互的桥梁 ,前端是浏览器,后端就是HTTP服务器,它本质上就是一个TCP服务器(HTTP是基于TCP)这个服务器按照HTTP协议的约定,解析请求,构造请求。现在有很多HTTP服务器,我们可以直接进行使用。在Java中,最知名的就是Tomcat,今天小编主要与大家分享的是Tomcat的使用以及Servlet的简单介绍。

1.Tomcat

1.1Tomcat是什么

Tomcat是一个HTTP服务器,在前面我们学习了HTTP协议,我们知道了HTTP就是HTTP客户端和HTTP服务器之间进行交互数据的格式,同时我们也通过Ajax和Java Socket分别构造了HTTP客户端。HTTP服务器我们也可以通过Java Socket来实现,而Tomcat就是基于Java实现的一个开源免费的,也是被广泛使用的HTTP服务器。

1.2下载安装

①访问官网☞https://tomcat.apache.org/

②下载8版本的。

③点击进入Tomcat8之后,点击下面的压缩包进行下载。

④下载完成之后,然后再进行解压缩,解压到当前目录中。

⑤点开文件夹。

⑥双击startup.bat,当弹出一个黑色的框框并且看到下面的这一串数字就说明已经好了。

如果和小编的不一样,那么可能需要配置一下环境变量。

⑦查看Tomcat的端口号是否绑定正确。

⑧通过浏览器来访问Tomcat的欢迎界面。

⑨接下来我们将我们之前写的一个博客系统使用Tomcat来部署一下。(博客系统的代码请参考这里☞http://t.csdn.cn/Vy1iG)

所谓的部署一个网站到Tomcat上,就是把对应的内容拷贝到Tomcat的webapps目录中即可。

 

然后重新点击startup.bat启动Tomcat,在访问http://127.0.0.1:8080/Blog_System/blog_list.html 

就可以访问到我们自己写的系统了。

那么这里我们思考两个问题,为什么我们直接双击html的时候也可以访问到我们的页面,为什么还要将它部署到Tomcat上呢?

首先当我们将其部署到Tomcat上之后是通过网络来进行访问的,当我在我的机器上部署了Tomcat别人就可以跨主机来进行访问到我的页面了,但是如果直接双击打开只能是在你自己的电脑上打开,别人是无法直接访问的。但是做到这里还不能够让别人访问到我的页面,要想要别人访问到页面就需要将其部署到云服务器上,后面我们在细说。

总结Tomcat的使用:

  • 启动。
  • 把内容拷贝到webapps。
  • 通过浏览器访问。
  • 使用netstat查看端口。

2.Servlet

2.1什么是Servlet

我们现在是想要基于Tomcat来写一个服务器,但是从头开始写会比较麻烦,所以Tomcat以及完成了一部分工作了,并且Tomcat给我们提供了一系列的API,可以让我们在程序中直接调用。这组API就叫做Servlet。这样我们就可以直接省去一部分工作了,比如解析HTTP报文,根据协议构造响应报文等,这样就可以让我们更加专注于业务逻辑了。下面我们就从编写一个“hello world”着手来感受一下操作步骤。

2.2使用Servlet来编写一个“hello world”

1.2.1创建项目(Maven)

这里解释一下Maven,它是一个构建工具,功能是帮助我们去构建、测试、打包一个项目。

创建好一个maven项目之后,首先会有一个pom.xml配置文件。这个文件就描述了maven项目的各方面的内容。

 

1.2.2引入依赖(Servlet)

这里我们直接在中央仓库中下载Servlet的依赖☞https://mvnrepository.com/

注意:这里我们要保证和Tomcat8.5的版本匹配,我们这里直接选择3.1.0版本的即可。 

这里我们不需要点击jar包下载,我们直接找到maven块,将它复制到pom.xml代码中就可以了。然后让idea自己从中央仓库下载即可。

 

如果字体是红色的话就刷新一下maven,可能还没有下载完成。 

 

1.2.3创建目录(webapp)

注意这里的目录的名字必须要和小编的保持一致!!!

这里的web.xml是给Tomcat看的,Tomcat是从webapps目录中加载webapp,就是以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>

这里可能会出现红色的字,但是不会影响我们后续的进展的,所以无所谓,大家不用太在意。

1.2.4编写代码(HelloServlet)

①继承HttpServlet父类重写doGet方法。

方法的解释:
这里的doGet方法完成的工作就是根据请求,计算生成响应。

对于一个服务器来说要完成的工作主要有以下三个:

  1. 读取请求并解析。
  2. 根据请求计算响应。
  3. 把响应写回给客户端。

上述的1和3过程Tomcat已经帮助我们完成了,我们只需要在代码中完成第二步就可以了。 

解释上述参数:

 

这里注意一定要删除调用父类的doGet代码。

原因:在调用父类的doGet中会直接返回一个405,所以这里我们就直接删掉。

②在doGet中编写代码,打印hello world。 

③给这个HelloServlet加注解。

注解就是@XXX。他一般是用来修饰一个类或者是一个方法,注解的本质是一个特殊的类。给某个代码加上注解其实就是相当于是让编译器/JVM工作的时候执行一段额外的逻辑。

1.2.5打包(war)

我们的代码没有main函数,所以不能够采用我们之前的方式来运行了,这里我们是将其放到Tomcat上运行(部署)。部署的前提是先进行打包。那么这里我们为什么要打包呢?对于一个规模比较大的项目,里面就会包含很多的.java文件,进一步就会产生很多的.class,所以我们就需要把这些.class文件先拿打包成压缩包,然后再拷贝。

这里我们是使用Tomcat的专属格式war包。

如果看到下面的结果就是已经打包完成了。

此时在侧边就可以看到打包好的包了,但是此时我们会发现打包好的包是jar包不是war包。

为了打包出来的是war包,此时我们就需要调整pom.xml,来进行描述打包生成的包的格式。

此处我们也可以修改一下打包出来的包的文件名。

然后再重复上述的打包步骤,进行打包。

 

1.2.6部署(拷贝war到webapps目录中)

将上述打好的war包拷贝到Tomcat的webapps目录中。

 此时我们再次启动Tomcat就已经显示部署好了。

1.2.7验证(浏览器发一个GET请求)

上述虽然已经是部署好了,但是不是Tomcat一启动咱们写的doGet就可以执行。这里的DoGet只有遇到GET请求的时候才会执行该方法。

页面上的hello world展示:

服务器日志的hello world展示:

注意:这里并不是随便收到一个GET请求,就能执行到doGet,前提是请求的url的路径要匹配。

此处的路径是分两级的:

hello_servlet,称为Context Path / Application Path,标识了一个webapp,也就是这个webapp的目录名/war包名。

hello:称为Servlet Path,标识当前请求要调用哪个Servlet类的doGet。一个webapp中可以多个Servlet,自然就会有多个doGet方法了,到底是调用哪个这个与我们代码中的注释相对应。

上述的过程我们也可以使用我们之前使用的fiddler进行抓包查看。

2.3上述过程的简化

针对于上述的这七步我们是否能对其进行一个简化呢?
当然是可以的,在这里我们可以针对于第五步和第六步进行简化,可以让他一步完成。我们可以借助idea中的插件(plugin)来完成这个工作。

我们在idea中打开设置找到下面的这个插件进行安装。

表示这个插件已经下载好了。

首次使用Smart Tomcat插件的时候需要我们进行配置一下。

 

注意:上述的Context Path中,如果我们的程序是拷贝war包到webapps中运行,此时Context Path就是war包的名字。如果我们的程序使用的是Smart Tomcat运行,Context Path是在上述配置中,手动设置的,默认是项目的名字。

配置好之后我们就可以直接点击下面的小三角号来进行运行了。

运行结果展示:

此时Tomcat的日志,就在idea中显示了。

但是上述通过Smart Tomcat运行方式和之前拷贝到webapps中,是存在本质区别的。

Smart Tomcat 其实是使用了Tomcat另外的一种运行方式,在运行Tomcat的时候通过特定的参数来指定Tomcat加载某个特定目录中的webapp。因此上述过程既不会打包也不会拷贝。

2.4Servlet程序中常见的问题

  • 404:表示你浏览器访问的资源在服务器上不存在。原因:1.请求路径可能写错了。2.路径写对了,但是war包没有被正确加载。
  • 405:表示对应的http请求方法没有实现,原因:1.发的请求的方法和代码不匹配,比如代码中写的是doPost,你发的是一个GET请求。2.虽然方法和代码匹配,但是忘记去掉super.doXXX。
  • 500:意味着你的服务器代码抛出异常了,我只需要仔细观察调用栈即可。
  • 空白页面:表示服务器没有返回任何数据。

结束语:

这节中小编主要是与大家分享了有关于Tomcat的一些相关知识以及在idea中的使用和简化使用方式,在下一节博客中小编将会给大家分享一下有关于Servlet的一些相关知识,希望这节对大家学习JavaEE初阶有一定帮助,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)

 

相关文章:

Tomcat和Servlet基础知识的讲解(JavaEE初阶系列16)

目录 前言&#xff1a; 1.Tomcat 1.1Tomcat是什么 1.2下载安装 2.Servlet 2.1什么是Servlet 2.2使用Servlet来编写一个“hello world” 1.2.1创建项目&#xff08;Maven&#xff09; 1.2.2引入依赖&#xff08;Servlet&#xff09; 1.2.3创建目录&#xff08;webapp&a…...

开源在大数据和分析中的角色

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...

C#,《小白学程序》第四课:数学计算

1 文本格式 /// <summary> /// 《小白学程序》第四课&#xff1a;数学计算 /// 这节课超级简单&#xff0c;就是计算成绩的平均值&#xff08;平均分&#xff09; /// 这个是老师们经常做的一件事。 /// </summary> /// <param name"sender"></…...

SparkML机器学习

SparkML 机器学习: 让机器学会人的学习行为, 通过算法和数据来模拟或实现人类的学习行为&#xff0c;使之不断改善自身性能。 机器学习的步骤: 加载数据特征工程 数据筛选: 选取适合训练的特征列, 例如用户id就不适合, 因为它特性太显著.数据转化: 将字符串的数据转化数据类型…...

vue Promise 对象 等待所有异步处理完成 再继续处理

1 定义数据集合 用来搜集所有数据 let promises []; // 用来存储所有的 Promise 对象 2 promise对象 异步 返回数据 同时添加数据到promises 列表 // 依次读取列表元素的表 for (let symbol of symbolList) {let promise new Promise((resolve, reject) > { // 将请求…...

【业务功能篇84】微服务SpringCloud-ElasticSearch-Kibanan-电商实例应用

一、商品上架功能 ElasticSearch实现商城系统中全文检索的流程。 1.商品ES模型 商品的映射关系 PUT product {"mappings": {"properties": {"skuId": {"type": "long"},"spuId": {"type": "ke…...

图像检索,目标检测map的实现

一、图像检索指标Rank1,map 参考&#xff1a;https://blog.csdn.net/weixin_41427758/article/details/81188164?spm1001.2014.3001.5506 1.Rank1: rank-k&#xff1a;算法返回的排序列表中&#xff0c;前k位为存在检索目标则称为rank-k命中。 常用的为rank1&#xff1a;首…...

Docker容器学习:Dockerfile制作Web应用系统nginx镜像

目录 编写Dockerfile 1.文件内容需求&#xff1a; 2.编写Dockerfile&#xff1a; 3.开始构建镜像 4.现在我们运行一个容器&#xff0c;查看我们的网页是否可访问 推送镜像到私有仓库 1.把要上传的镜像打上合适的标签 2.登录harbor仓库 3.上传镜像 编写Dockerfile 1.文…...

【vue3.0 引入Element Plus步骤与使用】

全局引入Element Plus 1. 安装 Element Plus2. 引入 Element Plus3. 使用 Element Plus 组件 Element Plus 是一个基于 Vue 3.0 的 UI 组件库&#xff0c;它是 Element UI 的升级版。Element Plus 的设计理念是简单、易用、高效&#xff0c;具有良好的可定制性和扩展性。下面是…...

金融客户敏感信息的“精细化管控”新范式

目 录 01 客户信息保护三箭齐发&#xff0c;金融IT亟需把握四个原则‍ 02 制度制约阻碍信息保护的精细化管控 ‍‍‍‍‍‍‍ 03 敏感信息精细化管控范式的6个关键设计 04 分阶段实施&#xff0c;形成敏感信息管控的长效运营的机制 05 未来&#xff0c;新挑战与新机遇并存 …...

Starrocks--数据插入方式

Starrocks 数据插入方式 Starrocks是一款快速、可伸缩的分布式OLAP数据库&#xff0c;支持多种数据插入方式。下面将详细介绍几种常用的数据插入方式&#xff0c;并提供选择建议。 1. 批量加载&#xff08;Bulk Load&#xff09; 批量加载是通过将本地文件或HDFS文件导入到S…...

Java学数据结构(3)——树Tree B树 红黑树 Java标准库中的集合Set与映射Map 使用多个映射Map的案例

目录 引出B树插入insert删除remove 红黑树(red black tree)自底向上的插入自顶向下红黑树自顶向下的删除 标准库中的集合Set与映射Map关于Set接口关于Map接口TreeSet类和TreeMap类的实现使用多个映射Map&#xff1a;一个词典的案例方案一&#xff1a;使用一个Map对象方案二&…...

Vue3.0极速入门 - 环境安装新建项目

Vue介绍 Vue.js 是什么 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整…...

android 使用libyuv 图像转换

libyuv 是一个开源的图像处理库&#xff0c;它提供了一系列函数用于处理YUV格式的图像。在 JNI&#xff08;Java Native Interface&#xff09;中使用 libyuv&#xff0c;你需要先在你的 C 代码中包含 libyuv&#xff0c;然后编写 JNI 函数来调用 libyuv 的函数。 以下是一个简…...

奥比中光:进击具身智能,打造机器人之眼

大数据产业创新服务媒体 ——聚焦数据 改变商业 跨过奇点的生成式人工智能是一个缸中大脑&#xff0c;只有赋予形体&#xff0c;才能与物理世界产生互动。 在5月的ITF世界半导体大会上&#xff0c;英伟达创世人兼CEO黄仁勋说&#xff0c;人工智能的下一波浪潮将是具身智能。 8…...

微信小程序报错: SyntaxError: Cannot use import statement outside a module

微信小程序数据绑定&#xff0c;导包出现了: “SyntaxError: Cannot use import statement outside a module” 排查问题步骤记录&#xff0c;共勉 1.出现问题代码&#xff1a; import {createStoreBindings} from "mobx-miniprogram-bindings"import {store} from …...

Ruoyi微服务启动流程

1、执行sql 执行sql ry-quarty.sql ry_2023706.sql 到ry-cloud 数据库 2、下载nacos 修改配置文件 修改连接地址 启动nacos 看到下面的配置文件即为成功 修改配置文件里面的数据库连接信息 3、修改nacos 为单机启动 4、启动项目即可 nacos自取 链接: https://pan.baidu…...

Android scrollTo、scrollBy、以及scroller详解 自定义ViewPager

Scroller VelocityTracker VelocityTracker 是一个速度跟踪器&#xff0c;通过用户操作时&#xff08;通常在 View 的 onTouchEvent 方法中&#xff09;传进去一系列的 Event&#xff0c;该类就可以计算出用户手指滑动的速度&#xff0c;开发者可以方便地获取这些参数去做其他…...

Aidex 移动端快速开发框架# RuoYi-Uniapp项目,uniapp vue app项目跨域问题

参考地址&#xff1a; manifest.json官方配置文档&#xff1a;manifest.json 应用配置 | uni-app官网 Chrome 调试跨域问题解决方案之插件篇&#xff1a; uni-app H5跨域问题解决方案&#xff08;CORS、Cross-Origin&#xff09; - DCloud问答 其实uni-app官方有解决跨域的办…...

JVM7:垃圾回收是什么?从运行时数据区看垃圾回收到底回收哪块区域?垃圾回收如何去回收?垃圾回收策略,引用计数算法及循环引用问题,可达性分析算法

垃圾回收是什么&#xff1f;从运行时数据区看垃圾回收到底回收哪块区域&#xff1f; 垃圾回收如何去回收&#xff1f; 垃圾回收策略 引用计数算法及循环引用问题 可达性分析算法 垃圾回收是什么&#xff1f;从运行时数据区看垃圾回收到底回收哪块区域&#xff1f;垃圾回收如何去…...

长尾关键词助力扫描SEO效果的全新方法

长尾重要词在SEO优化中扮演着重要角色&#xff0c;帮助网站吸引特定的目标用户。这些重要词通常较长且具有明确意图&#xff0c;虽然单个搜索量不高&#xff0c;但它们在低竞争环境中发光发热。依靠聚焦这些重要词&#xff0c;企业能够提高搜索排名和流量&#xff0c;进而促进转…...

Windows网络性能测试终极指南:iperf3完整下载与安装教程

Windows网络性能测试终极指南&#xff1a;iperf3完整下载与安装教程 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds 还在为网络速度不稳定而烦恼吗&…...

CPU压力测试

工具环境&#xff1a;python3运行环境&#xff1a;SOC端内部测试用途&#xff1a;给SOC的CPU单个核以及MEM加压文件说明以及主要用法&#xff1a;""" CPU Loader """import os import sys import time import math import signal import argpars…...

企业AI编程效率提升:2026最新权威AI编程工具必看

企业AI编程效率提升&#xff1a;2026最新权威AI编程工具必看开篇“企业研发团队效率低下&#xff0c;核心项目交付周期长&#xff0c;如何通过AI编程工具缩短开发周期、提升ROI&#xff1f;”“企业部署AI编程工具&#xff0c;如何兼顾安全合规、代码质量与开发效率&#xff0c…...

华南x79-8d 支持 E5-2680 V3 或者 E5-2680 V4吗

不支持。 华南金牌 X79-8D 主板仅支持 E5-2600系列V1和V2版本的处理器&#xff0c;无法兼容您提到的 E5-2680 V3 或 V4。以下是关于该主板CPU支持情况的详细说明&#xff1a;&#x1f4a1; 为什么不支持 V3/V4&#xff1f;根本原因在于CPU的接口和主板芯片组不匹配&#xff1a;…...

如何快速配置大麦抢票自动化工具:5个步骤实现高效网络诊断与抓包分析

如何快速配置大麦抢票自动化工具&#xff1a;5个步骤实现高效网络诊断与抓包分析 【免费下载链接】ticket-purchase 大麦自动抢票&#xff0c;支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 你是否曾因大麦网抢…...

紧急预警:传统ML Ops正被Agent-native ML取代!3类组织已启动迁移,你还在手动调参?

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;AI Agent机器学习应用的范式跃迁 传统机器学习系统通常以静态模型为中心&#xff0c;依赖人工特征工程、固定训练-推理流水线与离线评估闭环。而AI Agent的兴起正推动一场根本性范式跃迁&#xff1a;从“被动预…...

5分钟快速上手gInk:Windows上最轻量级的免费屏幕画笔工具完整指南

5分钟快速上手gInk&#xff1a;Windows上最轻量级的免费屏幕画笔工具完整指南 【免费下载链接】gInk An easy to use on-screen annotation software inspired by Epic Pen. 项目地址: https://gitcode.com/gh_mirrors/gi/gInk gInk是一款专为Windows设计的屏幕画笔工具…...

【紧急预警】2025年起Steam/Epic将强制要求AI生成内容标注——游戏公司AI Agent内容溯源方案已迫在眉睫

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI Agent游戏行业应用的监管变局与战略意义 近年来&#xff0c;AI Agent在游戏开发、智能NPC行为建模、动态剧情生成及玩家个性化体验优化等领域加速落地&#xff0c;引发全球监管机构高度关注。欧盟《…...

为什么92%的OTA试水AI Agent后6个月内放弃?——头部旅行社CTO亲述3大技术断层

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;为什么92%的OTA试水AI Agent后6个月内放弃&#xff1f;——头部旅行社CTO亲述3大技术断层 在2023–2024年OTA行业AI落地调研中&#xff0c;某第三方机构追踪了137家上线AI Agent原型系统的在线旅游企业&#…...