【JavaEE初阶系列】——理解tomcat 带你实现最简单的Servlet的hello world程序(七大步骤)

目录

🚩认识Tomcat

🚩运用Tomcat

🚩Servlet 

🎓完成简单的Servlet的hello world程序

🎈创建项目Maven

🎈引入依赖

🎈创建目录

🎈编写代码

🎈打包程序

🎈部署程序

🎈验证程序

🔴七大步骤的思维导图 

🎓修改代码——安装插件(smart tomcat)

🎈使用Smart Tomcat插件的步骤 


🚩认识Tomcat

tomcat是一个java写的http服务器,开发网站就需要涉及到HTTP服务器,java圈子中,最知名的HTTP服务器就是tomcat。

Tomcat是一个基于java实现的“绿色软件”,只要解压缩,就可以使用。(前提是大家需要提前安装好JDK)Apache Tomcat® - Apache Tomcat 8 Software Downloads

安装tomcat如下:


  需要配置环境变量

 需要配置环境变量


bin目录的介绍 

bin目录下放的是tomcat的一些相关可执行脚本。

启动tomcat 

. bat就是windows上的批处理程序

.sh就是linux上的shell脚本。运行这个程序,就能启动tomcat。


进入Tomcat欢迎页面 

tomCat启动成功之后,就可以通过浏览器来访问tomcat的欢迎页面了/

tomcat的日志,在控制台中,可能是乱码的。原因是Tomcat默认使用的字符集是utf8,而windows cmd的字符集是gbk.


conf目录下配置文件 

 conf中放的是tomcat的配置文件,tomcat的配置文件主要是由xml提供的


logs日志 

logs日志,调试一个服务器程序最重要的手段

 日志,调试一个服务器程序最重要的手段。

后续自己写的程序,代码中打印的日志,就可以在上述目录中,看到。


webapps目录 

 webapps里面放的就是若干个webapp

webapps里面放的就是若干个webapp(网站),webapps中,每个目录都是一个webapp(就包含了一个网站的后端代码和前端代码) 这个目录中还能看到.war压缩包文件.war包,使用tomcat发布程序的一种方法,写好一个网站,就可以打包成war包,拷贝到tomcat的webapp里,tomcat就会自动对war进行解压缩,从而完成网站的部署和加载。war包是咱们自己写的代码,生成的结果。

🚩运用Tomcat

我们上述介绍了webapps里面包含了前端和后端代码,我们在webapps文件夹中创建目录

重新启动tomcat,我们在tomcat主页面后面写上webapps里面的前端网页路径,就可以看到打印内容了。

这就是tomcat的重要作用,可以让浏览器通过网络来访问到html页面,ip地址+端口号,而上面是直接双击打开,这是浏览器打开一个本地文件。

但是当然,这样只能我的电脑访问(我的电脑上的tomcat部署的网页),别人的电脑不能 直接访问,除非我们在同一个局域网内(我现在连的是校园网,除非你也连的校园网,然后输入我的ipv4地址,就可以访问了。)

 如果不在同一个局域网中,我们就需要云服务器,它是有外网ip的,只需要把刚才的网页放到云服务器的tomcat上,大家都能访问了。具体操作以后再说。


tomcat 就像一个“底座”一样,我们所编写的网站,都要架在这个底座上,然后才能够被外面的用户顺利访问到。tomcat不仅能支持“动态网页”,也可以放一个简单的“静态网页”

tomcat支持动态网页,Tomcat提供了一组api,封装了HTTP协议,可以让程序猿更方便的来编写动态网页。也就称为Servlet。


🚩Servlet 

servlet主要做的工作:就是让程序员自己写一些类,然后把这些类加载到Tomcat中,后续Tomcat收到HTTP请求(来自于浏览器),就会执行到咱们上面写的代码,从而通过这些代码,完成一定的业务逻辑。


🎓完成简单的Servlet的hello world程序

目标:编写Servlet代码,最终在浏览器上,能够展示出hello world  ——七大步骤来完成。


🎈创建项目Maven

创建的项目称为——Maven项目

Maven项目是使用Maven构建工具管理的Java项目。Maven是一个强大的项目管理工具,可以管理项目的构建、依赖、打包、部署等各个方面。通过使用Maven,开发人员可以更方便地管理项目的结构和依赖关系,使项目的构建和部署更加自动化和规范化。Maven项目通常包含一个pom.xml文件,其中定义了项目的基本信息、依赖关系和构建配置。

Maven项目在首次创建的时候,会自动的从maven网站上下载一些依赖的组件(这个过程如果你的网络不稳定,就会出现问题,就会影响后续的maven的使用)

默认生成的情况,都是基本的属性,后续还需要修改这个文件,添加更多的内容,完成一些效果。

不仅仅是servlet可以使用maven,任何一个java程序,都可以使用maven来管理。


🎈引入依赖

Servlet这个api是tomcat提供的,而不是jdk提供的(第三方库)

可以手动下载导入,比较麻烦(工作中涉及到的项目,可能依赖的内容非常多,手动管理就非常麻烦了)使用maven就可以非常方便的解决上述问题。

1》打开maven中央仓库,找到需要的Servlet的jar包

有一群大佬,把市面上的第三方库都收集起来,搞了一个网站,都放到上面了,方便咱们程序员去下载使用

Maven Repository: Search/Browse/Explore (mvnrepository.com)

2》借助maven,自动下载上述依赖

<dependencies>这个标签里面可以包含很多依赖。只要复制进去,idea就可以自动下载。


🎈创建目录

对Tomcat来说,对于项目的目录结构,还有一些额外的要求。

Tomcat要求的结构,咱们写的代码后面会放到tomcat上,必须要遵守Tomcat的要求,否则Tomcat识别不了,也就无法执行你的代码了。

webapp——WEB-INF——web.xml

web.xml里面的内容,不能空着,但是这里咋写,也不必背诵,只需要找到一i个模板,复制粘贴过去就行了。

编写 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>

webapp 目录就是未来部署到 Tomcat 中的一个重要的目录. 当前我们可以往 webapp 中放一些静态资源, 比如 html , css 等.
在这个目录中还有一个重要的文件 web.xml. Tomcat 找到这个文件才能正确处理 webapp 中的动态资源.

🎈编写代码

继承Httpservlet父类,重写父类的方法。

写一个服务器,主要的逻辑,其实是三个步骤:

  • 读取请求并解析(HTTP请求本身是个字符串,此处就是解析HTTP请求字符串,构造成HttpServletRequest对象)Tomcat自动完成的,不需要咱们干涉。)
  • 根据请求计算响应(doGet方法要做的事情就是这个 根据请求HttpServletRequest req对象,构造生成HttpServletResponse resp对象)
  • 把响应返回给客户端(也是Tomcat自动完成的,就会把响应对象组织成HTTP格式的字符串)
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//这个打印会显示的出现在tomcat控制台上(服务端)System.out.println("hello 五一快乐");//把内容显示在页面上,把“hello world”字符串作为htpp响应的body部分//这个部分就会被浏览器显示到页面上resp.getWriter().write("hello 五一快乐");}
}

Tomcat不是收到所有的get请求都调用这个doGet方法,而是同时判断1.请求是get,2.请求url中的路径hello 

不仅仅是要看方法,还需要看请求的路径那就体现在@WebServlet("/hello")中了,路径必须是/hello。


🎈打包程序

打包程序,把咱们的写好的代码打成war包(Tomcat需要有一个war包在上面)MAVEN就可以完成打包操作。

1》修改pon.xml,设置打包的类型和包名字

 <packaging>war</packaging><build><finalName>clizyf</finalName></build>

默认情况下打的是jar包,大那是tomcat要求的是war包,所以我们要听tomcat的要求去做,怎么设置目录路径也要严格遵守tomcat来执行。tomcat就是我们的老板一样。(java中更通用的发布方式,任何程序都可以达成.jar,jar里最重要就是.class文件,Tomcat专属的压缩包,war里面不光有.class还有一些tomcat要求的配置文件(web.xml等)还有前端的一些代码(html,css,js)

2》在右侧maven面板中,双击package按钮

如果看到这个字样,就说明打包成功了,如果打包失败,在控制台会出现出错原因


🎈部署程序

将代码仓库里面的clizyf.war文件粘贴复制到webapps目录中去。也可以在此目录下直接ctrl c即可。

此时已经放入打webapps中去了。


🎈验证程序

通过浏览器,访问tomcat,获取到咱们代码返回的hello world

我们看到这样??出现乱码,意味着有多个环节,对于编码方式的理解不一致,比如,构造数据按照utf8,解析数据按照gbk,就很容易出现乱码现象。

1》构造数据

此处“你好”这两个字,是直接在idea的代码编译器中,构造的。这个编码方式就看idea的代码编译器是什么编码。

2》解析数据

浏览器如何解析的呢?浏览器默认的解析方式,是跟随系统的,windows10简体中文版,使用的字符集是GBK

把jbk改成utf8,utf8是主流。在HTTP响应报文中,显示的告诉浏览器,返回的body字符集是什么。

在http响应报文的header中,就会有Content-Type,这里面描述了body的数据格式,以及编码方式。 

此时hello 五一快乐就是servlet代码中返回的内容了。


  • clizyf 就是war包名称为上下文路径
  • hello 则是servlet路径

一个目录对应一个war包,目录就是tomcat对war包自动解压缩得到的。


🔴七大步骤的思维导图 


🎓修改代码——安装插件

如果我们想修改代码,修改之后,然后给war包删了,然后重新打包嘛,然后重新部署?那样的操作太过于复杂了

  • 修改代码
  • 重新打包
  • 重新部署

 这个过程,比较麻烦,写代码的时候,修改是非常频繁的。聪明的程序员也有办法,可以借助IDEA的插件,把tomcat集成到IDEA中,此时,就可以通过IDEA一键式的重新打包部署了。

插件就是你需要的时候就用,不需要的时候就收起来。按需使用的“功能扩展”的插件。

为了让tomcat集成起来,IDEA需要安装插件,Smart Tomcat。


🎈使用Smart Tomcat插件的步骤 

context path决定了访问servlet的时候,第一级路径怎么写

我们在没有使用smart tomcat 就直接写作war包名字(目录名字)

使用smart tomcat的时候,context path需要手动配置,不配置的话就是默认项目名字。


成功修改 


我们将五一快乐改成五一快乐呀,我们成功否? 

修改成功!


 我们要注意的是,我们在打印出来的时候,不要点那个链接。

localhost是一个域名,往往就会被解析成127.0。0.1(大部分情况下,是等价的,但是不绝对),有些场景下localhost可能用不了,但是127.0.0.1是一般都能用的。访问到咱们的程序,是通过context path+servlet path两级目录访问的。

有了smart tomcat之后,修改代码的时候,只需要重新点击运行tomcat即可。


要祝她铮铮,祝她昂扬!

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

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

相关文章

Go 语言基础(一)【基本用法】

前言 最近心情格外不舒畅&#xff0c;不仅仅是对前途的迷茫&#xff0c;这种迷茫倒是我自己的问题还好&#xff0c;关键它是我们这种普通吗喽抗衡不了的。 那就换个脑子&#xff0c;学点新东西吧&#xff0c;比如 Go&#xff1f; 1、Go 语言入门 介绍就没必要多说了&#xff0…

求矩阵对角线元素之和(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i 0;int j 0;int sum 0;int a[3][3] { 0 };//获取数组a的值&#xff1b;printf(&qu…

『大模型笔记』Code Example: Function Calling with ChatGPT

Code Example: Function Calling with ChatGPT 文章目录 一. Code Example: Function Calling with ChatGPT二. 参考文献一. Code Example: Function Calling with ChatGPT from openai import OpenAI from dotenv import load_dotenv import json# --------------------------…

标准汽车试验铁地板的技术要求

在现代科技化发展的工作中&#xff0c;试验平台被广泛使用。铸铁试验平台&#xff08;试验铁地板&#xff09;又叫试验工作平台&#xff0c;听名字大家也不难想象出来这是一款带有箱式体的台面&#xff0c;这是一种有长方形或者圆形又或者正方形的试验工作台。 铸铁试验平台&a…

调用WinPE给现有的Windows做一个备份

前言 前段时间有小伙伴问我&#xff1a;如何让给电脑备份系统。 小白直接告诉他&#xff1a;为啥要备份系统呢&#xff1f;直接给电脑创建一个还原点就好了。 Windows还原点创建教程&#xff08;点我跳转&#xff09; 没想到小伙伴的格局比小白大得多&#xff0c;他说&…

2024年第二十一届 五一杯 (C题)大学生数学建模挑战赛 | 多目标优化问题,深度学习分析 | 数学建模完整代码解析

DeepVisionary 每日深度学习前沿科技推送&顶会论文&数学建模与科技信息前沿资讯分享&#xff0c;与你一起了解前沿科技知识&#xff01; 本次DeepVisionary带来的是五一杯的详细解读&#xff1a; 完整内容可以在文章末尾全文免费领取&阅读&#xff01; 首先&…

编码方式导致的csv文件错误

写入csv文件时&#xff0c;假如出现了csv文件是乱码的情况&#xff0c;那么说明编码方式有问题&#xff0c;需要修改一下编码方式为utf-8-sig。 把编码方式修改一下为encodingutf-8-sig &#xff0c;再次运行就不会是乱码了&#xff0c;可见再读写csv文件时&#xff0c;假如使用…

【报错处理】ib_write_bw执行遇到Found Incompatibility issue with GID types.原因与解决办法

文章目录 拓扑现象根因解决办法解决后效果 拓扑 #mermaid-svg-zheSkw17IeCpjnVA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-zheSkw17IeCpjnVA .error-icon{fill:#552222;}#mermaid-svg-zheSkw17IeCpjnVA .error…

Python语言零基础入门——模块

目录 一、模块的导入与使用 1.模块的导入 2.模块的使用 二、包的使用 1.包 2.包的使用 三、常见的标准库 1.random的运用举例 2.random小游戏 &#xff08;1&#xff09;石头剪刀布 &#xff08;2&#xff09;猜大小 3.re 4.time库的使用 5.turtle库的使用 6.so…

手把手实现一个简约酷美美的版权声明模块

1. 导语 版权声明在很多网站都有用到&#xff0c;出场率还是很高的。所以今天就实现一个属于自己分风格的版权声明模块&#xff0c;技术上采用原生的前端三剑客: HTMLCSSJavaScript(可能会用到) 比如CSDN的版权声明是这样的 2. 需求分析 先看看成品吧&#xff0c;这篇文字结…

Access to image at ... from origin ... has been blocked

Access to image at ‘http://127.0.0.1:3000/api/getImg?url/uploads/file/20240421/file-1713715007811-logo.png’ from origin ‘http://ggbol.gnway.cc’ has been blocked by CORS policy: The request client is not a secure context and the resource is in more-pri…

【C++】---模板进阶

【C】---模板进阶 一、模版参数1、类型参数2、非类型参数 二、模板的特化1、函数模板的特化2、类模板特化&#xff08;1&#xff09;全特化&#xff08;2&#xff09;偏特化 三、模板分离编译1、模板支持分离编译吗&#xff1f;2、为什么模板不支持分离编译&#xff1f;3、如何…

google search API 获取

登录谷歌云启动服务 首先登录谷歌云Google Cloud: https://console.cloud.google.com/&#xff0c;登录后创建一个项目。 选择创建的项目&#xff0c;进入API库。搜索Google Search。 选择custom Search API并启用。 此外&#xff0c;有个非常具有类似的API-- Google Search …

3D建模在游戏行业的演变和影响

多年来&#xff0c;游戏行业经历了显着的转变&#xff0c;这主要是由技术进步推动的。 深刻影响现代游戏的关键创新之一是 3D 建模领域。 从像素化精灵时代到我们今天探索的错综复杂的游戏世界&#xff0c;3D 建模已成为游戏开发不可或缺的基石。 本文讨论 3D 建模在游戏行业中…

PyVista 3D数据可视化 Python 库 一行代码实现裁剪 含源码

简介&#xff1a; Pyvista是一个用于科学可视化和分析的Python库,使3D数据可视化变得更加简单和易用&#xff1b; 只增加一行代码就可以实现裁剪&#xff1b; 1.效果&#xff1a; 2.代码如下&#xff1a; 加载模型数据&#xff1a; 代码实现&#xff1a; import pyvista a…

查找算法之二分查找

一、算法介绍 二分查找&#xff0c;也称为折半查找&#xff0c;是一种在有序数组中查找特定元素的高效算法。对于包含 n 个元素的有序数组&#xff0c;二分查找的步骤如下&#xff1a; 确定搜索范围&#xff1a;首先&#xff0c;将要查找的元素与数组中间的元素进行比较。如果…

引领农业新质生产力,鸿道(Intewell®)操作系统助力农业机器人创新发展

4月27日至29日&#xff0c;2024耒耜国际会议在江苏大学召开。科东软件作为特邀嘉宾出席此次盛会&#xff0c;并为江苏大学-科东软件“农业机器人操作系统”联合实验室揭牌。 校企联合实验室揭牌 在开幕式上&#xff0c;江苏大学、科东软件、上交碳中和动力研究院、遨博智能研究…

查看笔记本电池容量/健康状态

1. 打开命令行提示符 快捷键“win R”后输入“cmd” 2. 在命令提示符中输入命令 “powercfg /batteryreport" 并回车 3. 查看文件 最后就可以看到笔记本的电池使用报告了

高效率的做事方法?

高效率的做事方法可以帮助我们更好地管理时间和资源&#xff0c;以下是一些建议&#xff1a; 1.明确目标和计划&#xff1a; 在开始任何任务之前&#xff0c;先明确你的目标是什么。 制定一个详细的计划&#xff0c;包括步骤、时间表和预期结果。 将任务分解成小块&#xff0…

第11章 数据库技术(第一部分)

一、数据库技术术语 &#xff08;一&#xff09;术语 1、数据 数据描述事物的符号描述一个对象所用的标识&#xff0c;可以文字、图形、图像、语言等等 2、信息 现实世界对事物状态变化的反馈。可感知、可存储、可加工、可再生。数据是信息的表现形式和载体&#xff0c;信…