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

news2024/11/18 7:37:08

目录

🚩认识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 {
    @Override
    protected 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.coloradmin.cn/o/1637315.html

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

相关文章

关于用户体验和设计思维

介绍 要开发有效的原型并为用户提供出色的体验&#xff0c;了解用户体验 (UX) 和设计思维的原则至关重要。 用户体验是用户与产品、服务或系统交互并获得相应体验的过程。 设计思维是一种解决问题的方法&#xff0c;侧重于创新和创造。 在启动期实现用户体验和设计思维时&#…

头歌:SparkSQL简单使用

第1关&#xff1a;SparkSQL初识 任务描述 本关任务&#xff1a;编写一个sparksql基础程序。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1. 什么是SparkSQL 2. 什么是SparkSession。 什么是SparkSQL Spark SQL是用来操作结构化和半结构化数据的接口。…

Tuxera NTFS使用教程 轻松实现磁盘格式转换的教程分享 ntfsMac软件怎么用

NTFS for Mac是Mac电脑里非常重要的工具之一&#xff0c;因为它太实用了&#xff0c;解决了NTFS移动硬盘在Mac上的写入问题。但是&#xff0c;小伙伴在安装完软件之后&#xff0c;通常再也不会关注它&#xff0c;甚至时间长了&#xff0c;也就忘了Mac里还有这么一个软件。 在Tu…

GB32960解析工具

几年前搞了一个用Qt开发的国标32960报文解析工具。分享给大家&#xff0c;只用1积分便可以下载。 国标32960新能源车协议解析工具资源-CSDN文库

(附源码)超级简单的SSM图书交易系统,包含技术栈、架构图、设计图、教程

先看首页效果&#xff0c;包含买家、卖家、管理员三个端口。启动有问题可以联系我解决&#xff0c;微信&#xff1a;keepgoing4u 架构图&#xff1a; 用到软件 Jdk1.8 Mysql IntelliJ IDEA Maven 项目技术&#xff1a; Spring Boot SSM JSP mybatis Maven B/S模式 配置…

云服务器的主要用途有哪些,使用云服务器具有哪些方面的优势

随着科技的飞速发展&#xff0c;云计算已经成为现代企业和个人用户不可或缺的技术支持&#xff0c;云计算技术已经逐渐渗透到我们生活的方方面面。云服务器作为云计算的核心组成部分&#xff0c;正在逐步改变我们的数据存储和处理方式&#xff0c;成为各类互联网用户实现综合业…

前端vite+rollup前端监控初始化——封装基础fmp消耗时间的npm包并且发布npm beta版本

文章目录 ⭐前言&#x1f496;vue3系列文章 ⭐初始化npm项目&#x1f496;type为module&#x1f496;rollup.config.js ⭐封装fmp耗时计算的class&#x1f496;npm build打包class对象 ⭐发布npm的beta版本&#x1f496; npm发布beta版本 ⭐安装web-performance-tool的beta版本…

2024年第二十一届 五一杯 (B题)大学生数学建模挑战赛 | 最大流问题,深度学习分析 | 数学建模完整代码解析

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

算法效率的判断及一些典型例题的讲解

一.算法效率 1.用处&#xff1a;判断算法的好坏&#xff0c;好的算法应该是高效的 2算法效率取决于时间复杂度和空间复杂度 <1>时间复杂度 1.1概念&#xff1a;算法中基本操作的执行次数就是算法的时间复杂度 1.2表示&#xff1a;大O的渐进表示法&#xff0c;例如O(N)…

什么是场内期权,场内期权是如何操作的?

今天期权懂带你了解什么是场内期权,场内期权是如何操作的&#xff1f;场内期权是标准化、规范化且在公开市场交易的金融衍生品。相比场外期权&#xff0c;场内期权具有更高的流动性和透明度。 什么是场内期权&#xff1f; 场内期权&#xff0c;也称为交易所期权&#xff0c;是…

【C++航海王:追寻罗杰的编程之路】C++11(四)

目录 1 -> 相关文章 【C航海王&#xff1a;追寻罗杰的编程之路】C11(一) 【C航海王&#xff1a;追寻罗杰的编程之路】C11(二) 【C航海王&#xff1a;追寻罗杰的编程之路】C11(三) 2 -> lambda表达式 2.1 -> C98中的一个例子 2.2 -> lambda表达式 2.3 ->…

HCIA-题目解析1

0x00 前言 遇到这样一道题,这种题目对于我来说还是比较复杂的,所以记录一下。主要还是和熟练度有关系。 0x01 题目 路由器RouterID邻居关系如下,下列说法正确的是 A:本路由器和Router-lD为10.0.3.3的路由器不能直接交换链路状态信息 B:DR路由器的Router-lD为10.0.1.2 C:…

Flutter运行项目一直:running gradle task

大体原因就是访问国外的资源由于网络等原因导致访问失败&#xff0c;解决方法就是换成国内的源 修改项目的android/build.gradle 文件&#xff0c;将里面的 google() mavenCentral()替换为 maven {allowInsecureProtocol trueurl https://maven.aliyun.com/repository/googl…

前端 CSS

目录 选择器 复合选择器 伪类-超链接 结构伪装选择器 伪元素选择器 画盒子 字体属性 CSS三大属性 Emmet写法 背景属性 显示模式 盒子模型 盒子模型-组成 盒子模型-向外溢出 盒子模型-圆角 盒子模型-阴影 flex position定位 CSS小精灵 字体图标 垂直对齐方式…

Oracle集群-常用查询及操作(工作日常整理)

1.Oracle集群状态 select * from gv$instance; 示例结果&#xff1a; 2.Oracle集群-增大表空间 常见问题&#xff1a; 导入时或使用时&#xff0c;提示无法extend table ,增加表空间即可 常用操作&#xff1a; 1&#xff09;查询表空间 select * from dba_tablespaces; --…

Redisson分布式锁,重试锁和锁续命的原理

RedissonLock 锁重试原理 tryLock有三个三个参数&#xff0c;第一个是等待时间&#xff0c;第二个是锁失效后自动释放的时间,不填默认为-1&#xff0c;第三个是时间单位&#xff1b; 当设置了第一个参数&#xff0c;那这个锁就成了可重试锁&#xff1b;获取锁失败后&#xff0c…

【redis】Redis数据类型(三)List类型

目录 List类型介绍特点 List数据结构附&#xff1a;3.2以前的版本(介绍一下压缩列表和双向链表)压缩列表ZipList双向链表LinkedList 常用命令lpush示例 lpushx示例 rpush示例 rpushx示例 LPOP示例 RPOP示例 BLPOP非阻塞行为阻塞行为相同的 key 被多个客户端同时阻塞在 MULTI/EX…

vscode 使用code runner 运行代码输出乱码

vscode 使用code runner 运行代码输出乱码 先指出问题所在&#xff1a; 代码文件使用的编码格式和终端使用的编码格式不一致&#xff0c;查看代码文件右下角&#xff0c;会显示代码文件的编码格式。 测试代码如下&#xff1a; #include<iostream> using namespace std…

专注 APT 攻击与防御—工具介绍-the-backdoor-factory

工具介绍 the-backdoor-factory 项目地址&#xff1a;GitHub - secretsquirrel/the-backdoor-factory: Patch PE, ELF, Mach-O binaries with shellcode new version in development, available only to sponsors 原理 可执行二进制文件中有大量的 00&#xff0c;这些 00 是…

计算机毕业设计python_django宠物领养系统z6rfy

本宠物领养系统主要包括两大功能模块&#xff0c;即管理员模块、用户模块。下面将对这两个大功能进行具体功能需求分析。 &#xff08;1&#xff09;管理员&#xff1a;管理员登录后主要功能包括个人中心、用户管理、送养宠物管理、地区类型管理、失信黑名单管理、申请领养管理…