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和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)
目录 前言: 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&a…...
开源在大数据和分析中的角色
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
C#,《小白学程序》第四课:数学计算
1 文本格式 /// <summary> /// 《小白学程序》第四课:数学计算 /// 这节课超级简单,就是计算成绩的平均值(平均分) /// 这个是老师们经常做的一件事。 /// </summary> /// <param name"sender"></…...
SparkML机器学习
SparkML 机器学习: 让机器学会人的学习行为, 通过算法和数据来模拟或实现人类的学习行为,使之不断改善自身性能。 机器学习的步骤: 加载数据特征工程 数据筛选: 选取适合训练的特征列, 例如用户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 参考:https://blog.csdn.net/weixin_41427758/article/details/81188164?spm1001.2014.3001.5506 1.Rank1: rank-k:算法返回的排序列表中,前k位为存在检索目标则称为rank-k命中。 常用的为rank1:首…...
Docker容器学习:Dockerfile制作Web应用系统nginx镜像
目录 编写Dockerfile 1.文件内容需求: 2.编写Dockerfile: 3.开始构建镜像 4.现在我们运行一个容器,查看我们的网页是否可访问 推送镜像到私有仓库 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 组件库,它是 Element UI 的升级版。Element Plus 的设计理念是简单、易用、高效,具有良好的可定制性和扩展性。下面是…...
金融客户敏感信息的“精细化管控”新范式
目 录 01 客户信息保护三箭齐发,金融IT亟需把握四个原则 02 制度制约阻碍信息保护的精细化管控 03 敏感信息精细化管控范式的6个关键设计 04 分阶段实施,形成敏感信息管控的长效运营的机制 05 未来,新挑战与新机遇并存 …...
Starrocks--数据插入方式
Starrocks 数据插入方式 Starrocks是一款快速、可伸缩的分布式OLAP数据库,支持多种数据插入方式。下面将详细介绍几种常用的数据插入方式,并提供选择建议。 1. 批量加载(Bulk Load) 批量加载是通过将本地文件或HDFS文件导入到S…...
Java学数据结构(3)——树Tree B树 红黑树 Java标准库中的集合Set与映射Map 使用多个映射Map的案例
目录 引出B树插入insert删除remove 红黑树(red black tree)自底向上的插入自顶向下红黑树自顶向下的删除 标准库中的集合Set与映射Map关于Set接口关于Map接口TreeSet类和TreeMap类的实现使用多个映射Map:一个词典的案例方案一:使用一个Map对象方案二&…...
Vue3.0极速入门 - 环境安装新建项目
Vue介绍 Vue.js 是什么 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整…...
android 使用libyuv 图像转换
libyuv 是一个开源的图像处理库,它提供了一系列函数用于处理YUV格式的图像。在 JNI(Java Native Interface)中使用 libyuv,你需要先在你的 C 代码中包含 libyuv,然后编写 JNI 函数来调用 libyuv 的函数。 以下是一个简…...
奥比中光:进击具身智能,打造机器人之眼
大数据产业创新服务媒体 ——聚焦数据 改变商业 跨过奇点的生成式人工智能是一个缸中大脑,只有赋予形体,才能与物理世界产生互动。 在5月的ITF世界半导体大会上,英伟达创世人兼CEO黄仁勋说,人工智能的下一波浪潮将是具身智能。 8…...
微信小程序报错: SyntaxError: Cannot use import statement outside a module
微信小程序数据绑定,导包出现了: “SyntaxError: Cannot use import statement outside a module” 排查问题步骤记录,共勉 1.出现问题代码: 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 是一个速度跟踪器,通过用户操作时(通常在 View 的 onTouchEvent 方法中)传进去一系列的 Event,该类就可以计算出用户手指滑动的速度,开发者可以方便地获取这些参数去做其他…...
Aidex 移动端快速开发框架# RuoYi-Uniapp项目,uniapp vue app项目跨域问题
参考地址: manifest.json官方配置文档:manifest.json 应用配置 | uni-app官网 Chrome 调试跨域问题解决方案之插件篇: uni-app H5跨域问题解决方案(CORS、Cross-Origin) - DCloud问答 其实uni-app官方有解决跨域的办…...
JVM7:垃圾回收是什么?从运行时数据区看垃圾回收到底回收哪块区域?垃圾回收如何去回收?垃圾回收策略,引用计数算法及循环引用问题,可达性分析算法
垃圾回收是什么?从运行时数据区看垃圾回收到底回收哪块区域? 垃圾回收如何去回收? 垃圾回收策略 引用计数算法及循环引用问题 可达性分析算法 垃圾回收是什么?从运行时数据区看垃圾回收到底回收哪块区域?垃圾回收如何去…...
NFT Insider #104:The Sandbox:全新土地销售活动 Turkishverse 来袭
引言:NFT Insider由NFT收藏组织WHALE Members、BeepCrypto联合出品,浓缩每周NFT新闻,为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周报将从NFT市场数据,艺术新闻类,游戏新闻类,虚拟世界类&#…...
Docker架构及原理
一、Docker的架构图 二、底层原理 Docker是怎么工作的? Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。 容器…...
VScode使用SSH连接linux
1、官网下载和安装软件 https://code.visualstudio.com/Download 2、安装插件 单击左侧扩展选项,搜索插件安装 总共需要安装的插件如下所示 3、配置连接服务器的账号 安装完后会在左侧生成了远程连接的图标,单击此图标,然后选择设置图标…...
多线程的创建与同步
目录 线程的创建 1.多线程的创建:方式一:继承于Thread类 2.多线程的创建:方式二:实现Runnable 3..线程创建方式三:实现Callable接口 线程的同步 1.同步的方式:方式一:同步代码块 2.…...
LLMs 缩放指令模型Scaling instruct models FLAN(Fine-tuned LAnguage Net,微调语言网络)
本论文介绍了FLAN(Fine-tuned LAnguage Net,微调语言网络),一种指导微调方法,并展示了其应用结果。该研究证明,通过在1836个任务上微调540B PaLM模型,同时整合Chain-of-Thought Reasoning&#…...
政务大厅人员睡岗离岗玩手机识别算法
人员睡岗离岗玩手机识别算法通过pythonyolo系列网络框架算法模型,人员睡岗离岗玩手机识别算法利用图像识别和行为分析,识别出睡岗、离岗和玩手机等不符合规定的行为,并发出告警信号以提醒相关人员。Python是一种由Guido van Rossum开发的通用…...
认识Mybatis的关联关系映射,灵活关联表对象之间的关系
目录 一、概述 ( 1 ) 介绍 ( 2 ) 关联关系映射 ( 3 ) 关联讲述 二、一对一关联映射 2.1 数据库创建 2.2 配置文件 2.3 代码生成 2.4 编写测试 三、一对多关联映射 四 、多对多关联映射 给我们带来的收获 一、概述 ( 1 ) 介绍 关联关系映射是指在数据库中&…...
如何开发一款唯一艺术平台 区块链 /数字藏品
艺术作品是人类文化的瑰宝,而艺术平台则是连接艺术家与观众的桥梁。如何开发一款独一无二的艺术平台,既要满足专业艺术作品展示的要求,又要提供深度思考的空间,这是我们所面临的挑战。本文将从专业性、思考深度和逻辑性等多个方面…...
【UniApp开发小程序】私聊功能后端实现 (买家、卖家 沟通商品信息)【后端基于若依管理系统开发】
声明 本文提炼于个人练手项目,其中的实现逻辑不一定标准,实现思路没有参考权威的文档和教程,仅为个人思考得出,因此可能存在较多本人未考虑到的情况和漏洞,因此仅供参考,如果大家觉得有问题,恳…...
运维高级学习--Kubernetes(K8s 1.28.x)部署
一、基础环境配置(所有主机操作) 主机名规划 序号 主机ip 主机名规划1 192.168.1.30 kubernetes-master.openlab.cn kubernetes-master2 192.168.1.31 kubernetes-node1.openlab.cn kubernetes-node13 192.168.1.32 kubernetes-node2…...
wordpress主题 搜索/收录网
一、去除 \ufeff encodingutf-8-sig 任何东西要存储在计算机中都要编码,视频,音频,文本,所以有时候,我们在打开一个视频的时候会遇到解码错误,不能播放,就是因为我们要将存储在计算机中的东西…...
网站的好坏/辽宁和生活app下载安装
来源:量子位 作者:羿阁 萧箫 以“天才少年”身份加入华为的稚晖君,被曝已经离职,将开启创业! 虽然本人还没公开确认这一消息,但据华为员工爆料,目前华为内部已经搜不到对应的工号。 要知道&a…...
网站后台信息发布这样做/百度爱采购关键词优化
2019独角兽企业重金招聘Python工程师标准>>> 有这样一种应用场景,在一个海量的数据集合中查看某元素是否存在,同时希望查询速度尽可能快,存储空间尽可能少,比如URL排重,比如UV统计等等。早先数据量不大的时…...
哪个网站可以做代练/百度登录入口百度
我将会持续更新用前端名词来记录鸿蒙api开启沉浸式导航/隐藏状态栏在onStart 最前面getWindow().addFlags(WindowManager.LayoutConfig.MARK_TRANSLUCENT_STATUS);//设置状态栏文字为白色window.setStatusBarVisibility(0);网络访问导入插件前端有 npm yarn 鸿蒙os使用gradlede…...
网站模版怎么修改/百家号权重查询
internet英语课件The Internet因特网 教学目标 By the end of this lesson, you will be able to 1.learn about the use of the Internet by reading 通过阅读了解因特网的用途 2.recongnize the structure of the present perfect tennse 识别现在完成时态的结构 教学重点、难…...
怎么给公司做网站/推广普通话的内容简短
原文地址:http://blog.csdn.net/asmcvc/article/details/55047842/ 概述 使用HOOK方案主要是在分析的时候会经常用到,虽然二次打包重新修改代码也可以做到,但是一方面效率低,另一方面如果APP有校验的逻辑就需要进一步绕过…...