初探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 {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {        
    }

    @Override
    protected 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应用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

国标GB28181公网平台EasyGBS国标GB28181公网直播与国标协议的优质对接方案

随着信息技术的飞速发展&#xff0c;视频监控领域正经历从传统安防向智能化、网络化安防的深刻转变。在这一变革中&#xff0c;国标GB28181公网平台EasyGBS凭借其强大的功能和广泛的应用场景&#xff0c;成为视频监控平台与国标协议对接的优质方案。 应急管理部门正积极推进以信…

MySQL数据表导入到clickhouse数据库中

前言&#xff1a;研发需求&#xff0c;需要把MySQL数据导入到clickhouse中来测试计算性能是否提升。 从MySQL导入到clickhouse需要两个工具 NavicatDBeaver 导出MySQL数据 连接上MySQL>选择数据库>选择数据表 选择csv格式 导出数据 下面全部默认即可 开始导出 …

通俗易懂的餐厅例子来讲解JVM

餐厅版本 JVM&#xff08;Java虚拟机&#xff09;可以想象成一个虚拟的计算机&#xff0c;它能够运行Java程序。为了让你更容易理解&#xff0c;我们可以用一个餐厅的比喻来解释JVM&#xff1a; 菜单&#xff08;Java源代码&#xff09;&#xff1a; 想象一下&#xff0c;Java…

力扣——113. 路径总和

113. 路径总和 II 给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [5,4,8,11,null,13,4,7,2,null,null,5,1], t…

【Rust中的序列化:Serde(一)】

Rust中的序列化&#xff1a;Serde Serde是什么&#xff1f;什么是序列化序列化&#xff1f;Serde运行机制Serde Data ModelVistor ApiSerializer ApiDeserializer Api 具体示例流程分析具体步骤&#xff1a;那么依次这个结论是如何得出的呢?什么是de? 总结 Serde是什么&#…

基于生成式人工智能的工业互联网安全技术与应用研究

摘要&#xff1a;近年来&#xff0c;人工智能技术飞跃式发展&#xff0c;工业互联网安全与大模型、生成式人工智能等新技术融合成为研究的重点方向和难题。针对工业互联网安全领域面临的突出性问题&#xff0c;对该领域人工智能应用现状进行了分析与研究&#xff0c;提出了一种…

神舟十九号发射取得圆满成功 科技自强自力筑梦天穹

10月30日凌晨神舟十九号载人飞船发射取得圆满成功&#xff01; 图片来自网络 当日凌晨4时27分&#xff0c;搭载神舟十九号载人飞船的长征二号F遥十九运载火箭在酒泉卫星发射中心点火发射取得圆满成功。执行神舟十九号载人飞行任务的航天员乘组由蔡旭哲、宋令东、王浩泽3名航天…

PHP反序列化原生类字符串逃逸框架反序列化利用

PHP反序列化 概念 序列化的原因&#xff1a;为了解决开发中数据传输和数据解析的一个情况(类似于要发送一个椅子快递&#xff0c;不可能整个椅子打包发送&#xff0c;这是非常不方便的&#xff0c;所以就要对椅子进行序列化处理&#xff0c;让椅子分成很多部分在一起打包发送…

KINGBASE部署

环境&#xff1a;x86_64 系统&#xff1a;centos7.9 数据库–版本&#xff1a;KingbaseES_V008R006C008B0014_Lin64_install 授权文件–版本&#xff1a;V008R006-license-企业版-90天 一 前置要求 1.1. 硬件环境要求 KingbaseES支持通用X86_64、龙芯、飞腾、鲲鹏等国产C…

建筑行业知识库搭建:好处、方法与注意事项

在建筑行业&#xff0c;知识管理对于提升项目效率、降低成本、增强创新能力以及构建竞争优势具有至关重要的作用。搭建一个高效、系统的建筑行业知识库&#xff0c;不仅有助于实现知识的有效沉淀与便捷共享&#xff0c;还能促进知识在项目实践中的灵活应用&#xff0c;从而加速…

图书管理系统(JDBC)

AdminUser是管理员类 NormalUser是用户类 AddOperation是增加图书类 BorrowOperation是借书类 DelOperation是删除图书类 ExitOperation是退出类 FindOperation是查找图书类 IOPeration是接口 ReturnOperation是还书类 ShowOperation是显示所有图书类 注意&#xff1a…

liunx CentOs7安装MQTT服务器(mosquitto)

查找 mosquitto 软件包 yum list all | grep mosquitto出现以上两个即可进行安装&#xff0c;如果没有出现则需要安装EPEL软件库。 yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm查看 mosquitto 信息 yum info mosquitto安装 mosquitt…

如何保护网站安全

1. 使用 Web 应用防火墙&#xff08;WAF&#xff09; 功能&#xff1a;WAF 可以实时检测和阻止 SQL 注入、跨站脚本&#xff08;XSS&#xff09;、文件包含等常见攻击。它通过分析 HTTP 流量来过滤恶意请求。 推荐&#xff1a;可以使用像 雷池社区版这样的 WAF&#xff0c;它提…

【CPN TOOLS建模学习】设置变迁的属性

使用Tab键在属性之间进行切换 与一个变迁相关联的四个铭文&#xff0c;均为可选项&#xff1a; 变迁名称守卫(Guard)时间代码段 变迁延迟必须是一个正整数表达式。该表达式前面加上&#xff0c;这意味着时间铭文的形式为 delayexpr。在添加时间铭文之前&#xff0c;铭文的默…

Cityscapes数据集:如何将像素级的多边形标注的分割数据标注转为目标检测的bbox标注

Cityscapes数据集官网下载地址&#xff1a; https://www.cityscapes-dataset.com/ 相关介绍&#xff1a;从官网下载这三个压缩包文件leftImg8bit_trainvaltest.zip、gtCoarse.zip、gtFine_trainvaltest.zip 1&#xff09;leftImg8bit_trainvaltest.zip分为train、val以及tes…

NVR批量管理平台EasyNVR多品牌NVR管理工具/设备关于远程控制的详细介绍

在数字化安防时代&#xff0c;视频监控技术已成为维护公共安全、提升管理效能的重要基石。随着科技的飞速发展&#xff0c;流媒体技术和视频监控正经历着前所未有的变革与融合。NVR批量管理平台EasyNVR&#xff0c;作为一款基于“云-边-端”一体化架构的视频融合云平台&#xf…

理解原子变量之一:从互斥锁到原子变量,最粗浅的认识

目录 三个实例对比 结论 多线程编程对于程序员来说&#xff0c;是一项非常重要的技能。在C11标准问世之前&#xff0c;C标准是不支持多线程的。在C11出台前&#xff0c;如果你想在linux平台进行多线程编程&#xff0c;就要使用linux的多线程库pthread&#xff0c;而pthread是…

eBay自养号测评养成攻略:从环境系统搭建到养号下单

eBay账号在测评中的重要性不言而喻&#xff0c;然而&#xff0c;新注册的账号往往面临被封禁或下单即封的风险。如何养成稳定的买家号&#xff0c;成为众多商家关注的焦点。以下将详细讲解eBay测评中如何稳定养成买家号。 一、账号注册后的初期养护 新注册的eBay账号&#xf…

Docker(二):Docker的基本使用

1 Docker的基本使用 1.1 镜像相关操作 1、从DockerHub搜索镜像 [rootmaster ~]# docker search centos # 镜像名字 描述 星标 是否官方&#xff08;有OK表示为官方镜像&#xff09; NAME …

【hector mapping参数设置】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 hector mapping部分参数介绍调整hector_mapping中的参数ros常见问题总结 hector mapping部分参数介绍 在wiki.ros.org/hector_mapping界面找到3.1.4 Parameters章节…