当前位置: 首页 > news >正文

【Java EE初阶二十三】servlet的简单理解

1. 初识servlet

        Servlet 是一个比较古老的编写网站的方式,早起Java 编写网站,主要使用 Servlet 的方式,后来 Java 中产生了一个Spring(一套框架),Spring 又是针对 Servlet 进行了进一步封装,从而让我们编写网站变的更简单了;Spring 是基于 Servlet 来实现的,学了 Servlet 可以更好的理解 Spring,
(Spring 里面的某些功能,仍然要通过原生的 Servlet 的方式来触发)

        Servlet的主要工作:

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

2. 简单的Servlet程序

2.1 初识servlet小程序

        动手操作,先写一个最简单的 Servlet 的 hello world 程序;
        学习目标: 编写 Servlet 代码,最终在浏览器上,能够展示出 hello world

1、创建项目

        此处创建的是一种新的项目的形式,称为 Maven 项目,Maven 是 Java 中的一个构建工具(帮助你编译/打包代码的工具),因为以后涉及到的项目,可能会非常复杂,尤其是可能会有一系列的依赖关系。Maven 就可以解决上述问题,帮我们把依赖管理好,同时Maven 的打包功能也非常强大,且方便集成到自动化环境中;创建maven的图解如下所示:

        maven 项目在首次创建的时候,会自动的从 maven 的网站上下载一些依赖的组件,下图是maven的目录结构:

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

2、引入依赖
        接下来要写的程序,会使用 Servlet,,Servlet 这个 api 是 tomcat 提供的.,而不是 jdk 提供的.(第三方库,不是 jdk 自带的,需要手动安装引入.之前搞 mysql 的时候,类似于mysql jdbc driver),使用 maven 就可以非常方便的解决上述问题.

        1)、打开 maven 中央仓库,找到需要的 servlet 的 jar 包

        2)、借助 maven, 自动下载上述依赖!

        

        刚才 jar 包是被下载到哪里了呢?
        maven 本地仓库,maven 就会在你的机器上搞一个目录,这个目录就会保存你这边下载好的这些 jar包;如下图所示;

3、创建目录
        maven 项目是普适的,不仅仅局限于 Tomcat.而 Tomcat ,对于项目的目录结构,还有一些额外的要求;

        webapp代码如下:

<!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>

4、编写代码

        在java 目录中,创建类:

        继承是为了重写父类的方法:

        关于服务器的主要逻辑:

        代码识别分析:

5、打包程序 

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

        1)、修改 pom.xml, 设置打包的类型和包名字.

        

        java 中更通用的发布方式.任何程序都可以打成 jar.其中jar 里最要就是 .class 文件;Tomcat 专属的压缩包是.war ,这里面不光有 .class,还有一些 tomcat 要求的配置文件 (web.xml 等),以及还有前端的一些代码(html, css,js);

        2)、在右侧 maven 面板中,双击 package这个按钮.

        

        等待一段时间,如下图所示:

        

        如果看到这个字样,说明打包成功了!如果打包失败,在控制台中也会显示一些出错原因;

        1)、打包操作,依赖了一些第三方的jar 包.maven 就会自动下载.但是如果下载过程中,网络不太顺畅,就容易出错,
        2)、代码里有问题 (配置文件,pom.xml)

        最后打包成功后就会出现如下target目标:

6、部署程序 

        把 war 拷贝到 webapps 目录中即可,启动 tomcat

7、验证程序.
        通过浏览器,访问 tomcat,获取到咱们代码返回的 hello world

 2.2 对于servlet的优化

        如果我想改代码, hello world =>hello java,但是由于重复上述的七个过程太麻烦,所以要进行优化;

        我们可以借助 IDEA 的插作,把 tomcat 集成到 IDEA中,此时,就可以通过IDEA一键式的重新打包部署了;所谓插件(plugin),IDEA 这样的程序,功能已经非常强了,但是即使如此,也无法保证 IDEA 就能面面俱到。所以插件的引入主要的目的如下:

        1)希望 IDEA 功能能够多多益,2)又不希望 IDEA 过于臃肿,插件这样的机制,就能完美的解决上述问题.

        为了让 Tomcat 集成进来, 就需要安装插件-->Smart Tomcat

1、下载插件

2、使用插件

        运行结果如下所示:

        当出现如下图所示的结果是我们的tomcat启动成功了:

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

2.3 关于servlet的异常

 2.3.1 出现 404

        1)、ur 路径写错了

        

        2)、 webapp 没有正确加载
        比如,web.xml的内容不对;

        3)、路径的正确写法

2.3.2 出现 405

       1)、 方法没有被实现.(GET 请求,但是 Servlet 却没有重写 doGet);

        2)、还有一个原因,也会引起 405,就是写的代码中,没有删掉 super.doGet();

代码如下:

        3)、因为相应的格式已经不是合法的http了,就会导致解析出错;

2.3.3 出现 500

        服务器内部错误,你写的代码抛出异常了,在日志或者响应中会带有异常信息;

2.3.4 出现空白页

        

        这个时候,就需要检査, 服务器是否真的返回了带有正文的响应报文,浏览器显示的内容,就是 http 响应的正文;

2.3.5 出现无法访问此网站

        

        这个情况就需要检查 tomcat 是否是正常工作;如果 tomcat 确实正常工作了,就需要检査,ip 和 端口号是否正确

ps:本次的内容就到这里了,如果大家感兴趣的话就请一键三连哦!!!

 

        

相关文章:

【Java EE初阶二十三】servlet的简单理解

1. 初识servlet Servlet 是一个比较古老的编写网站的方式&#xff0c;早起Java 编写网站,主要使用 Servlet 的方式&#xff0c;后来 Java 中产生了一个Spring(一套框架)&#xff0c;Spring 又是针对 Servlet 进行了进一步封装,从而让我们编写网站变的更简单了&#xff1b;Sprin…...

c++ http操作接口

很简单的使用libcurl来操作http与服务器来通讯&#xff0c;包含http与https&#xff0c;对外只开放 #include "request.h" #include "response.h" #include "url.h" 三个头文件&#xff0c;简单易用&#xff0c;使用的实例如下&#xff1a; vo…...

oracle官网下载早期jdk版本

Java Downloads | Oracle JDK Builds from Oracle 以上压缩版&#xff0c;以下安装版 Java Downloads | Oracle 该链接往下拉能看到jdk8和jdk11的安装版 -- end...

Python爬虫实战:图片爬取与保存

引言&#xff1a; 在本文中&#xff0c;我们将学习如何使用Python创建一个简单的图片爬虫。 我们将利用requests库来发送HTTP请求&#xff0c;BeautifulSoup库来解析HTML页面&#xff0c;以及os和shutil库来下载和保存图片。通过这个教程&#xff0c;你将学会如何爬取网…...

CMS垃圾回收器

CMS垃圾回收 CMS GC的官方名称为“Mostly Concurrenct Mark and Sweep Garbage Collector”&#xff08;最大-并发-标记-清除-垃圾收集器&#xff09;。 作用范围&#xff1a; 老年代 算法&#xff1a; 并发标记清除算法。 启用参数&#xff1a;-XX:UseConMarkSweepGC 默认回收…...

【力扣白嫖日记】184.部门工资最高的员工

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 184.部门工资最高的员工 表&#xff1a;Employee 列名类型idintnamevarcharsalaryvarchardepartmentIdint …...

JAVA讲解算法-排序算法-选择排序算法-02

一、定义 选择排序法是一种不稳定的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;然后&#xff0c;再从剩余未排序元素中继续寻找最小&#xff08;大&#xff09;元素&a…...

【初始RabbitMQ】高级发布确认的实现

在生产环境中由于一些不明原因&#xff0c;导致 rabbitmq 重启&#xff0c;在 RabbitMQ 重启期间生产者消息投递失败&#xff0c; 导致消息丢失&#xff0c;需要手动处理和恢复。于是&#xff0c;我们开始思考&#xff0c;如何才能进行 RabbitMQ 的消息可靠投递呢&#xff1f; …...

用39块钱的全志V851se视觉开发板做了个小相机,还可以物品识别、自动追焦!

用39块钱的V851se视觉开发板做了个小相机。 可以进行物品识别、自动追焦&#xff01; 这个超低成本的小相机是在V851se上移植使用全志在线开源版本的Tina Linux与OpenCV框架开启摄像头拍照捕获视频&#xff0c;并结合NPU实现Mobilenet v2目标分类识别以及运动追踪等功能…并最终…...

主从复制实现Redis集群

主从复制实现Redis集群实验 (一主二从): 实验环境: 使用Docker 搭建 Redis 版本 5.0.5 打开一个终端窗口&#xff0c;在其中运行如下命令创建一个名为redis-master的Redis容器。注意&#xff0c;它的端口是6379 (本地的端口:映射到容器的端口) docker run -itd--name redis-m…...

高分文献解读|3D打印骨支架实现梯度密度颌骨功能性重建

近月&#xff0c;浙江大学医学院附属口腔医院谢志坚教授团队与浙江大学化学系唐睿康教授团队、机械工程学院贺永教授团队合作&#xff0c;在期刊《Advanced Functional Materials》&#xff08;IF19&#xff09;上发表题为“A Hierarchical 3D Graft Printed with Nanoink for …...

大型电商日志离线分析系统(一)

一、项目需求分析 某大型网站日志离线分析系统 1.1 概述 该部分的主要目标就是描述本次项目最终七个分析模块的页面展示。 1.2 工作流 在我们的demo展示中&#xff0c;我们使用jqueryecharts的方式调用程序后台提供的rest api接口&#xff0c;获取json数据&#xff0c;然后…...

FL Studio Fruity Edition2024中文入门版Win/Mac

FL Studio Fruity Edition2024是一款功能强大的音乐制作软件&#xff0c;适合初学者和音乐爱好者使用。它提供了丰富的音乐制作工具&#xff0c;包括音频录制、编辑、混音以及MIDI制作等功能&#xff0c;帮助用户轻松创作出动人的音乐作品。 FL Studio 21.2.3 Win-安装包下载如…...

学习vue3第二节(使用vite 创建vue3项目)

使用vite 创建vue3项目 node 安装请移步 node官网&#xff1a; https://nodejs.p2hp.com/ node 版本控制 请移步 nvm官网&#xff1a;https://nvm.uihtm.com/ vite 生成vue项目完整版 请移步 vite官网&#xff1a;https://cn.vitejs.dev/ 1、使用 npm 或者 yarn 创建vue3 项目…...

基于Siamese网络的zero-shot意图分类

原文地址&#xff1a;Zero-Shot Intent Classification with Siamese Networks 通过零样本意图分类有效定位域外意图 2021 年 9 月 24 日 意图识别是面向目标对话系统的一项重要任务。意图识别(有时也称为意图检测)是使用标签对每个用户话语进行分类的任务&#xff0c;该标签…...

Java架构师之路五、微服务:微服务架构、服务注册与发现、服务治理、服务监控、容器化等。

目录 微服务架构&#xff1a; 服务注册与发现&#xff1a; 服务治理&#xff1a; 服务监控&#xff1a; 容器化&#xff1a; 上篇&#xff1a;Java架构师之路四、分布式系统&#xff1a;分布式架构、分布式数据存储、分布式事务、分布式锁、分布式缓存、分布式消息中间件、…...

[计算机网络]--IP协议

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、IP协议…...

MySQL问题记录

问题 Ubuntu2204 通过 apt 安装 mysql-server8.0.36 后&#xff0c;数次修改密码不生效&#xff0c;仍可无密码登录。 解决 mysql_native_password 是MySQL 5.7及之前版本使用的默认身份验证插件。在MySQL 8.0及更高版本中&#xff0c;默认的身份验证插件 caching_sha2_pass…...

LeetCode_Java_动态规划系列(1)(题目+思路+代码)

目录 斐波那契类型 746.使用最小花费爬楼梯 矩阵 120. 三角形最小路径和 斐波那契类型 746.使用最小花费爬楼梯 给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶。…...

Linux使用Docker部署在线协作白板WBO并结合内网穿透发布公网远程访问

文章目录 前言1. 部署WBO白板2. 本地访问WBO白板3. Linux 安装cpolar4. 配置WBO公网访问地址5. 公网远程访问WBO白板6. 固定WBO白板公网地址 前言 WBO在线协作白板是一个自由和开源的在线协作白板&#xff0c;允许多个用户同时在一个虚拟的大型白板上画图。该白板对所有线上用…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)

错误一&#xff1a;yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因&#xff0c;后面把yaml.safe_dump直接替换成yaml.dump&#xff0c;确实能保存&#xff0c;但出现乱码&#xff1a; 放弃yaml.dump&#xff0c;又切…...

DAY 45 超大力王爱学Python

来自超大力王的友情提示&#xff1a;在用tensordoard的时候一定一定要用绝对位置&#xff0c;例如&#xff1a;tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾&#xff1a; tensorboard的发展历史和原理tens…...

UE5 音效系统

一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类&#xff0c;将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix&#xff0c;将上述三个类翻入其中&#xff0c;通过它管理每个音乐…...

HTTPS证书一年多少钱?

HTTPS证书作为保障网站数据传输安全的重要工具&#xff0c;成为众多网站运营者的必备选择。然而&#xff0c;面对市场上种类繁多的HTTPS证书&#xff0c;其一年费用究竟是多少&#xff0c;又受哪些因素影响呢&#xff1f; 首先&#xff0c;HTTPS证书通常在PinTrust这样的专业平…...

【阅读笔记】MemOS: 大语言模型内存增强生成操作系统

核心速览 研究背景 ​​研究问题​​&#xff1a;这篇文章要解决的问题是当前大型语言模型&#xff08;LLMs&#xff09;在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色&#xff0c;但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成&#xff08;RA…...