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

Java课题笔记~ Servlet编程

1.Servlet编程基础

(1)什么是Servlet

Servlet是基于Java语言的Web编程技术,部署在服务器端的Web容器里,获取客户端的访问请求,并根据请求生成响应信息返回给客户端。

创建Servlet的方式,有

如下图:一般创建Servlet都是通过继承HttpServlet来实现,如图中的HelloServlet。

(类图快捷键:Ctrl + Alt + U)

 1.创建一个基于Maven的web项目。

2.创建java和resources文件夹

3.修改web.xml的版本

 

4.导入servlet的依赖

<!--servlet的依赖-->
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version>
</dependency>

 

(2)Servlet的生命周期

init():当服务器启动,第一次访问Servlet的时候,servlet进行初始化

service():在服务器启动期间,可以不断的处理请求。

destroy():在服务器停止的时候,去销毁Servlet.

(3)Servlet的主要功能

(1)读取客户端发送到服务器端的显式数据(表单数据)

(2)读取客户端发送到服务器端的隐式数据(请求报头)

(3)服务器端发送显式数据到客户端(HTML)

(4)服务器端发送隐式数据到客户端(状态代码和响应报头)

 

2.编写Servlet类

1.通过Servlet生成静态网页

package com.ambow.test;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;
import java.io.PrintWriter;/***  作用:通过Servlet,动态生成HTML网页* @author foxbill* @date 2021/11/2 10:58*/
@WebServlet(name = "FirstServlet")
public class FirstServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setCharacterEncoding("UTF-8");//设置响应的字符集格式为UTF-8response.setContentType("text/html");//设置响应正文的MIME类型PrintWriter out = response.getWriter();//返回一个PrintWriter对象,Servlet使用它来输出字符串形式的正文数据out.println("<!doctype html>");out.println("<html>");out.println("<head><title>动态生成的HTML文档</title></head>");out.println("<body>");out.println("<table border='0' align='center'>");out.println("<tr><td bgcolor='skyblue' colspan=2>动态生成HTML文档</td></tr>");out.println("</table>");out.println("</body>");out.println("</html>");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}
}

web.xml的相关代码:

<servlet><servlet-name>FirstServlet</servlet-name><servlet-class>com.ambow.test.FirstServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>FirstServlet</servlet-name><url-pattern>/first</url-pattern>
</servlet-mapping>

 

2.通过Servlet生成动态网页

package com.ambow.test;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;
import java.io.PrintWriter;
import java.time.LocalTime;/*** @author foxbill* @date 2023/8/9 16:35*/
@WebServlet(name = "TestServlet")
public class TestServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//请求处理代码(功能:写一个动态网页)response.setCharacterEncoding("UTF-8");response.setContentType("text/html");PrintWriter out = response.getWriter();LocalTime now = LocalTime.now();int hour = now.getHour();out.println("<!doctype html>");out.println("<html>");out.println("<head>");out.println("</head>");out.println("<body>");if (hour>0 && hour < 6){out.println("晚安!");}if (hour>=6 && hour <= 12){out.println("早安!");}if (hour>12){out.println("午安!");}out.println("</body>");out.println("</html>");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}
}

web.xml的相关代码:

<servlet><servlet-name>TestServlet</servlet-name><servlet-class>com.ambow.test.TestServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>TestServlet</servlet-name><url-pattern>/test</url-pattern>
</servlet-mapping>

 

3.编写web.xml配置文件

(一)配置虚拟路径

1.Servlet的多重映射

方式一:

<servlet><servlet-name>FirstServlet</servlet-name><servlet-class>com.ambow.test.FirstServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>FirstServlet</servlet-name><url-pattern>/first01</url-pattern>
</servlet-mapping>
<servlet-mapping><servlet-name>FirstServlet</servlet-name><url-pattern>/first02</url-pattern>
</servlet-mapping>

方式二:

<servlet><servlet-name>FirstServlet</servlet-name><servlet-class>com.ambow.test.FirstServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>FirstServlet</servlet-name><url-pattern>/first01</url-pattern><url-pattern>/first02</url-pattern>
</servlet-mapping>

2.映射路径中使用通配符,格式有两种 :

*.do:优先级最低

/*

<url-pattern>*.do</url-pattern><url-pattern>/*</url-pattern><url-pattern>/test/*</url-pattern>

3.缺省Servlet : /

缺省servlet其实就是servlet-mapping元素中url为/的servlet,在tomcat安装目录中:conf下的web.xml中有这样一个代码:

<servlet><servlet-name>default</servlet-name><servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class><init-param><param-name>debug</param-name><param-value>0</param-value></init-param><init-param><param-name>listings</param-name><param-value>false</param-value></init-param><load-on-startup>1</load-on-startup>
</servlet><servlet-mapping><servlet-name>default</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>

缺省Servlet的作用就是处理servlet-mapping中url都匹配不到的请求。

在web访问任何资源都是在访问Servlet,当访问tomcat服务中的某个静态html文件和图片时,实际上是在访问这个缺省的servlet。

如果在web应用下的web.xml没有1.html对应的url-pattern,也就是没有相对应的servlet,服务器则会运行缺省servlet,由该servlet对应的org.apache.catalina.servlets.DefaultServlet类将1.html静态页面的数据读取出来显示到页面上。

把上述中的代码注释掉,重启tomcat服务器,输入http://localhost:8080 ,将发现页面中的图片将显示不出,也即是因为这个原因。

相关文章:

Java课题笔记~ Servlet编程

1.Servlet编程基础 (1)什么是Servlet Servlet是基于Java语言的Web编程技术&#xff0c;部署在服务器端的Web容器里&#xff0c;获取客户端的访问请求&#xff0c;并根据请求生成响应信息返回给客户端。 创建Servlet的方式&#xff0c;有 如下图&#xff1a;一般创建Servlet都…...

修改IDEA的idea.vmoptions参数导致IDEA无法打开(ReservedCodeCacheSize)

事发原因 Maven导依赖的时候OOM&#xff0c;因此怀疑是内存太小&#xff0c;尝试修改idea.vmoptions的参数&#xff0c;然后发现IDEA重启后打不开了&#xff0c;卸载重装后也无法打开。。。 实际上如果导包爆出OOM的话应该调整下图参数&#xff0c;不过这都是后话了 解决思路…...

P1321 单词覆盖还原

题目描述 一个长度为 l l l 的字符串中被反复贴有 boy 和 girl 两单词&#xff0c;后贴上的可能覆盖已贴上的单词&#xff08;没有被覆盖的用句点表示&#xff09;&#xff0c;最终每个单词至少有一个字符没有被覆盖。问贴有几个 boy 几个 girl&#xff1f; 输入格式 一行被…...

GODOT游戏引擎简介,包含与unity性能对比测试,以及选型建议

GODOT&#xff0c;是一个免费开源的3D引擎。本文以unity作对比&#xff0c;简述两者区别和选型建议。由于是很久以前写的ppt&#xff0c;技术原因视频和部分章节丢失了。建议当做业务参考。 GODOT目前为止遇到3个比较重大的基于&#xff0c;第一个是oprea的合作奖&#xff0c;…...

Add-in Express for Microsoft Office and Delphi Crack

Add-in Express for Microsoft Office and Delphi Crack 适用于Microsoft Office和Delphi VCL的Add-in Express使您能够在几次点击中为Microsoft Office开发专业插件。它生成基于COM的项目&#xff0c;这些项目包含Microsoft Office外接程序或智能标记的所有必要功能&#xff0…...

opencv基础-34 图像平滑处理-2D 卷积 cv2.filter2D()

2D卷积是一种图像处理和计算机视觉中常用的操作&#xff0c;用于在图像上应用滤波器或卷积核&#xff0c;从而对图像进行特征提取、平滑处理或边缘检测等操作。 在2D卷积中&#xff0c;图像和卷积核都是二维的矩阵或数组。卷积操作将卷积核在图像上滑动&#xff0c;对每个局部区…...

webSocket 与传统的 http 有什么优势

webSocket 与传统的 http 有什么优势 当页面中需要观察实时数据的变化&#xff08;比如聊天、k 线图&#xff09;时&#xff0c;过去我们往往使用两种方式完成 第一种是短轮询&#xff0c;即客户端每隔一段时间就向服务器发送消息&#xff0c;询问有没有新的数据 第二种是长轮询…...

如何测试Linux磁盘的读写速度

在Linux系统中也有很多命令可以测试硬盘的读写速度指标。以下是几个常用命令&#xff08;注意&#xff1a;在执行测试命令之前&#xff0c;请务必备份数据以避免数据丢失&#xff01; 1、dd 命令 首先挂载磁盘 mount /dev/sdb /testdd 命令可用于进行硬盘读写速度测试。 例…...

Spring Data Redis:在Java中操作Redis

目录 一、Spring Data Redis使用方式 1.1 介绍 1.2 配置 1.3 RedisTemplate 二、环境搭建 2.1 导入Spring Data Redis的maven坐标 2.2 配置Redis数据源 2.3 编写配置类&#xff0c;创建RedisTemplate对象 三、操作常见类型数据 3.1 操作字符串类型数据 …...

Android 面试重点之Framework (Handler篇)

近期在网上看到不少Android 开发分享的面试经验&#xff0c;我发现基本每个面经中多多少少都有Framework 底层原理的影子。它也是Android 开发中最重要的一个部分&#xff0c;面试官一般会通过 Framework底层中的一些逻辑原理由浅入深进行提问&#xff0c;来评估应聘者的真实水…...

基于Node.js的后台管理系统的数据表格导出下载

基于Node.js的后台管理系统的数据表格导出下载 今天在工作的时候接触到一个需求&#xff0c;就是现在有一个简单的后台管理系统是基于node.js来实现的&#xff0c;现在需要将其中的一个表格数据下载下来。乍一听还以为这个是一个简单的需求&#xff0c;以为只要简单的一个小时…...

渗透攻击方法:原型链污染

目录 一、什么是原型链 1、原型对象 2、prototype属性 3、原型链 1、显示原型 2、隐式原型 3、原型链 4、constructor属性 二、原型链污染重现 实例 Nodejs沙箱逃逸 1、什么是沙箱&#xff08;sandbox&#xff09; 2、vm模块 一、什么是原型链 1、原型对象 JavaS…...

第四章 kernel函数基础篇

cuda教程目录 第一章 指针篇 第二章 CUDA原理篇 第三章 CUDA编译器环境配置篇 第四章 kernel函数基础篇 第五章 kernel索引(index)篇 第六章 kenel矩阵计算实战篇 第七章 kenel实战强化篇 第八章 CUDA内存应用与性能优化篇 第九章 CUDA原子(atomic)实战篇 第十章 CUDA流(strea…...

JVM:运行时数据区域(白话文)

最近有时间在看一本<深入了解Java虚拟机>的书籍&#xff0c;这本书是一个中国人&#xff0c;名叫周志明的人写的。相比于其他翻译过来的技术书籍&#xff0c;这本书还是挺通俗易懂的。先前有和彬哥在聊&#xff0c;他说如果是自己一个人看的话会很枯燥&#xff0c;很难坚…...

Go语言并发编程(千锋教育)

Go语言并发编程&#xff08;千锋教育&#xff09; 视频地址&#xff1a;https://www.bilibili.com/video/BV1t541147Bc?p14 作者B站&#xff1a;https://space.bilibili.com/353694001 源代码&#xff1a;https://github.com/rubyhan1314/go_goroutine 1、基本概念 1.1、…...

CSS革命:用Sass/SCSS引领前端创新

目录 前言SCSSSassSass 和 SCSS 的区别 前言 在现代的前端开发中&#xff0c;CSS已成为呈现网页和应用程序样式的核心。然而&#xff0c;原生的CSS语法在大型项目中可能变得混乱、冗长且难以维护。 为了解决这些问题&#xff0c;SCSS&#xff08;Sass CSS&#xff09;和Sass&am…...

MAPPO 算法的深度解析与应用和实现

【论文研读】 The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games 说明&#xff1a; 来源&#xff1a;36th Conference on Neural Information Processing Systems (NeurIPS 2022) Track on Datasets and Benchmarks. 是NIPS文章&#xff0c;质量有保障&…...

API接口的涉及思路以及部分代码

在现代软件开发中&#xff0c;API&#xff08;Application Programming Interface&#xff09;接口扮演了一个至关重要的角色。通过API接口&#xff0c;不同的应用程序、系统或服务之间可以进行数据交换和相互调用&#xff0c;实现功能的扩展和集成。本文将探讨API接口的设计思…...

Stable Diffusion无需代码连接QQ邮箱的方法

Stable Diffusion用户使用场景&#xff1a; 电商商家在产品测试阶段&#xff0c;通过微信社群日常收集用户对产品设计的反馈&#xff0c;包括对产品的修改建议或外观设计等&#xff0c;并将这些反馈上传至集简云小程序。然后&#xff0c;他们使用Stable Diffusion AI工具生成图…...

Excel表格(一)

1.单一栏的宽度和高度设置 2.大标题的跨栏居中 3.让单元格内的文字------自动适应 4.序号递增 5.货币符号 6.日期格式的选择 选到单元格&#xff0c;选中对应的日期格式 7.自动求和的计算 然后在按住回车键即可求出当前行的金额 点击自动求和 8.冻结表格栏 9.排序 1.单栏排序 …...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...