Servlet详解(超详细)

news2024/11/19 1:53:13

Servlet详解

文章目录

  • Servlet详解
    • 一、基本概念
    • 二、Servlet的使用
      • 1、创建Servlet类
      • 2、配置Servlet
        • a. 使用web.xml配置
        • b. 使用注解配置
      • 3、部署Web应用
      • 4、处理HTTP请求和生成响应
      • 5、处理表单数据
        • HTML表单
        • Servlet
      • 6、管理会话
    • 三、servlet生命周期
      • 1、加载和实例化
      • 2、初始化
      • 3、 请求处理
      • 4、销毁

一、基本概念

在Java中,Servlet是用于创建动态Web内容的服务器端组件。Servlet运行在Java EE服务器上,可以响应客户端(通常是Web浏览器)发出的请求。Servlet的生命周期由服务器管理,主要包括初始化、请求处理和销毁三个阶段。

Servlet是一种Java类,它实现了javax.servlet.Servlet接口。Servlet主要用于处理HTTP请求和生成HTTP响应,可以用于创建动态网页、处理表单数据、管理会话等。

二、Servlet的使用

使用Servlet开发Web应用程序主要涉及以下几个步骤:创建Servlet类、配置Servlet、处理请求和生成响应。

1、创建Servlet类

创建一个继承自HttpServlet类的Servlet,并重写doGetdoPost方法以处理HTTP请求。

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;

public class HelloWorldServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置响应内容类型
        response.setContentType("text/html");
        
        // 获取响应输出流
        response.getWriter().println("<h1>Hello, World!</h1>");
    }
}

2、配置Servlet

Servlet可以通过web.xml文件或使用注解配置。在配置中,定义Servlet的名称和URL映射。

a. 使用web.xml配置

WEB-INF目录下的web.xml文件中配置Servlet。

<web-app>
    <servlet>
        <servlet-name>HelloWorldServlet</servlet-name>
        <servlet-class>com.example.HelloWorldServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloWorldServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

b. 使用注解配置

在Servlet类上使用@WebServlet注解配置Servlet。

import javax.servlet.annotation.WebServlet;

@WebServlet("/hello")
public class HelloWorldServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        response.getWriter().println("<h1>Hello, World!</h1>");
    }
}

3、部署Web应用

将Servlet类和相关配置文件打包成一个Web应用程序(WAR文件),然后将WAR文件部署到支持Servlet的Java EE服务器(如Tomcat、Jetty等)上。

如图:
在这里插入图片描述

4、处理HTTP请求和生成响应

doGetdoPost方法中,可以处理请求参数、生成响应内容、设置响应头等。

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 获取请求参数
    String name = request.getParameter("name");
    
    // 设置响应内容类型
    response.setContentType("text/html");
    
    // 生成响应内容
    response.getWriter().println("<h1>Hello, " + name + "!</h1>");
}

5、处理表单数据

Servlet可以处理来自HTML表单的数据。以下是一个简单的表单和处理Servlet的示例:

HTML表单
	<!DOCTYPE html>
<html>
<head>
    <title>Form Example</title>
</head>
<body>
    <form action="submitForm" method="POST">
        Name: <input type="text" name="name">
        <input type="submit" value="Submit">
    </form>
</body>
</html>

Servlet
@WebServlet("/submitForm")
public class FormServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取表单参数
        String name = request.getParameter("name");
        
        // 设置响应内容类型
        response.setContentType("text/html");
        
        // 生成响应内容
        response.getWriter().println("<h1>Hello, " + name + "!</h1>");
    }
}

6、管理会话

Servlet可以使用HttpSession对象来管理用户会话数据。

@WebServlet("/sessionExample")
public class SessionServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取会话对象
        HttpSession session = request.getSession();
        
        // 获取会话属性
        String user = (String) session.getAttribute("user");
        if (user == null) {
            user = "Guest";
        }
        
        // 设置响应内容类型
        response.setContentType("text/html");
        
        // 生成响应内容
        response.getWriter().println("<h1>Hello, " + user + "!</h1>");
        
        // 设置会话属性
        session.setAttribute("user", "John Doe");
    }
}

总结: Servlet是Java Web开发的核心组件,通过继承HttpServlet类并重写doGetdoPost等方法,可以处理HTTP请求并生成响应。Servlet的配置可以通过web.xml文件或注解完成。Servlet应用广泛,包括动态网页生成、表单处理、会话管理等。通过这些基本步骤和示例代码,可以开始使用Servlet开发功能强大的Web应用程序。

三、servlet生命周期

Servlet的生命周期是指Servlet在服务器中从创建到销毁的整个过程。Servlet生命周期由Servlet容器(如Tomcat、Jetty等)管理,主要包括以下几个阶段:加载和实例化、初始化、请求处理和销毁。

注意:Servlet是一个供其他Java程序(Servlet引擎)调用的Java类,它不能独立运行,它的运行完全由Servlet引擎来控制和调度。

1、加载和实例化

  • 加载:当服务器启动或首次接收到对该Servlet的请求时,Servlet容器会加载Servlet类。加载过程包括将Servlet类字节码加载到内存中。
  • 实例化:加载类之后,Servlet容器会创建Servlet类的实例。这个过程类似于使用new关键字创建对象。
// 服务器加载Servlet类并创建其实例
HelloWorldServlet servlet = new HelloWorldServlet();

2、初始化

  • 初始化:实例化后,Servlet容器会调用Servlet的init方法进行初始化。init方法在Servlet生命周期内只调用一次,通常在此方法中进行资源分配,如数据库连接、读取配置文件等。
@Override
public void init() throws ServletException {
    // 执行初始化操作
    System.out.println("Servlet 初始化");
}

3、 请求处理

  • 请求处理:Servlet初始化完成后,每次有请求到达时,Servlet容器会调用Servlet的service方法。service方法根据请求类型(GET、POST等)调用相应的doGetdoPost等方法。每个请求都会触发一次service方法的调用。
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 处理GET请求
    response.getWriter().println("<h1>Hello, World!</h1>");
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 处理POST请求
    String name = request.getParameter("name");
    response.getWriter().println("<h1>Hello, " + name + "!</h1>");
}

4、销毁

  • 销毁:当服务器关闭或Servlet被移除时,Servlet容器会调用Servlet的destroy方法进行清理工作。destroy方法在Servlet生命周期内只调用一次,通常在此方法中释放资源,如关闭数据库连接、清理缓存等。

**注意:**针对客户端的多次Servlet请求,通常情况下,服务器只会创建一个Servlet实例对象,也就是说Servlet实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至web容器退出,servlet实例对象才会销毁。

@Override
public void destroy() {
    // 执行清理操作
    System.out.println("Servlet 销毁");
}

总结:

  1. 加载和实例化:服务器启动或首次请求时加载Servlet类并创建其实例。
  2. 初始化:调用init方法进行初始化。
  3. 请求处理:每次请求调用service方法,根据请求类型调用相应的doGetdoPost等方法。
  4. 销毁:服务器关闭或Servlet被移除时调用destroy方法进行清理。

注意:在Servlet的整个生命周期内,Servlet的init方法只被调用一次。而对一个Servlet的每次访问请求都导致Servlet引擎调用一次servlet的service方法。对于每次访问请求,Servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法,service方法再根据请求方式分别调用doXXX方法。

小tips: 如果在元素中配置了一个元素,那么WEB应用程序在启动时,就会装载并创建Servlet的实例对象、以及调用Servlet实例对象的init()方法。 用途:为web应用写一个InitServlet,这个servlet配置为启动时装载,为整个web应用创建必要的公共数据。

Servlet理解图:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python爬虫入门02:Fiddler下载使用教程

文章目录 手机抓包全攻略&#xff1a;Fiddler 工具深度解析引言Fiddler 工具简介为什么选择 Fiddler&#xff1f; 安装与配置 Fiddler步骤一&#xff1a;下载与安装步骤二&#xff1a;配置浏览器代理步骤三&#xff1a;安装 HTTPS 证书 配置手机以使用 Fiddler步骤一&#xff1…

鸿蒙应用框架开发【OpenGL三棱椎】 NDK

OpenGL三棱椎 介绍 XComponent控件常用于相机预览流的显示和游戏画面的绘制,在HarmonyOS上&#xff0c;可以配合Native Window创建OpenGL开发环境&#xff0c;并最终将OpenGL绘制的图形显示到XComponent控件。本示例基于"Native C"模板&#xff0c;调用OpenGL(Open…

wpf中团队独立开发模块和左侧2个菜单的框架演示

此篇文章和上一篇文章wpf中开发独立模块功能和左侧1个菜单的框架演示-CSDN博客的结构是一样的&#xff0c;有1点不同的是&#xff0c;左侧有2层菜单&#xff0c;所以&#xff0c;就会更加的复杂。建议&#xff0c;先看明白上一篇的内容&#xff0c;再看这篇文章&#xff0c;否则…

CSS实现表格无限轮播

<div className{styles.tableTh}><div className{styles.thItem} style{{ width: 40% }}>报警名称</div><div className{styles.thItem} style{{ width: 35% }}>开始时间</div><div className{styles.thItem} style{{ width: 25% }}>状态&…

前端三大主流框架对比

在现代前端开发中&#xff0c;React、Vue和Angular是三大流行的框架/库。它们各自有独特的优缺点&#xff0c;适用于不同的开发需求和项目规模。下面是对这三者的详细比较&#xff1a; 一、 React 简介&#xff1a; 由Facebook开发和维护&#xff0c;是一个用于构建用户界面…

亚博科技和幻尔科技的十轴IMU在Ros2 Humble下驱动后数值无限趋于0的解决方案

在做机器人导航以及建模的时候&#xff0c;考虑到多传感器融合可能会带来更好的效果&#xff0c;于是决定使用幻尔科技的十轴IMU&#xff08;其实亚博科技与幻尔科技这块IMU的内部完全一致&#xff0c;驱动代码都完全一致&#xff09;驱动后使用以下命令输出传来的四元数等数据…

自写ApiTools工具,功能参考Postman和ApiPost

近日在使用ApiPost的时候&#xff0c;发现新版本8和7不兼容&#xff0c;也就是说8不支持离线操作&#xff0c;而7可以。 我想说&#xff0c;我就是因为不想登录使用才从Postman换到ApiPost的。 众所周知&#xff0c;postman时国外软件&#xff0c;登录经常性抽风&#xff0c;…

Mike SHE里如何正确设置分区降雨

前言&#xff1a; MIKE SHE分布式水文模型现阶段用于流域洪水的项目比较多&#xff0c;因属于大尺度模型&#xff0c;基本可以模拟水循环全过程&#xff0c;包含降雨—蒸发——产汇流—地表水—地下水等。同时还可以耦合MIKE11水动力水质模型。 今天给大家介绍下MIKESHE是如何…

从零到一使用 Ollama、Dify 和 Docker 构建 Llama 3.1 模型服务

本篇文章聊聊&#xff0c;如何使用 Ollama、Dify 和 Docker 来完成本地 Llama 3.1 模型服务的搭建。 如果你需要将 Ollama 官方不支持的模型运行起来&#xff0c;或者将新版本 llama.cpp 转换的模型运行起来&#xff0c;并且想更轻松的使用 Dify 构建 AI 应用&#xff0c;那么…

进程间的通信(IPC)--管道

1.进程间通信常用的方式 1 &#xff0c;管道通信&#xff1a;有名管道&#xff0c;无名管道 2 &#xff0c;信号 - 系统开销小 3 &#xff0c;消息队列 - 内核的链表 4 &#xff0c;信号量 - 计数器 5 &#xff0c;共享内存 6 &#xff0c;内存映射 7 &#xff0c;套接…

人称“灯爷”的灯光师到底要做些什么,看看他的岗位说明书

灯光师又称“灯爷”,是摄影制作部门负责灯光设备的技术人员,一般归摄影指导调配。被尊称“爷”,可见灯光师的地位不容小觑。那么这个岗位到底要做些什么呢&#xff1f; 岗位职责&#xff1a; 1、负责公司灯光设备的调制、维护和保养&#xff1b; 2、负责各包房灯光设备的调制、…

Mac环境报错 error: symbol(s) not found for architecture x86_64

Mac 环境Qt Creator报错 error: symbol(s) not found for architecture x86_64 错误信息 "symbol(s) not found for architecture x86_64" 通常是在编译或链接过程中出现的问题。这种错误提示通常涉及到符号未找到或者是因为编译器没有找到适当的库文件或函数定义。 …

基于springboot+vue+uniapp的养老院系统小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

初识git工具~~上传代码到gitee仓库的方法

目录 1.背景~~其安装 2.gitee介绍 2.1新建仓库 2.2进行相关配置 3.拉取仓库 4.服务器操作 4.1克隆操作 4.2查看本地仓库 4.3代码拖到本地仓库 4.4关于git三板斧介绍 4.4.1add操作 4.4.2commit操作 4.4.3push操作 5.一些其他说明 5.1.ignore说明 5.2git log命令 …

ACC:Automatic ECN Tuning for High-Speed Datacenter Networks 相关知识点介绍(二)

目录 PerfTest工具 Incast traffic Incast Traffic 的原因 Incast Traffic 的影响 解决方法 流量负载 简单解释 影响因素 影响 管理方法 LINKPACK 主要特点 LinkPack 的应用 运行结果 Quantum ESPRESSO 主要特点 TensorFlow 主要特点 主要组件 Incast与qp …

Ubuntu2023.04 浏览器不能上网的问题

1.问题描述 ping www.baidu.com 是可以连接的&#xff0c;但是打开网页就是不能上网&#xff0c;但是自己查看了浏览器上面的设置&#xff0c;代理设置都是关闭的 再看了系统的设置代理也是关闭的&#xff0c;就是上不了网 解决方案&#xff1a; 455 echo $http_proxy456 e…

JavaWeb项目中动态拼接sql语句

业务需求描述&#xff1a; 图中的查询框在分条件查询用户信息列表时&#xff0c;前端可能会传回一个条件或多个条件&#xff0c;此时要对不同的条件进行sql语句的不同书写&#xff0c;前端传的情况有很多种&#xff0c;所以如果分情况写sql语句会比较死&#xff0c;并且不够灵活…

机器学习之人脸识别-使用 scikit-learn 和人工神经网络进行高效人脸识别

文章摘要 本文将介绍如何使用 Python 的 scikit-learn 库和人工神经网络&#xff08;ANN&#xff09;来识别人脸。我们将使用 LFW 数据集&#xff08;Labeled Faces in the Wild&#xff09;&#xff0c;这是一个广泛用于人脸识别基准测试的大型人脸数据库。我们将展示如何准备…

RedHat Enterprise Linux 7 YUM源(本地/网络源)配置详解

目录 一、挂载 二、建立本地源 三、建立网络源 四、验证可行性 一、挂载 ——将光盘挂载到 /mnt 下 当/mnt中有如图内容时&#xff0c;即挂载成功 若挂载光驱/dev/sr0时报错&#xff1a;mount: no medium found on /dev/sr0 解决措施&#xff1a;查看该设备状态是否全部勾选…

数仓实践:一文读懂数仓 ODS 层模型设计

引言 OneData 体系中,数据划分为三层: ODS(Operational Data Store):操作数据层。它相当于数据中台通用数据模型层的一个数据准备区,同时又承担着基础数据的记录以及历史变化,主要完成业务系统、日志等结构化和半结构化数据引入到数据中台。保留业务系统原始数据,包括…