JavaWeb学习(3)(Servlet详细、Servlet的三种实现方式(面试)、Servlet的生命周期、传统web.xml配置Servlet(了解))

目录

一、Servlet详细。

(1)基本介绍。

(2)基本作用。

1、接收客户端请求数据。

2、处理请求。

3、完成响应结果。

二、Servlet的三种实现方式。

(1)实现javax.servlet.Servlet接口。

1、基本介绍。

2、代码演示。

(2)继承javax.servlet.GenericServlet类。

(3)继承javax.servlet.HttpServlet类。

三、Servlet的生命周期。

(1)xxx的生命周期?

(2)Servlet的生命周期相关方法。


一、Servlet详细。

(1)基本介绍。
  • Servlet 是一种运行在服务器端的 Java 程序。它使用 Java 语言编写,用于扩展服务器的功能。
  • Servlet 主要用于 Web 应用程序,它们可以响应客户端的请求,并生成响应。比如生成 HTML、XML 或 JSON 格式的文档。

(2)基本作用。
  • Servlet的作用:处理客户端浏览器的请求,然后服务器会把接收到的请求交给Servlet来处理,最终进行响应。
1、接收客户端请求数据。
  • 如登录表单。用户提交登录表单,发送登录请求。
  • 服务器接收用户的请求并交给(LoginServlet)进行处理。
2、处理请求。
  • LoginServlet处理:接收客户端用户传递的数据并进行校验是否合法。
  • 校验完成后,根据校验的结果进行响应。
3、完成响应结果。
  • 如果登录校验成功,响应登录成功的信息,并进行页面的跳转。(如:index.jsp)
  • 如果登录校验成功,响应登录失败的信息,并进行错误的提示!

二、Servlet的三种实现方式。

(1)实现javax.servlet.Servlet接口。
1、基本介绍。

推荐指数:低

  • 可以查阅javaEE的API文档。


  • 方法介绍。重点关注:service()方法


  • 因为实现一个接口,就要重写里面的所有方法。
  • 这种实现Servlet的方式过于麻烦,一般不推荐!

2、代码演示。
  • 创建AServlet类,并实现Servlet接口。
package com.fs.web;

import javax.servlet.*;
import java.io.IOException;
import java.util.Enumeration;

/**
 * @Title: AServlet
 * @Author HeYouLong
 * @Package com.fs.web
 * @Date 2024/11/20 上午11:38
 * @description:
 */
public class AServlet implements Servlet {
    private ServletConfig servletConfig;

    /**
     * 初始化方法, Servlet类的对象创建之后, 才去调用init()
     * @param servletConfig
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("AServlet出生了!");
        this.servletConfig = servletConfig;
    }

    /**
     * 获取Servlet相关的配置。如:绑定的url
     * @return
     */
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /**
     * 服务方法:  处理客户端请求的方法
     *  客户端每请求该Servlet一次, service() 方法就执行一次
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Aservlet为您服务!");
        //获取Servlet的配置信息
        String v1 = servletConfig.getInitParameter("k1");
        String v2 = servletConfig.getInitParameter("k2");
        System.out.println("k1=" + v1 + ", k2=" + v2);
        //第二种获取
        System.out.println("===============================================");
        Enumeration<String> names = servletConfig.getInitParameterNames();
        while (names.hasMoreElements()){
            String name = names.nextElement();
            String value = servletConfig.getInitParameter(name);
            System.out.println(name + "=" + value);
        }
    }

    /**
     * 获取Servlet的描述信息。无关紧要的方法
     * @return
     */
    @Override
    public String getServletInfo() {
        return "";
    }

    /**
     * 销毁方法, 当该Servlet被销毁之前,调用该方法
     */
    @Override
    public void destroy() {
        System.out.println("AServlet要死了~_~");
    }
}
  • 传统的web.xml中配置AServlet。(后面的学习都是使用注解"@...xx"
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--配置AServlet-->
    <servlet>
        <servlet-name>AServlet</servlet-name>
        <servlet-class>com.fs.web.AServlet</servlet-class>
        <!--初始化参数-->
        <init-param>
            <param-name>k1</param-name>
            <param-value>v1</param-value>
        </init-param>
        <init-param>
            <param-name>k2</param-name>
            <param-value>v2</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <!--通过servlet-name关联servlet标签-->
        <servlet-name>AServlet</servlet-name>
        <url-pattern>/AServlet</url-pattern>
    </servlet-mapping>
    
</web-app>
  • 第一次请求的运行结果。初始化一次、服务一次、成功获取web.xml的配置信息。

(2)继承javax.servlet.GenericServlet类。

推荐指数:一般

  • 查阅javaEE的API文档。
  • 注意GenericServlet类是抽象类
  • GenericServlet类也是Servlet接口的一个实现类!


  • 方法介绍。abstract void service(request对象,response对象)

(3)继承javax.servlet.HttpServlet类。

推荐指数:高!

  • 专门处理客户端浏览器的http请求的类。
  • HttpServletGenericServlet的已知实现子类后期的学习都是使用这个类


  • 重点方法。doDelete()doGet()doPost()doPut()service()方法。

  • 后面可能会演示。可以自己进行尝试。该实现方式很方便!相对简单很多!也很重要

三、Servlet的生命周期。

(1)xxx的生命周期?
  • 所谓生命周期,就是说某某的的出生、服务,以及死亡而Servlet生命周期也是如此!
  • Servlet对象创建,不需要程序员手动创建new,而是由Tomcat服务器创建。
  • init()service()destroy()三个方法都是由Tomcat服务器完成调用。称生命周期方法。

(2)Servlet的生命周期相关方法。
  • void init(ServletConfig对象)

  • Tomcat服务器启动时不会创建。

  • 只有第一次请求时,才会初始化,调用init()方法。并创建Servlet对象,


  • void service(ServletRequest对象,ServletResponse对象)

  • 当处理请求时就会调用。如刷新一次,重新请求,就会调用一次service()方法。


  • void destroy()

  • Tomcat服务器关闭之前,先执行该方法,销毁创建的Servlet对象。


  • 通过AServlet类三种方法调用的演示结果。Servlet对象创建、服务、销毁

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

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

相关文章

Spring Boot读取配置文件的六种方案

从配置文件中获取属性应该是SpringBoot开发中最为常用的功能之一&#xff0c;但就是这么常用的功能&#xff0c;仍然有很多开发者在这个方面踩坑&#xff0c;以下是我整理的几种获取配置属性的方式。 一、Environment 使用 Environment 方式来获取配置属性值非常简单&#xf…

在google cloud虚拟机上配置anaconda虚拟环境简单教程

下载anaconda安装包 wget https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux-x86_64.sh 安装 bash Anaconda3-2022.10-Linux-x86_64.sh 进入base环境 eval "$(/home/xmxhuihui/anaconda3/bin/conda shell.bash hook)" source ~/.bashrc 安装虚拟环境…

【5G】5G目标和标准化 5G targets and standardization

5G标准是在第三代合作伙伴关系项目&#xff08;3GPP&#xff0c;3rd Generation Partnership Project&#xff09;中定义的&#xff0c;实际的标准制定工作由参与3GPP活动的区域标准机构成员共同推进。目前&#xff0c;超过600家公司通过各自的地区标准组织成为3GPP的成员。然而…

神经网络的梯度反向传播计算过程,举例说明

目录 神经网络的梯度反向传播计算过程 网络结构 权重和偏置 激活函数 前向传播 损失函数 反向传播 参数更新 举例 神经网络的梯度反向传播计算过程 为了说明神经网络的梯度反向传播计算过程,我们考虑一个简单的全连接网络,该网络有一个输入层、一个隐藏层和一个输出…

网络分层模型( OSI、TCP/IP、五层协议)

1、网络分层模型 计算机网络是一个极其复杂的系统。想象一下最简单的情况&#xff1a;两台连接在网络上的计算机需要相互传输文件。不仅需要确保存在一条传输数据的通路&#xff0c;还需要完成以下几项工作&#xff1a; 发起通信的计算机必须激活数据通路&#xff0c;这包括发…

Unity中使用Sqlite存储本地数据

sqlite-net sqlite下载页 我的环境&#xff1a;win11、unity团结1.3.4 1.下载sqlite-net&#xff0c;将SQLite.cs脚本导入Unity 2.下载各平台依赖项&#xff0c;如dll、aar等。导入Unity并设置 3.简单列子&#xff0c;打包测试 using System; using System.IO; using SQLi…

详解LeetCode地下城游戏(动态规划)——区分两种状态表示形式

地下城游戏 题目链接&#xff1a;174. 地下城游戏 状态表示&#xff1a; 按照以往题的表示&#xff0c;dp[i][j]表示&#xff1a;从起点&#xff08;0&#xff0c;0&#xff09;位置到达&#xff08;i&#xff0c;j&#xff09;位置时&#xff0c;所需的最小初始健康值。但是…

【JAVA】Java第十三节:String类(String相关方法,以及StrinBuftrer , StringBulder相关方法)

本文详细介绍了String类以及常用的String相关方法&#xff0c;以及StrinBuftrer , StringBulder相关方法的使用&#xff0c;建议有印象即可&#xff0c;不需要都记住&#xff0c;使用时去查取即可 一、创建一个String类型的变量 我们平时创建String类型的变量一般是第一种形式…

JavaWeb文件上传

文件上传总览 文件上传主要是指将本地文件&#xff08;包括但不限于图片、视频、音频等&#xff09;上传到服务器&#xff0c;提供其他用户浏览或下载的过程。在日常生活中&#xff0c;我们在很多情况下都需要使用文件上传功能&#xff0c;比如&#xff1a;发微博、发朋友圈等…

Doris的基础架构

Doris的基础架构 Frontend&#xff08;FE&#xff09;&#xff1a;主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。Backend&#xff08;BE&#xff09;&#xff1a;主要负责数据存储、查询计划的执行。 我的Github地址&#xff0c;欢迎大家加入我的开…

Shell test 命令

Shell test 命令 Shell中的 test 命令用于检查某个条件是否成立&#xff0c;它可以进行数值、字符和文件三个方面的测试。 数值测试 参数说明-eq等于则为真-ne不等于则为真-gt大于则为真-ge大于等于则为真-lt小于则为真-le小于等于则为真 实例 num1100 num2100 if test $[n…

Kafka的消费消息是如何传递的?

大家好&#xff0c;我是锋哥。今天分享关于【Kafka的消费消息是如何传递的&#xff1f;】面试题。希望对大家有帮助&#xff1b; Kafka的消费消息是如何传递的&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Kafka 的消息传递是通过 消费者&#xff08…

Linux-ADC驱动实验

上一章我们讲解了如何给 ICM20608 编写 IIO 驱动&#xff0c;ICM20608 本质就是 ADC&#xff0c;因此纯粹的 ADC 驱动也是 IIO 驱动框架的。本章我们就来学习一下如何使用 I.MX6ULL 内部的 ADC&#xff0c;并且在学习巩固一下 IIO 驱动。 ADC 驱动源码简析 设备树下的 ADC 节点…

如何制作“优美”PPT

目录 1.免费PPT模板网站&#xff1a; 2.免费有较好质量的图片网站&#xff1a; 免费图片资源 免费透明PNG图片资源&#xff1a; 免费icon图片资源&#xff1a; 3.选择好的图片&#xff1a; 图片底色 4.要与不要 千万不要&#xff1a; 一定要&#xff1a; 6.一些建议…

SSRF对Redis进行内网渗透

SSRF对Redis进行内网渗透 一 环境搭建 准备一台服务器&#xff0c;开启lampp和redis&#xff0c;redis只允许内网访问 使用kali进行端口扫描&#xff0c;扫不到6379 使用kali连接redis&#xff0c;也连不上 ssrf漏洞代码 <?php ​$url $_GET[url]; ​// 创建一个cUR…

面经自测——死锁/死锁的必要条件/死锁的预防/进程通信的方式

前言 本文是作者专门用来自测Java后端相关面试题的&#xff0c;所有问题都是在牛客、知识星球或网上找到的最近最新的面试题&#xff0c;全文回答都是作者按自己的真实水平仿照真实环境的回答&#xff0c;所以答案不一定真实&#xff08;但回答一定真诚&#x1f923;&#xff0…

计算机网络研究实训室建设方案

一、概述 本方案旨在规划并实施一个先进的计算机网络研究实训室&#xff0c;旨在为学生提供一个深入学习、实践和研究网络技术的平台。实训室将集教学、实验、研究于一体&#xff0c;覆盖网络基础、网络架构、网络安全、网络管理等多个领域&#xff0c;以培养具备扎实理论基础…

React开发 - 技术细节汇总一

React简介 React 是一个声明式&#xff0c;高效且灵活的用于构建用户界面的 JavaScript 库。使用 React 可以将一些简短、独立的代码片段组合成复杂的 UI 界面&#xff0c;这些代码片段被称作“组件”。 ui render (data) -> 单向数据流 MVC // model var myapp {}; // …

嵌入式蓝桥杯学习4 lcd移植

cubemx配置 复制前面配置过的文件 打开cubemx&#xff0c;将PB8,PB9配置为GPIO-Output。 点击GENERATE CODE. 文件移植 1.打开比赛提供的文件包&#xff0c;点击Inc文件夹 2.点击Inc文件夹。复制fonts.h和lcd.h&#xff0c;粘贴到我们自己的工程文件夹的bsp中&#xff08…

迭代器模式的理解和实践

引言 在软件开发中&#xff0c;我们经常需要遍历容器对象&#xff08;如数组、列表、集合等&#xff09;中的元素。如果每个容器对象都实现自己的遍历算法&#xff0c;那么代码将会变得冗余且难以维护。为了解决这个问题&#xff0c;迭代器模式应运而生。迭代器模式是一种行为型…