@WebServlet

2023-11-13

一、Servlet简介

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。(B-S开发的基础)

Servlet 能做些什么

  • 1.读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
  • 2.读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
  • 3.处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
  • 4.发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
  • 5.发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。

Servlet 生命周期

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:

  • Servlet 通过调用 init () 方法进行初始化。
  • Servlet 调用 service() 方法来处理客户端的请求。
  • Servlet 通过调用 destroy() 方法终止(结束)。
  • 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
    生命周期附图

二、遇到的问题

1.@WebServlet("/路径")

很多时候我们会在许多代码中出现 @WebServlet("/CheckBox")注释内容,我在学习Servlet时,就在思考这句代码有什么作用,为什么要放在这里。 查阅了许多博客之后,大致搞清了缘由。
以下代码建立小型模型(假定已经配置Web项目)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Servlet</title>
</head>
<body>
<form action="CheckBox" method="POST" target="_blank">
    <input type="checkbox" name="baidu" checked="checked" /> 百度
    <input type="checkbox" name="google"  /> Google
    <input type="checkbox" name="taobao" checked="checked" /> 淘宝
    <input type="submit" value="选择站点" />
</form>
</body>
</html>


import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/CheckBox")
public class CheckBox extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");

        PrintWriter out = response.getWriter();
        String title = "读取复选框数据";
        String docType = "<!DOCTYPE html> \n";
        out.println(docType +
                "<html>\n" +
                "<head><title>" + title + "</title></head>\n" +
                "<body bgcolor=\"#f0f0f0\">\n" +
                "<h1 align=\"center\">" + title + "</h1>\n" +
                "<ul>\n" +
                "  <li><b>百度标识:</b> "
                + request.getParameter("baidu") + "\n" +
                "  <li><b>Google 标识:</b> "
                + request.getParameter("google") + "\n" +
                "  <li><b>淘宝标识:</b> "
                + request.getParameter("taobao") + "\n" +
                "</ul>\n" +
                "</body></html>");
    }

    // 处理 POST 方法请求的方法
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
    }

首次启动Tomcat后,服务器由于没有Servlet实例,Tomcat会自动实例化一个容器。在这个容器中,我们有一个简单的H5页面表单
在这里插入图片描述
表单采用POST方式提交, 点击按钮发起HTTP请求,通过action属性提交到Servlet 程序。
此时就涉及上面提到的问题,收到HTTP请求后Servle会如何处理?

一般,我们通过Web.xml配置文件指定

<servlet>
          <!--类名-->
          <servlet-name>CheckBox</servlet-name>
          <!--所在的包-->
          <servlet-class>CheckBox</servlet-class>
     </servlet>

     <servlet-mapping>
          <servlet-name>CheckBox</servlet-name>
          <!--访问基于项目的路径-->
          <url-pattern>/CheckBox</url-pattern>
     </servlet-mapping>

其中/CheckBox表示访问该servlet的 url 映射(路径)(此处为相对路径,即 “项目名称/CheckBox” )。

注释@WebServlet("/CheckBox") 同样可以起到上述配置文件的作用,等价于 在web.xml中配置的该servlet的元素中的配置。

经过测试,web.xml与@Webservlet(‘/路径’)作用大致相同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@WebServlet 的相关文章

随机推荐

  • flutter toast插件 OKToast的介绍

    OKToast 是一款 在 flutter 上 使用的 toast 插件 使用简单 可定制性强 纯 flutter 调用不用 context 文章目录 安装 使用 在代码中定义 OKToast 组件 调用 文本 toast 自定义 widg
  • Centos7安装redis(详细步骤)

    一 安装redis 1 yum安装redis yum install redis 2 启动redis 启动redis service redis start 停止redis service redis stop 查看redis运行状态 se
  • c++栈详解(附代码)

    1 栈 Stack 是一种线性存储结构 它具有如下特点 1 栈中的数据元素遵守 先进后出 First In Last Out 的原则 简称FILO结构 后进先出的叫法 也是可以的 2 限定只能在栈顶进行插入和删除操作 2 栈的相关概念 1
  • CNN中feature map、卷积核、卷积核个数、filter、channel的概念解释,以及CNN 学习过程中卷积核更新的理解

    feature map 卷积核 卷积核个数 filter channel的概念解释 feather map的理解 在cnn的每个卷积层 数据都是以三维形式存在的 你可以把它看成许多个二维图片叠在一起 像豆腐皮一样 其中每一个称为一个feat
  • 使用WTGAHRS2(JY-GPSIMU)在ROS中读取数据并发布话题

    目录 IMU简介 驱动程序 IMU串口通信协议 程序 效果 IMU简介 十轴惯性导航传感器WTGAHRS2传感器集成高精度的陀螺仪 加速度计 地磁场传感器 GPS 模块 采用高性能的微处理器和先进的动力学解算与卡尔曼动态滤波算法 能够快速求
  • nodejs性能优化——多进程

    1 引言 现在在准备毕设 打算还是使用nodejs作为后端 遇到了一些知识上的瓶颈 主要是想要写出一个高性能点的爬虫 由于每次请求的http数量上万 经常挂了 要么是他人的服务器终止了连接 要么是node经不起密集CPU 毕竟请求完成之后还
  • MySQL(DDL)

    1 了解主流的数据库和数据库分类 1 1数据库概念 数据库 按照数据结构来组织 存储和管理数据的一种建立在计算机存储设备上的仓库 数据库的优势 1 可以持久化存储大量的数据 方便我们进行检索 2 可以保证数据的安全和数据的一致性 事物 3
  • printk的使用

    参考文章 https blog csdn net wwwlyj123321 article details 88422640 https blog csdn net m0 46170433 article details 105263694
  • FTP-----局域网内部远程桌面

    此文包含详细的图文教程 有疑问评论区留言 博主第一时间解决 目录 一 被远程桌面的电脑 1 开启远程权限 2 添加账户 有本地账户跳过这步 3 帐号隶属于 远程桌面 4 帐号隶属于 本地用户组 二 本地电脑连接远程桌面 前提条件 1 两台电
  • buffer_head数据结构

    内核版本 5 9 0 数据结构 Historically a buffer head was used to map a single block within a page and of course as the unit of I O
  • Spring boot new对象,通过上下文实例化对象

    import org springframework beans BeansException import org springframework beans factory NoSuchBeanDefinitionException i
  • 类的设计与实现 设计一个游戏的某个简单过程

    大作业1 类的设计与实现 一 实验目的 掌握类的设计与实现 了解如何根据描述发现类及其成员 具备初步的面向对象分析与设计能力 二 实验内容 请选择一个你所熟悉的游戏 分析其中的某个场景所涉及的类 及其各个类的属性和行为 完成类的定义 请选择
  • Java基础学习之函数式编程Predicate接口(JDK8)

    前言 今天继续来学习函数式编程接口之Predicate接口 1 上源码 package javax persistence criteria import java util List public interface Predicate
  • MyEclipse 服务器Tomcat v8.5无法在45秒内启动

    目录 前言 一 问题描述 二 解决方案 1 图形界面修改 2 配置文件修改 总结 前言 大家在使用 MyEclipse 开发时有遇到过 Tomcat 无法在45秒内启动的问题吗 一 问题描述 由于工作需要 要在 myeclipse 中使用
  • 认知科学和认知神经科学_认知增强的时代到了

    认知科学和认知神经科学 Ever since humans fell out of trees we ve been creating tools to help us survive One of the most important o
  • 浅谈JavaScript如何运行中断或停止

    在js运行过程中 在某些情况下想中断程序的运行 在网上查过 没有找到有这样的函数 一般情况下 大多数都是用return代替的 因为js脚本很多都是基于函数的运行 return的作用是中断函数的执行 提前退出该函数 所以在执行某个函数内部的时
  • Golang学习 - sync 包

    临时对象池 Pool 用于存储临时对象 它将使用完毕的对象存入对象池中 在需要的时候取出来重复使用 目的是为了避免重复创建相同的对象造成 GC 负担过重 其中存放的临时对象随时可能被 GC 回收掉 如果该对象不再被其它变量引用 从 Pool
  • Pycharm怎么去查找替换?Pycharm查找替换快捷方法是什么

    在使用python编辑器pycharm编写代码时 有时候需要去查找一些指定的代码或者是文件进行修改 但是一个个去翻太繁琐了 那这篇文章就来教大家怎么在pycharm中去实现快捷方便的查找替换方法 一起看看吧 1 当前文件 如果要在当前文件内
  • nginx 配置监听多个端口有什么问题

    Nginx 可以通过配置文件监听多个端口 在配置文件中使用 listen 指令来设置监听端口 在多个 listen 指令中使用不同的端口号即可实现监听多个端口 这种方式可以让 Nginx 同时支持 HTTP 和 HTTPS 协议 在配置多个
  • @WebServlet

    一 Servlet简介 Java Servlet 是运行在 Web 服务器或应用服务器上的程序 它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层 B S开发的基础 Servlet