初探Servlet

文章目录

  • 1. Servlet概述
    • 1.1 定义
    • 1.2 作用
  • 2. 主要知识点
    • 2.1 生命周期
    • 2.2 请求处理
    • 2.3 Servlet配置
  • 3. 案例演示
    • 3.1 创建Web应用项目
    • 3.2 修改项目工件名
    • 3.3 重新部署Web项目
    • 3.4 创建WelcomeServlet
    • 3.5 编写`doGet`方法代码
    • 3.6 编写`doPost`方法代码
    • 3.7 访问WelcomeServlet
  • 4. 小结

在这里插入图片描述
大家好,今天我们将一起探索Java Servlet的奥秘。Servlet是Java EE中非常重要的一个组件,它是运行在服务器端的小程序,专门用来处理客户端的请求,并生成动态的响应内容。接下来,我们将通过一系列的步骤,从Servlet的基础知识到实际的案例演示,深入了解Servlet的工作原理和应用。

1. Servlet概述

1.1 定义

首先,我们来定义一下什么是Servlet。Servlet是服务器端的Java小程序,它遵循特定的规范,可以接收客户端的请求,进行处理,然后生成响应。

1.2 作用

Servlet的作用非常广泛,它可以用于实现动态网页的生成、处理用户的请求、与数据库进行交互等。在企业级Web应用中,Servlet是不可或缺的基础组件之一。

2. 主要知识点

2.1 生命周期

Servlet的生命周期包括四个阶段:加载和实例化、初始化、服务和销毁。

  • 加载和实例化:当客户端第一次访问Servlet时,服务器会加载Servlet类并创建一个实例。
  • 初始化:通过调用init()方法,进行Servlet的初始化工作。
  • 服务:Servlet通过service()方法来处理客户端的请求。service()方法会根据请求的类型,调用doGet()doPost()方法。
  • 销毁:当Servlet不再被使用时,服务器会调用destroy()方法,进行资源的释放。

2.2 请求处理

Servlet处理请求的类型主要包括GET和POST。通过HttpServletRequest对象获取请求参数,通过HttpServletResponse对象生成响应。

2.3 Servlet配置

Servlet可以通过两种方式进行配置:传统的web.xml配置和注解配置。

3. 案例演示

3.1 创建Web应用项目

我们将从创建一个Jakarta EE项目开始,命名为ServletDemo。

  1. 在IDE中创建一个新的Jakarta EE项目。
  2. 单击【Next】按钮,配置项目的相关设置。
  3. 单击【Create】按钮,完成项目的创建。
  4. 删除不必要的HelloServlet文件。

3.2 修改项目工件名

将项目的工件名从ServletDemo:war exploded改成ServletDemo,以便于部署。

3.3 重新部署Web项目

  1. 先移除项目,然后进行修复。
  2. 切换到【Server】选项卡,查看项目的URL。
  3. 启动服务器,查看项目的首页。

3.4 创建WelcomeServlet

  1. net.huawei.servletdemo包里创建WelcomeServlet类。
  2. 通过添加@WebServlet注解,设置访问的URL。
  3. 继承HttpServlet类,并提供处理HTTP请求的方法,包括doGetdoPost
package net.huawei.servletdemo;import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;/*** 功能:欢迎处理程序* 作者:华卫* 日期:2024年10月28日*/
@WebServlet(urlPatterns = "/welcome")
public class WelcomeServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {        }@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {       }
}

3.5 编写doGet方法代码

doGet方法中,我们将设置响应对象的字符编码,创建日期对象,并格式化输出到客户端。

@Override                                                                                 
protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {                                            // 设置响应对象字符编码                                                                         response.setCharacterEncoding("UTF-8");                                               // 创建日期对象                                                                             Date currentDate = new Date();                                                        // 创建简单日期格式对象                                                                         SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");                  // 获取打印字符输出流                                                                          PrintWriter out = response.getWriter();                                               // 向客户端输出页面                                                                           out.print("<html>");                                                                  out.print("<head>");                                                              out.print("<title>欢迎</title>");                                               out.print("</head>");                                                             out.print("<body style='text-align: center'>");                                   out.print("<h1 style='color: red'>欢迎访问泸州职业技术学院</h1>");                        out.print("<h3 style='color: blue'>" + sdf.format(currentDate) + "</h3>");    out.print("</body>");                                                             out.print("</html>");                                                                 
}                                                                                         

3.6 编写doPost方法代码

doPost方法中,我们可以直接调用doGet方法来处理POST请求。

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);
}

3.7 访问WelcomeServlet

  1. 重启服务器,访问http://localhost:8080/welcome
    在这里插入图片描述

  2. 如果遇到乱码问题,可以通过修改浏览器的字符编码为UTF-8来解决。
    在这里插入图片描述

  3. 刷新页面,观察时间的变化。
    在这里插入图片描述

4. 小结

通过今天的实战,相信大家对Servlet有了更深入的了解。Servlet不仅在理论上重要,在实际的Web开发中也是极其实用的技术。希望大家能够在实际的项目中灵活运用Servlet,构建出功能强大的Web应用。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【modbus协议】Modbus-TCP消息帧格式

文章目录 协议描述Modbus Application Header 结构示例与其他部分的关系作用总结 协议描述 在ModbusTCP/IP协议中,串行链路中的主/从设备分别演变为客户端/服务器端设备。即客户端相当于主站设备,服务器端相当于从站设备。基于TCP/IP网络的传输特性。Modbus协议在TCP/IP上的实…

VsCode | 修改内置字体为JetBrains Mono NL

文章目录 一、下载JetBrains Mono NL字体二、VsCode进行字体的设置 一、下载JetBrains Mono NL字体 字体下载 下载完成以后解压找到JetBrainsMono-2.304\fonts\ttf文件夹下&#xff0c;全选鼠标右键点安装即可。 注意&#xff1a;一定要全部安装&#xff0c;否则字体样式可…

QT仿QQ聊天项目,第二节,美化登录界面

一&#xff0c;控件起名和设置整体样式 目录 一&#xff0c;控件起名和设置整体样式 二&#xff0c;设置局部控件样式 三&#xff0c;设置gif动态背景 四&#xff0c;设置账号密码框样式 五&#xff0c;头像图片设置 给控件起的名字&#xff1a; 关闭按钮: btn_close 缩小…

轻松部署自己的AI聊天助手LocalGPT并实现无公网IP远程交互

文章目录 前言环境准备1. localGPT部署2. 启动和使用3. 安装cpolar 内网穿透4. 创建公网地址5. 公网地址访问6. 固定公网地址 前言 本文主要介绍如何本地部署LocalGPT并实现远程访问&#xff0c;由于localGPT只能通过本地局域网IP地址端口号的形式访问&#xff0c;实现远程访问…

N-154基于springboot酒店预订管理系统

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 前端技术&#xff1a;AdminLTEBootstrapLayUIHTMLjQuery 服务端技术&#xff1a;springbootmybatis-plusthymeleaf 本项目分前台和后台…

Banana Pi BPI-R3路由器开发板运行 OrayOS物联网系统

近日&#xff0c;Banana PI开发板宣布与贝锐达成战略合作&#xff0c;贝锐OrayOS现已成功适配Banana PI的BPI-R3型号&#xff0c;并计划进一步扩展硬件支持&#xff0c;包括目前Banana PI热销的BPI-R4、BPI-R3 Mini等更多型号。这一合作为用户提供了更广泛的开发板选择&#xf…

范式转移:从协程、回调到异步

本文使用 CC BY-NC-ND 4.0 许可。 原文&#xff1a;英文版 | 中文版 协程、回调和异步每一个单独拎出来讲都不难&#xff0c;但它们之间的关系却非常烧脑&#xff0c;迄今为止我还没见过哪篇文章能讲清楚的&#xff0c;所以在这里我尝试用最简单的思路讲解清楚&#xff1a;如…

Pytorch学习--神经网络--非线性激活

一、用法 torch.nn.ReLU 图像处理中的应用&#xff1a;在图像处理任务中&#xff0c;ReLU 激活函数能够增强特征提取的能力&#xff0c;使网络更好地捕捉图像的细节和边缘。这是因为 ReLU 对大部分负数响应为零&#xff0c;能在一定程度上减少网络计算量&#xff0c;并对特征…

Objective-C 音频爬虫:实时接收数据的 didReceiveData_ 方法

在互联网技术领域&#xff0c;数据的获取和处理是至关重要的。尤其是对于音频内容的获取&#xff0c;实时性和效率是衡量一个爬虫性能的重要指标。本文将深入探讨在Objective-C中实现音频爬虫时&#xff0c;如何高效地使用didReceiveData:方法来实时接收数据&#xff0c;并通过…

企业自建邮件系统选U-Mail ,功能强大、安全稳定

在现代企业运营中&#xff0c;电子邮件扮演着至关重要的角色&#xff0c;随着企业规模的增长和业务的多样化&#xff0c;传统的租用第三方企业邮箱服务逐渐显现出其局限性。例如&#xff0c;存储空间受限、数据安全风险、缺乏灵活的管理和备份功能&#xff0c;以及无法与其他企…

C++在实际项目中的应用第二节:C++与区块链

第五章&#xff1a;C在实际项目中的应用 第二课&#xff1a;C与区块链 区块链技术因其去中心化、不可篡改和透明性而受到广泛关注。在这门课程中&#xff0c;我们将深入探讨区块链的基本原理、智能合约的开发以及实际应用的案例分析&#xff0c;重点使用 C 作为实现语言&…

雷池社区版中升级雷池遇到问题

关于升级后兼容问题 版本差距过大会可能会发生升级后数据不兼容导致服务器无法起来 跨多个版本&#xff08;超过1个大版本号&#xff09;升级做好数据备份&#xff0c;遇到升级失败可尝试重新安装解决 升级提示目录不对 在错误的目录下执行&#xff08;比如 safeline 的子目…

TCP/IP Attack Lab

网络拓扑&#xff1a; Task 1: SYN Flooding Attack 收到攻击之前&#xff0c;在Victim主机查看网络连接的状态: 在攻击之前使用User1主机(10.9.0.6)访问Victim(10.9.0.5)主机的 Telnet服务: Task 1.1: Launching the Attack Using Python 在Atacker上建立文件attack-1.py…

Jvm中的堆和栈

JVM中的堆和栈分别存放不同的数据类型和内容。 ‌栈&#xff08;Stack&#xff09;‌&#xff1a; 存储基本数据类型&#xff08;如int, char, boolean等&#xff09;和对象的引用。存储局部变量、方法调用、程序运行状态、方法返回值等。每个线程都有一个独立的线程栈&#…

我为什么投身于青少年AI编程?——打造生态圈(三)

第五部分 青少年AI编程生态圈 一、生态圈 主要涵盖家庭、社区/中小学、高校高职、主管部门。 1、家庭 我们与社区/中小学一道打造让家长满意的模式。 教得好&#xff1a; 费用少&#xff1a; 家门口&#xff1a; 2、社区/中小学 社区党群服务中心和中小学都有大面积科普…

Ubuntu18.04安装vscode1.94.2失败安装vscode1.84.2

系统环境&#xff1a;Ubuntu18.04.6 LTS 自己先去vscode官网下载好最新版本的vscode1.94.2&#xff08;不下也行&#xff0c;反正最新版也用不了&#xff0c;哈哈&#xff09; 网址&#xff1a;Visual Studio Code - Code Editing. RedefinedVisual Studio Code is a code ed…

.NET 8 中的 Mini WebApi

介绍 .NET 8 中的极简 API 隆重登场&#xff0c;重新定义了我们构建 Web 服务的方式。如果您想知道极简 API 的工作原理以及它们如何简化您的开发流程&#xff0c;让我们通过一些引人入胜的示例来深入了解一下。 .NET 极简主义的诞生 想想我们曾经不得不为一个简单的 Web 服务…

鸿蒙开发融云demo发送图片消息

鸿蒙开发融云demo发送图片消息 融云鸿蒙版是不带UI的&#xff0c;得自己一步步搭建。 这次讲如何发送图片消息&#xff0c;选择图片&#xff0c;显示图片消息。 还是有点难度的&#xff0c;好好看&#xff0c;好好学。 一、思路&#xff1a; 选择图片用&#xff1a;photoVie…

多条音频按顺序合成 代码实现

根据之前文章后续chatTTS文本转语音 实践相关记录-CSDN博客 直接合成多条音频&#xff0c;顺序会乱&#xff0c;最终合成的效果不显著&#xff0c;改进了合成音频的代码 直接获取文件夹中的所有 WAV 文件&#xff0c;并按文件名排序来合并它们。 wav_files.sort() 默认是按字母…

CMake 生成器表达式介绍

【写在前面】 生成器表达式在构建系统生成期间进行评估&#xff0c;以生成特定于每个构建配置的信息。它们的形式为 $<...>。例如&#xff1a; target_include_directories(tgt PRIVATE /opt/include/$<CXX_COMPILER_ID>) 这将扩展为 “/opt/include/GNU”、“/opt…