Tomcat的安装与Maven依赖Servlet的使用

news2025/2/25 17:28:13

Tomcat的安装与Maven依赖Servlet的使用

  • 🍎一.Tomcat应用
    • 🍒1.1什么是Tomcat
    • 🍒1.2Tomcat下载安装
    • 🍒1.3 IDEA插件Smart Tomcat
  • 🍎二.Maven依赖Servlet应用
    • 🍒2.1什么是Servlet
    • 🍒2.2创建Servlet简单实现一个响应
      • 🍉一.创建一个Maven文件
      • 🍉二.引入依赖
      • 🍉三创建目录
      • 🍉四.编写代码
      • 🍉五.打包/部署/运行
    • 🍒2.3 Servlet程序运行常见错误
    • 🍒2.4总结

🍎一.Tomcat应用

🍒1.1什么是Tomcat

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

🍒1.2Tomcat下载安装

下载地址
点击此处下载
在这里插入图片描述
选择其中的 zip 压缩包, 下载后解压缩即可

*解压缩的目录最好不要带 “中文” 或者 特殊符号

🍒1.3 IDEA插件Smart Tomcat

在File中点击Settings,搜索Smart Tomcat后点击下载
在这里插入图片描述
在这里插入图片描述

🍎二.Maven依赖Servlet应用

🍒2.1什么是Servlet

Servlet 是一种实现动态页面的技术. 是一组 Tomcat 提供给程序猿的 API, 帮助程序猿简单高效的开发一个 web app

回顾 动态页面 vs 静态页面

静态页面也就是内容始终固定的页面. 即使 用户不同/时间不同/输入的参数不同 , 页面内容也不会发生变化. (除非网站的开发人员修改源代码, 否则页面内容始终不变).对应的, 动态页面指的就是 用户不同/时间不同/输入的参数不同, 页面内容会发生变化

构建动态页面的技术有很多, 每种语言都有一些相关的库/框架来做这件事.Servlet 就是 Tomcat 这个 HTTP 服务器提供给 Java 的一组 API, 来完成构建动态页面这个任务

Servlet 主要做的工作
●允许程序猿注册一个类, 在 Tomcat 收到某个特定的 HTTP 请求的时候, 执行这个类中的一些代码.
●帮助程序猿解析 HTTP 请求, 把 HTTP 请求从一个字符串解析成一个 HttpRequest 对象.
●帮助程序猿构造 HTTP 响应. 程序猿只要给指定的 HttpResponse 对象填写一些属性字段, Servlet就会自动的安装 HTTP 协议的方式构造出一个 HTTP 响应字符串, 并通过 Socket 写回给客户端.

当然, Servlet 还支持一些其他的辅助功能, 此处暂时先不介绍.简而言之, Servlet 是一组 Tomcat 提供的 API, 让程序猿自己写的代码能很好的和 Tomcat 配合起来, 从而更简单的实现一个 web app.而不必关注 Socket, HTTP协议格式, 多线程并发等技术细节, 降低了 web app 的开发门槛, 提高了开发效
率.

🍒2.2创建Servlet简单实现一个响应

🍉一.创建一个Maven文件

打开IDEA点击创建项目点击Maven,点击Next,后就正常创建即可
在这里插入图片描述

🍉二.引入依赖

创建好目录后,点击pom.xml引入Servlet依赖
在这里插入图片描述
点击复制资源:Servlet资源地址
在这里插入图片描述
输入 后将复制好的资源粘贴到里面,如果出现红色错误不要急,是第一次引入资源而且是外网所以需要一段时间才能下载好
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>Servlet</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    
</project>

点击右上角Maven进行刷新
在这里插入图片描述

🍉三创建目录

如下在main创建 webapp文件----在创建WEB-INF文件—在创建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>

webapp 目录就是未来部署到 Tomcat 中的一个重要的目录. 当前我们可以往 webapp 中放一些静态资源, 比如 html , css 等.

在这个目录中还有一个重要的文件 web.xml. Tomcat 找到这个文件才能正确处理 webapp 中的动态资源

🍉四.编写代码

点击Java创建一个类
在这里插入图片描述
创建一个类 HelloServlet , 继承自 HttpServletAlt+Enter导入import javax.servlet.http.HttpServlet包
在这里插入图片描述

●在这个类上方加上 @WebServlet(“/hello”) 注解, 表示 Tomcat 收到的请求中, 路径为 /hello的请求才会调用 HelloServlet 这个类的代码. (这个路径未包含 Context Path)

●重写 doGet 方法. doGet 的参数有两个, 分别表示收到的 HTTP 请求 和要构造的 HTTP 响应. 这个方法会在 Tomcat 收到 GET 请求时触发

●HttpServletRequest 表示 HTTP 请求. Tomcat 按照 HTTP 请求的格式把 字符串 格式的请求转成了一个 HttpServletRequest 对象. 后续想获取请求中的信息(方法, url, header, body 等) 都是通过这个对象来获取.

●HttpServletResponse 表示 HTTP 响应. 代码中把响应对象构造好(构造响应的状态码, header,body 等)

●resp.getWriter() 会获取到一个流对象, 通过这个流对象就可以写入一些数据, 写入的数据会被构造成一个 HTTP 响应的 body 部分, Tomcat 会把整个响应转成字符串, 通过 socket 写回给浏览器.

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;
/**
 * Created with InteliJ IDEA.
 * /Description:
 * User:PANJIAPENG
 * Date:2022-11-09
 * Time:19:32
 */
@WebServlet("/hello")
public class ServletHello extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("hello servlet");
        resp.getWriter().write("hello Servlet");
    }
}

这个代码虽然只有寥寥几行, 但是包含的信息量是巨大的
(1) 我们的代码不是通过 main 方法作为入口了. main 方法已经被包含在 Tomcat 里, 我们写的代码会被Tomcat 在合适的时机调用起来.
此时我们写的代码并不是一个完整的程序, 而是 Tomcat 这个程序的一小部分逻辑.

(2) 我们随便写个类都能被 Tomcat 调用嘛? 满足啥样条件才能被调用呢?
主要满足三个条件:
● 创建的类需要继承自 HTTP Servlet
这个类需要使用 @WebServlet 注解关联上一个 HTTP 的路径
● 这个类需要实现 doXXX 方法

当这三个条件都满足之后, Tomcat 就可以找到这个类, 并且在合适的时机进行调用

🍉五.打包/部署/运行

打包:

war 包和 jar 包的区别
●jar 包是普通的 java 程序打包的结果,也是默认打包格式. 里面会包含一些 .class 文件.
●war 包是 java web 的程序, 里面除了会包含 .class 文件之外, 还会包含 HTML, CSS, JavaScript, 图片, 以及其他的 jar 包. 打成 war 包格式才能被 Tomcat 识别.
在这里插入图片描述
点击运行进行打包/部署
在这里插入图片描述
检验程序:

输入127.0.0.1:8080/Servlet/hello
注意:这是根据自己设置的文件路径进行查找的
在这里插入图片描述

🍒2.3 Servlet程序运行常见错误

出现 404
404 表示用户访问的资源不存在. 大概率是 URL 的路径写的不正确

●错误实例1: 少写了 Context Path
通过 /hello 访问服务器

●错误实例2: 少写了 Servlet Path
通过 /Servlet 访问服务器

●错误实例3: Servlet Path 写的和 URL 不匹配
修改 @WebServlet 注解的路径

●错误实例4: web.xml 写错了
清除 web.xml 中的内容

在这里插入图片描述

出现405
405 表示对应的 HTTP 请求方法没有实现.
错误实例: 没有实现 doGet 方法.

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
出现 500
往往是 Servlet 代码中抛出异常导致的

错误实例:

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
  throws ServletException, IOException {
    String s = null;
    resp.getWriter().write(s.length());
  }
}

在这里插入图片描述
出现 “空白页面”

错误实例:
修改代码, 去掉 resp.getWritter().write() 操作

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
     System.out.println("hello");
   }
}

出现 “无法访问此网站”

一般是 Tomcat 启动就失败了.
错误实例: Servlet Path 写错了又肯没有加"/"

在这里插入图片描述
在这里插入图片描述

🍒2.4总结

初学 Servlet, 遇到的这类问题会非常多. 我们不光要学习 Servlet 代码的基本写法, 也要学习排查错误的思路.
程序猿调试 BUG 如同医生诊病.
一个有经验的程序猿和一个新手程序猿相比, 最大的优势往往不是代码写的多好, 而是调试效率有多高. 同一个问题可能新手花了几天都无法解决的, 但是有经验的程序猿可能几分钟就搞定了.
你还觉得 “程序猿是吃青春饭” 嘛?

熟悉 HTTP 协议能够让我们调试问题事半功倍.
●4xx 的状态码表示路径不存在, 往往需要检查 URL 是否正确, 和代码中设定的 Context Path 以及Servlet Path 是否一致.
●5xx 的状态码表示服务器出现错误,或者代码写错, 往往需要观察页面提示的内容和 Tomcat 自身的日志, 观察是否存在报错.
●出现连接失败往往意味着 Tomcat 没有正确启动, 也需要观察 Tomcat 的自身日志是否有错误提示.
●空白页面这种情况则需要我们使用抓包工具来分析 HTTP 请求响应的具体交互过程.
●观察日志是调试程序的重要途径. Tomcat 的日志往往很多, 需要同学们耐心阅读, 经常阅读, 熟练了就能更快速的找到问题了.

舞台在大,你不登场,永远都是观众.平台再好,你不参加永远都是局外人.能力再大,你若不行动,没人能看到你的成功.我们一起加油屏幕前的陌生人!
在这里插入图片描述

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

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

相关文章

《Java》图书管理系统

这是一个对于Java中知识点的类&#xff0c;抽象类&#xff0c;封装&#xff0c;继承&#xff0c;多态&#xff0c;接口等进行的一个简单的代码练习&#xff0c;对于实际的图书管理系统还需要一点的优化 目录 前言 效果展示 功能模块 书架 定义书的类 创建书架 用户 User用…

黑马点评--优惠卷秒杀

黑马点评–优惠卷秒杀 全局ID生成器&#xff1a; 是一种在分布式系统下用来生成全局唯一ID的工具&#xff0c;一般要满足下列特性&#xff1a; 为了增加ID的安全性&#xff0c;我们可以不直接使用Redis自增的数值&#xff0c;而是拼接一些其它信息&#xff1a; Redis自增ID策…

CentOS7安装MySQL8

文章目录一 前言二、Centos 7 安装 mysql8 步骤&#xff1a;1.下载MySQL官方的 Yum Repository2.安装方法一&#xff1a; 用wget 下载后安装方法二&#xff1a;下载 RMP 软件包将该软件包上传到 Linux 服务器&#xff0c;并安装。3.Navicate 远程连接配置一 前言 最近在自己的…

Python 入门基础

第一个Python程序之打印 Hello World! print("Hello World!")字符串定义的三种方式&#xff0c;type 用了检测数据类型 # 单引号定义法&#xff0c;使用单引号进行包围 name 测试 print(type(name)) # 双引号定义法 name "测试" print(type(name)) # 三…

vue3+ts组件练习(defineExpose defineEmits defineProps)

学习关键语句&#xff1a; vue3ts 组件写法 写在前面 进化到 vue3 ts 的时代&#xff0c;vue的不少语法发生了改变&#xff0c;尤其是选项式 API 变为了组合式 API 和 typescript 的使用使得从 vue2 过来的人需要尽快熟悉新的写法&#xff0c;毕竟大差不差嘛 文章最后有本文…

图像分割 - 阈值处理 - 全局阈值处理

目录 1. 介绍 2. 代码实现 3. 代码讲解 1. 介绍 当目标和背景像素的灰度分布非常不同的时候&#xff0c;可以对整个图像使用全局阈值 在大多数的应用中&#xff0c;图像之间通常存在足够的变化&#xff0c;全局阈值是一种合适的办法。所以&#xff0c;需要一种对图像做阈值…

生存分析的图你也要拼接 图形拼接r 不同的图形组合在一起

生存分析的图你也要拼接吗 因为都是ggplot体系的图表,很容易拼接,但是里面的生存分析是一个麻烦事情。因为它本身主要是survminer包出图,而这个survminer包出图并不是很稳定,但是学员自己解决了这个问题。 可以先用survminer包的arrange_ggsurvplots函数对多个生存分析图表…

CUDA By Example(五)——常量内存与事件

本章将介绍如何使用GPU上特殊的内存区域来加速应用程序的执行&#xff0c;以及如何通过事件来测量CUDA应用程序的性能。通过这些测量方法&#xff0c;你可以定量的分析对应用程序的某个修改是否会带来性能提升 文章目录常量内存光纤跟踪简介在GPU上实现光线跟踪通过常量内存来实…

[附源码]java毕业设计家庭医生系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Java代码审计——WebGoat XML外部实体注入(XXE)

目录 前言&#xff1a; 0x01 Let’s try 0x02 代码分析 2.1 安全的代码 0x03 Modern REST framework 3.1 解题&#xff1a; 3.2 改为xml格式: 3.3 源码分析&#xff1a; 3.4 参考解决方案 0x04 Blind XXE assignment 0x05XXE DOS attack 参考文章&#xff1a; 前言…

“百花齐放、百家争鸣”,数据可视化呈现我国科学文化的发展

公共财政对文化建设的支持日益加强&#xff0c;公共文化设施不断完善&#xff0c;覆盖城乡的公共文化服务网络初步建立&#xff0c;公共文化服务理念逐步深化&#xff0c;公共文化服务能力和均等化水平逐渐提高&#xff1b;文化产业投资向发展水平较低的中西部地区倾斜&#xf…

node.js+Express框架,前端自己创建接口

目录 一、安装 1、安装node.js 2、安装Express框架 3、安装nodemon 二、写接口 三、连接数据库 1、安装&#xff1a; 2、连接数据库 3、执行 四、注意事项 1、跨域 这篇文章看完如果您觉得有所收获&#xff0c;认为还行的话&#xff0c;就点个赞收藏一下呗 一、安装…

多线程详细介绍

一、分类 创建线程的四种方法&#xff1a; &#xff08;1&#xff09;继承Thread &#xff08;2&#xff09;实现Runnable &#xff08;3&#xff09;实现Callable &#xff08;4&#xff09;线程池创建一个新的线程可以通过继承Thread类或者实现Runnable接口来实现&#xff0…

JAVA基础—面向对象

1、面向对象介绍 2、类和对象 2.1、如何定义类、得到类的对象、使用对象 2.2、类和对象的总结 2.3、定义类的补充事项—测试类与Javabean类 成员变量一般无需指定初始值&#xff0c;存在默认值。 但是局部变量必须定义初始值。 2.4、定义类的注意事项 2.4.1、驼峰模式 单词…

容器docker安装,以及paddle容器环境安装

例如 一台新的 服务器部署环境 1.环境服务器部署 第一步:查看显卡的驱动是否装好了,可以用nvidia-smi,正常显示表示已经安装 上面版本没有问题,但是下面版本驱动本本比较低,不支持11.2cuda安装,要更新驱动 docker, nvidia-docker 安装之前先确认如下三个 paddle 2.3 …

Win11 KB5019157(22000.1281)11月累积补丁推送了!

微软在最新推出的KB5019157更新补丁中修复了Microsoft Store更新等多个错误&#xff0c;但是仍然存在Direct Access问题。Win11用户安装之后即可升级至22000.1281&#xff0c;下面就来看看详细内容。 重要信息 KB5019157累积更新补丁 它解决了 Microsoft Store 的一些持续更新失…

shell中通配符的使用

shell中的通配符与正则表达式是不同的两种功能。 正则表达式一般不会在bash直接应用&#xff0c;需要使用sed、grep、awk来解释正则表达式。 通配符则可以通过bash直接解释&#xff0c;一般用作名称展开。 bash中可以使用的通配符符号包括&#xff1a;*、?、{}、[]、^ 这些…

【环境配置笔记】基于clang15搭建liunx内核代码阅读环境

环境&#xff1a; Toolchain&#xff08;yocto导出&#xff09;Linux5-15&#xff0c;arm64VS codeclangd15.0.3 1. VScode配置 在VS code / VS code server中配置以下插件&#xff1a; ClangdC/CC/C Extension PackC/C SnippetsCode RunnerCode Spell CheckercompareitDev…

拖拽页面元素+flip动画的案例

先上效果&#xff1a; 实现思路和流程&#xff1a; 基础页面布局 给每个拖动元素加上 draggable"true"ondragstart(开始拖动某个元素时)做出 对应的处理 获得操作的具体元素 给目标元素添加对应的样式 显示透明 增加虚线描边ondragover 被拖动的元素hover到目标元素…

java计算机毕业设计ssm养老管理系统-敬老院系统

项目介绍 1.登录页面要有验证码 2.在健康信息模块中有三个小模块分别是饮食信息、身体信息、医疗常识,饮食信息就是护工每天负责老人的饮食搭配包括;早中晚餐;各种菜谱、图片、注意事项等,身体信息就是老人的各项身体指标,医疗常识就是每一种病对应一种病例还有每天推送更新的关…