【JavaEE初阶】Tomcat安装与使用及初识Servlet

news2024/11/17 15:33:43

文章目录

  • 1. Tomcat的安装与使用
    • 1.1 Tomcat安装
    • 1.2 Tomcat的启动
    • 1.3 Tomcat部署前端页面
  • 2. Servlet
    • 2.1 Servlet是什么
    • 2.2 第一个Servlet程序
    • 2.3 常见错误

1. Tomcat的安装与使用

1.1 Tomcat安装

在浏览器中搜索Tomcat,打开官方网页.Tomcat官网
在这里插入图片描述
点击下载Tomcat8.
在这里插入图片描述
点击下载压缩包.
在这里插入图片描述
下载好后解压缩.
解压缩后得到的目录:
在这里插入图片描述
下面对上述关键文件做部分解释:

  • bin:可执行的程序/脚本.启动Tomcat就在这里.
  • conf:配置,用xml格式表示服务器的配置,比如像修改tomcat的绑定的端口号就需要修改这里的内容.
  • lib:tomcat依赖的一些库.(暂时不考虑)
  • logs(重要):日志,tomcat运行的日志都在这里.如果程序出问题了,如何排查?就看这个日志.
  • webapps:每个webapp都是一个"网站",一个tomcat上可以部署多个网站,此处就叫做"webapps". 这里包含很多目录,每个目录都视为一个独立的网站,后面我们所学习的代码也是部署到这个webapps里的.

1.2 Tomcat的启动

Tomcat的启动:
在这里插入图片描述
启动后,我们可以看到:
在这里插入图片描述
Server startup in xxx ms即为启动成功.

1.3 Tomcat部署前端页面

新建网页标签页,输入127.0.0.1:8080进入Tomcat欢迎页面.(此时Tomcat必须处于运行状态)
在这里插入图片描述
8080是Tomcat默认的端口号.就像MySQL的默认端口号是3306一样.
接下来我们尝试在Tomcat中部署前端代码:
以我们前面学习过的博客系统代码为例:
将blog系统拷贝至webapps这个文件夹中(部署):
在这里插入图片描述
在导航栏中输入http://127.0.0.1:8080/blog/blog_list.html通过网络来访问.
第一级路径(blog),也起了个名字,叫做application path/context path
在这里插入图片描述
这个页面和之前的不同,这个是通过网络来访问的.而之前的页面则是通过文件路径来访问的.
在这里插入图片描述
通过网络访问可以跨主机访问,通过路径只可以访问自己主机上的页面.

2. Servlet

2.1 Servlet是什么

Servlet: 是一种实现动态页面的技术.是Tomcat给java提供的原生的进行web开发的api.
网页分为两类:
静态页面:页面内容始终是固定不变的.(百度主页)
在这里插入图片描述
动态页面:页面内容随着输入参数不同而改变.(百度结构页)
在这里插入图片描述

2.2 第一个Servlet程序

我们先写一个hello world程序:预期写一个Servlet程序 部署到Tomcat上,通过浏览器访问,得到hello world字符串.

一共有七个步骤:

  1. 创建项目
  2. 引入依赖
  3. 创建目录结构
  4. 编写代码
  5. 打包程序
  6. 部署程序
  7. 验证
  1. 创建项目
    此处需要创建一个maven项目.

maven是个"工程管理"工具.它可以:

  1. 规范目录结构
  2. 管理依赖
  3. 构建
  4. 打包
  5. 测试

打开idea:
在这里插入图片描述
注意:首次使用maven,项目创建好之后,会在下面读条,从中央仓库加载一些maven的依赖.时间较久.
在这里插入图片描述
注意此处的目录:
在这里插入图片描述
2. 引入依赖
打开maven中央仓库,搜索Servlet.
在这里插入图片描述
此处选择3.1.0版本.
在这里插入图片描述
拷贝maven代码至pom.xml中.
在这里插入图片描述
注意添加 标签!如果有多个依赖,都往里面拷贝即可.
在这里插入图片描述
如果长时间标红,刷新:
在这里插入图片描述
在这里插入图片描述
3. 创建目录结构
虽然maven已经帮我们自动创建了一些目录,但是还不够.此处是需要使用maven开发一个web程序,还需要别的目录.
(1) 在main目录下,创建一个webapp目录
(2)在webapp下创建一个WEB-INF目录
(3)在WEB-INF下创建一个web.xml文件
在这里插入图片描述
(4)给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>

在这里插入图片描述
我们写的Servlet程序就相当于是车厢.Tomcat相当于是车头.我们把写好的Servlet程序放到webapps 目录下,就相当于把车厢挂到车头上.Tomcat如何识别webapps目录下哪些是需要拉着跑的车厢,哪些不是. 就需要靠我们复制粘贴的代码来识别.(WEN-INF/web.xml).
相当于投名状.

  1. 编写代码
    在这里插入图片描述

(1)HttpServlet 是Servlet api里提供的现成的类.写Servlet代码一般都是继承这个HttpServlet.
(2)重写doGet方法

在这里插入图片描述
我们写的doGet方法,不需要我们手动调用,而是交给Tomcat来调用.Tomcat收到get请求,就会触发doGet方法.Tomcat会构造好两个参数,reqresp. 其中req就是TCP socket 中读出来的字符串,按照HTTP协议解析得到的对象. 其中resp是个空对象(程序猿在doGet,根据请求req,结合业务逻辑构造出resp) resp是输出型参数.
doGet:根据请求计算响应.
super.doGet();父类的这个方法只是返回一个错误页面,需要删掉.

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//注解是java中特殊的类,Java专门定义了一种"语法糖"来实现注解
//注解的作用,针对一个类/方法,进行额外的"解释说明"
//赋予了这个类.方法额外的功能/含义
//Tomcat实现的
//此处 @WebServlet("/hello") 的作用是:
//把当前的类,和一个HTTP请求的路径关联起来
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //在服务器的控制台里打印
        System.out.println("hello world");
        //将helloworld返回到客户端.
        //getWriter()会创建一个 write 对象
        //此处的 write 操作其实是往resp的body部分进行写入.
        //等resp对象整个构造好了,tomcat会统一转成 HTTP 相应的格式再写 socket
        resp.getWriter().write("hello world");
    }
}

doGet 是 Tomcat 收到Get 请求的时候就会调用,具体要不要低啊用doGet,还得看当前GET请求的路径是什么.不同的路径可以触发不同的代码.(关联到不同的类上)
一个Servlet程序中,可以有很多Servlet类,每个Servlet类都可以关联到不同的路径(对应到不同的资源).因此此处的多个Servlet就实现了不同的功能.

  1. 打包程序
    把程序编译好,得到一些.class文件,再将这些.class打成压缩包.
    jar包就是.class构成的压缩包,但是此处要打war包.jar包只是一个普通的java程序.而war包是tomcat专属的来描述webapp的程序.一个war包就是一个webapp.
    在这里插入图片描述
    双击package打包:
    在这里插入图片描述
    默认情况下maven打的是jar包,需要微调代码:
    在这里插入图片描述
    重新打包:
    在这里插入图片描述
  2. 部署程序
    把打包好的war拷贝到tomcatwebapps中即可.
    启动Tomcat.
    在这里插入图片描述
  3. 验证
    在地址栏中输入:http://127.0.0.1:8080/hello_servlet/hello
    在这里插入图片描述

小结:在浏览器中输入url之后,浏览器就构造了一个对应的HTTP GET请求,发送给tomcat. tomcat就根据第一级路径,确定了具体的webapp,根据第二级路径,确定了调用哪个类. 再然后通过GET/POSE方法确定调用HelloServlet的哪个方法(doGET,doPost)

在上述过程中,5打包,6部署程序两个过程可以使用IDEA的Tomcat插件把Tomcat 集成到IDEA中.就省去了我们手动打包的过程.手动部署的过程,只需要按一下运行,就可以自动打包部署.

基于tomcat插件自动打包部署,适用于开发阶段,频繁修改代码验证. 手动打包部署,适用于上线阶段,发布程序.

使用tomcat插件:
插件:功能的扩展.IDEA提供了一些API,可以让程序员开发插件,对IDEA现有功能进行扩展.

在这里插入图片描述
在这里插入图片描述
首次使用smart tomcat需要配置一下.
在这里插入图片描述
设置tomcat所在路径
在这里插入图片描述
在这里插入图片描述
但是我们可以看到,启动失败了.
在这里插入图片描述
8080端口被占用.可以打开cmd输入以下:可以看到
在这里插入图片描述
在这里插入图片描述

此时我们只需要关闭Tomcat即可.
在这里插入图片描述
重新启动成功.
在这里插入图片描述
在这里插入图片描述

smart tomcat工作原理:
不是自动拷贝war包(webapps中不变),是通过另一种方式来启动tomcat的.tomcat支持启动的时候显示指定一个特定的webapp目录,相当于是让tomcat 加载单个的webapp运行.
在这里插入图片描述
IDEA直接调用tomcat,让tomcat加载当前项目中的目录.

http://127.0.0.1:8080/后面跟的是context path
如果是直接拷贝war包的方式部署,context path就是war包名(目录名)
如果是smart tomcat的方式部署,此时这里是可以配置的.默认是项目名.

这两种部署,其实是两种tomcat的运行方式,对于context path的理解不同,在使用时需要特别注意.

2.3 常见错误

  1. 常见错误1: 404
    404 表示用户访问的资源不存在, 大概率是 URL 的路径写的不正确.
    在这里插入图片描述
    或者是你的webapp没有正确被部署: web.xml 写错了, 文件名错了, 文件路径错了, 文件位置错了…
  2. 常见错误2: 405
    405 表示对应的 HTTP 请求方法没有实现, 比如我们在浏览器发了个GET请求, 但是代码里没写doGet, 此时就会出现405.
    在这里插入图片描述
    还有可能就是重写的方法中没有去掉默认调用的父类方法, 如super.doGet
    在这里插入图片描述
  3. 常见错误3:500
    往往是Servlet代码中抛出异常导致的, 这个问题最好解决, 因为500的时候页面日志中会明确告诉你异常调用栈, 告诉你是哪一行代码出的异常
    比如我们给代码来一个空指针异常.
    在这里插入图片描述

在这里插入图片描述
4. 常见错误4: 出现空白页面
方法中逻辑没有写类似resp.getWriter().write()这样的代码

  1. 常见错误5: 页面无法访问
    最常见的原因就是Tomcat没有启动或者崩溃, 我们把Tomcat关了, 就会出现页面无法访问的情况, Tomcat无法启动, 很可能是端口冲突了.

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

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

相关文章

Java语言简介

个人记录学习Java的笔记&#xff0c;内容不全面不准确 Java历史 Java是一种简单易用&#xff0c;与平台无关&#xff0c;完全面向对象的编程语言。Java诞生于20世纪90年代初期&#xff0c;前身是SUN公司为智能化家电开发的Oak语言&#xff0c;它的基础是C与C语言&#xff0c;由…

什么是iPaaS?浅谈iPaaS的未来发展方向

什么是iPaaS&#xff1f; iPaaS&#xff0c;即集成平台即服务&#xff08;Integration Platform as a Service&#xff09;&#xff0c;是一种云计算服务模型&#xff0c;旨在帮助企业简化应用程序和数据的集成过程。通过iPaaS&#xff0c;企业可以在云环境中轻松地将不同的应…

给你推荐一款快速通过 typescript 生成 jsonschema 的包处理器

theme: github fast-typescript-to-jsonschema Typescript 生成 jsonschema 数据插件 性能 案例 interface AAA {a: number;b: string;c: boolean; }解析器解析耗时fast-typescript-to-jsonschema15mstypescript-json-schema5430ms 特性 编译Typescript文件以获取完整的类…

基于因果关系知识库的因果事件图谱构建、文本预处理、因果事件抽取、事件融合等

项目设计集合&#xff08;人工智能方向&#xff09;&#xff1a;助力新人快速实战掌握技能、自主完成项目设计升级&#xff0c;提升自身的硬实力&#xff08;不仅限NLP、知识图谱、计算机视觉等领域&#xff09;&#xff1a;汇总有意义的项目设计集合&#xff0c;助力新人快速实…

postgresql四种逻辑复制的状态

准备 CreateCheckpoint&#xff0c;或者bgwriter启动时&#xff0c;或者创建logicalreplicationslot时都会调用LogStandbySnapshot 记录一个XLOG_RUNNING_XACTS类型的日志。日志中记录了所有提交的事务的xid(HistoricSnapshot) 启动&#xff08;SNAPBUILD_BUILDING_SNAPSHOT&…

uniapp使用uni-swipe-action后右侧多了小于1px的间隙

问题&#xff1a;uniapp使用uni-swipe-action后右侧多了小于1px的间隙。且在真机上没有问题&#xff0c;但是在微信开发者工具中有问题。 代码如下&#xff1a;在滑动滑块或者点击这个区域时&#xff0c;就会出现问题。 <scroll-view :scroll-y"true" :style&quo…

Android 帧率分析

卡顿&#xff1a; 界面呈现是指从应用生成帧并将其显示在屏幕上的动作。如需确保用户能够流畅地与您的应用互动&#xff0c;您的应用呈现每帧的时间不应超过 16ms&#xff0c;以达到每秒 60 帧的呈现速度&#xff08;为什么是 60fps&#xff1f;&#xff09;。如果您的应用存在…

TRT4-trt-integrate - 3 使用onnxruntime进行onnx的模型推理过程

前言&#xff1a; onnx是microsoft开发的一个中间格式&#xff0c;而onnxruntime简称ort是microsoft为onnx开发的推理引擎。允许使用onnx作为输入进行直接推理得到结果。 py接口的推理过程&#xff1a; main函数&#xff1a; if __name__ "__main__":session onn…

Faiss简单使用

Faiss是Facebook AI Research开发的快速相似性搜索&#xff08;similarity search&#xff09;计算库&#xff0c;为稠密向量提供高效相似度搜索和聚类&#xff0c;支持十亿级别向量的搜索。 Faiss 的核心原理是基于向量索引和近似最近邻搜索。它通过构建索引结构来加速相似性…

android9-android13 AMS演进初窥

目录 一&#xff1a;概览 WindowManagerService 基本介绍 ActivityManagerService 基本介绍 二&#xff1a;AMS及其关联的WMS中主要组件的类图和对像图 一&#xff1a;android 9中AMS/WMS的类图和对像图 二&#xff1a;android 10中AMS/WMS的类图和对像图 三&#xff1a…

怎么给图片去底色?这几个方法一定要知道

如果你是一位设计师或者是需要制作图片的人&#xff0c;那么你一定知道去除图片底色的重要性。无论是制作海报、广告、产品图片还是网站页面&#xff0c;去除图片底色可以让你的设计更加精细、美观、专业。在本文中&#xff0c;我们将介绍三种常见的图片去底色方法&#xff0c;…

p7付费课程笔记5:串行gc以及并行gc

前言 前段时间我们学习jvm的基础结构和gc相关的基础知识&#xff0c;今天我们详细讲讲几大gc。 串行gc 串行 GC 对年轻代使用 mark-copy (标记-复制) 算法&#xff0c;对老年代使用 mark-sweep-compact (标记-清除-整理) 算法。 两者都是单线程的垃圾收集器&#xff0c;不能…

百度AI成为移动生态强者的真相

移动互联网的发展&#xff0c;让移动生态成为了互联网企业竞争的重要战场。在这场竞争中&#xff0c;百度AI凭借着其优质的技术实力和完善的生态系统&#xff0c;成为了移动生态中的强者。 那么&#xff0c;百度AI究竟靠什么成为了强者呢&#xff1f;首先&#xff0c;百度AI的技…

网络安全/黑客零基础入门(经验分享)

相关网站推荐 博主研究方向为安全领域&#xff0c;以后可能更多的在圈子内发表文章&#xff0c;提高文章质量。 1、FreeBuf 国内关注度最高的全球互联网安全媒体平台&#xff0c;爱好者们交流与分享安全技术的社区&#xff0c;网络安全行业门户。 2、看雪 看雪论坛是个软件…

GB/T 25000.51解读——软件产品的兼容性怎么测?

GB/T 25000.51-2016《软件产品质量要求和测试细则》是申请软件检测CNAS认可一定会用到的一部国家标准。在前面的文章中&#xff0c;我们为大家整体介绍了GB/T 25000.51-2016《软件产品质量要求和测试细则》国家标准的结构和所涵盖的内容以及对软件产品的八大质量特性中的功能性…

Failed to load local font resource:微信小程序加载第三方字体

加载本地字体.ttf 将ttf转换为base64格式&#xff1a;https://transfonter.org/ 步骤如下 将下载后的stylesheet.css 里的font-family属性名字改一下&#xff0c;然后引进页面里就行了&#xff0c;全局样式就放app.scss&#xff0c;单页面就引入单页面 注&#xff1a; .title…

Jmeter+MySQL链接+JDBC Connection配置元件+使用

参考大大的博客学习&#xff1a;怎么用JMeter操作MySQL数据库&#xff1f;看完秒懂&#xff01;_jmeter mysql_程序员馨馨的博客-CSDN博客 注&#xff1a;里面所有没打码的都是假数据&#xff0c;麻烦大家自行修改正确的信息。 一、背景 需要取数据库中的值&#xff0c;作为…

html2Canvas+jsPDF 下载PDF 遇到跨域的对象存储的图片无法显示

一、问题原因 对象存储的域名和你网址的域名不一样&#xff0c;此时用Canvas相关插件 将DOM元素转化为PDF&#xff0c;就会出现跨域错误。 二、解决办法 两步 1. 图片元素上设置属性 crossorigin"anonymous" 支持原生img和eleme组件 2. 存储桶设置资源跨域访问…

盘点!项目管理软件排行榜前十名

如今企业规模不断扩大&#xff0c;业务逐渐复杂化&#xff0c;项目管理已经成为现代企业管理中不可或缺的一环。作为协调管理者、团队成员和客户之间交流的工具&#xff0c;项目管理软件不仅可以提高工作效率&#xff0c;还可以提高项目成功的几率&#xff0c;对于企业具有重要…

[小尘送书-第二期]《从零开始读懂量子力学》由浅入深,解释科学原理;从手机到超导,量子无处不在;从微观到宏观,遐想人生的意义!

大家好&#xff0c;我是小尘&#xff0c;欢迎关注&#xff0c;一起交流学习&#xff01;欢迎大家在CSDN后台私信我&#xff01;一起讨论学习&#xff0c;讨论如何找到满意的工作&#xff01; 本文目录 一、前言二、作者简介三、内容简介四、抽奖方式五、名家推介写在最后 一、前…