【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 是一个比较古老的编写网站的方式,早起Java 编写网站,主要使用 Servlet 的方式,后来 Java 中产生了一个Spring(一套框架),Spring 又是针对 Servlet 进行了进一步封装,从而让我们编写网站变的更简单了;Sprin…...
c++ http操作接口
很简单的使用libcurl来操作http与服务器来通讯,包含http与https,对外只开放 #include "request.h" #include "response.h" #include "url.h" 三个头文件,简单易用,使用的实例如下: vo…...
oracle官网下载早期jdk版本
Java Downloads | Oracle JDK Builds from Oracle 以上压缩版,以下安装版 Java Downloads | Oracle 该链接往下拉能看到jdk8和jdk11的安装版 -- end...
Python爬虫实战:图片爬取与保存
引言: 在本文中,我们将学习如何使用Python创建一个简单的图片爬虫。 我们将利用requests库来发送HTTP请求,BeautifulSoup库来解析HTML页面,以及os和shutil库来下载和保存图片。通过这个教程,你将学会如何爬取网…...
CMS垃圾回收器
CMS垃圾回收 CMS GC的官方名称为“Mostly Concurrenct Mark and Sweep Garbage Collector”(最大-并发-标记-清除-垃圾收集器)。 作用范围: 老年代 算法: 并发标记清除算法。 启用参数:-XX:UseConMarkSweepGC 默认回收…...
【力扣白嫖日记】184.部门工资最高的员工
前言 练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。 今日题目: 184.部门工资最高的员工 表:Employee 列名类型idintnamevarcharsalaryvarchardepartmentIdint …...
JAVA讲解算法-排序算法-选择排序算法-02
一、定义 选择排序法是一种不稳定的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素&a…...
【初始RabbitMQ】高级发布确认的实现
在生产环境中由于一些不明原因,导致 rabbitmq 重启,在 RabbitMQ 重启期间生产者消息投递失败, 导致消息丢失,需要手动处理和恢复。于是,我们开始思考,如何才能进行 RabbitMQ 的消息可靠投递呢? …...
用39块钱的全志V851se视觉开发板做了个小相机,还可以物品识别、自动追焦!
用39块钱的V851se视觉开发板做了个小相机。 可以进行物品识别、自动追焦! 这个超低成本的小相机是在V851se上移植使用全志在线开源版本的Tina Linux与OpenCV框架开启摄像头拍照捕获视频,并结合NPU实现Mobilenet v2目标分类识别以及运动追踪等功能…并最终…...
主从复制实现Redis集群
主从复制实现Redis集群实验 (一主二从): 实验环境: 使用Docker 搭建 Redis 版本 5.0.5 打开一个终端窗口,在其中运行如下命令创建一个名为redis-master的Redis容器。注意,它的端口是6379 (本地的端口:映射到容器的端口) docker run -itd--name redis-m…...
高分文献解读|3D打印骨支架实现梯度密度颌骨功能性重建
近月,浙江大学医学院附属口腔医院谢志坚教授团队与浙江大学化学系唐睿康教授团队、机械工程学院贺永教授团队合作,在期刊《Advanced Functional Materials》(IF19)上发表题为“A Hierarchical 3D Graft Printed with Nanoink for …...
大型电商日志离线分析系统(一)
一、项目需求分析 某大型网站日志离线分析系统 1.1 概述 该部分的主要目标就是描述本次项目最终七个分析模块的页面展示。 1.2 工作流 在我们的demo展示中,我们使用jqueryecharts的方式调用程序后台提供的rest api接口,获取json数据,然后…...
FL Studio Fruity Edition2024中文入门版Win/Mac
FL Studio Fruity Edition2024是一款功能强大的音乐制作软件,适合初学者和音乐爱好者使用。它提供了丰富的音乐制作工具,包括音频录制、编辑、混音以及MIDI制作等功能,帮助用户轻松创作出动人的音乐作品。 FL Studio 21.2.3 Win-安装包下载如…...
学习vue3第二节(使用vite 创建vue3项目)
使用vite 创建vue3项目 node 安装请移步 node官网: https://nodejs.p2hp.com/ node 版本控制 请移步 nvm官网:https://nvm.uihtm.com/ vite 生成vue项目完整版 请移步 vite官网:https://cn.vitejs.dev/ 1、使用 npm 或者 yarn 创建vue3 项目…...
基于Siamese网络的zero-shot意图分类
原文地址:Zero-Shot Intent Classification with Siamese Networks 通过零样本意图分类有效定位域外意图 2021 年 9 月 24 日 意图识别是面向目标对话系统的一项重要任务。意图识别(有时也称为意图检测)是使用标签对每个用户话语进行分类的任务,该标签…...
Java架构师之路五、微服务:微服务架构、服务注册与发现、服务治理、服务监控、容器化等。
目录 微服务架构: 服务注册与发现: 服务治理: 服务监控: 容器化: 上篇:Java架构师之路四、分布式系统:分布式架构、分布式数据存储、分布式事务、分布式锁、分布式缓存、分布式消息中间件、…...
[计算机网络]--IP协议
前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、IP协议…...
MySQL问题记录
问题 Ubuntu2204 通过 apt 安装 mysql-server8.0.36 后,数次修改密码不生效,仍可无密码登录。 解决 mysql_native_password 是MySQL 5.7及之前版本使用的默认身份验证插件。在MySQL 8.0及更高版本中,默认的身份验证插件 caching_sha2_pass…...
LeetCode_Java_动态规划系列(1)(题目+思路+代码)
目录 斐波那契类型 746.使用最小花费爬楼梯 矩阵 120. 三角形最小路径和 斐波那契类型 746.使用最小花费爬楼梯 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。…...
Linux使用Docker部署在线协作白板WBO并结合内网穿透发布公网远程访问
文章目录 前言1. 部署WBO白板2. 本地访问WBO白板3. Linux 安装cpolar4. 配置WBO公网访问地址5. 公网远程访问WBO白板6. 固定WBO白板公网地址 前言 WBO在线协作白板是一个自由和开源的在线协作白板,允许多个用户同时在一个虚拟的大型白板上画图。该白板对所有线上用…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...

























