当前位置: 首页 > news >正文

JAVAWeb_Servlet:前置准备与理论简易介绍

要写JAVA_Web:首先就得建个项目——如何在Eclipse新建一个Web项目-CSDN博客

然后我们考虑具体的代码细节(接下来就是我们的前置准备)

一、导包:

在 Eclipse 中,如果需要快速导入缺失的包(例如,当你使用了一个类但没有导入对应的包时),可以使用以下快捷键:

  • Windows/LinuxCtrl + Shift + O(注意这是字母o)

  • MacCommand + Shift + O

二、Servlet是何物

这里所说的“servlet”是我们自己要写的servlet.java文件。而“Servlet”我们也会相应引出,注意区分。

咱们先看看Eclipse自动生成的servlet代码模板:这是在这篇文章创建的Web项目

这便是一个自己定义的servlet:当然现在只是自动生成的模板代码,我们需要根据自己的需求去改代码。

先来看“文件名和包” 这部分:1)可以看到这个servlet叫什么? firstServlet.java。

JAVA文件,没错,我们自己的servlet其实就是JAVA类。

导包”在第一大点里说了如何迅速导包,我们是简易理论(主打短小精悍)

再接着看"具体代码"部分:2)既然servlet是JAVA类,为什么不同于其他JAVA代码有一个main方法作为程序入口?而是写了个类名(同文件名一样)直接继承了HttpServlet?

一个一个来:

为什么没有main方法? 有main方法其实意味着可以独立运行(依靠JVM),Servlet没有main方法其实说明它不需要独立运行。它依赖于 Web 容器来接收和处理请求。至于Web容器是什么,我们这里简单说说。不然就把线拉得太远了,虽然简易,相信你看完也会觉得明了不少。

Web容器:它是一个运行在服务器端的软件,负责管理 Servlet 和 JSP 页面的生命周期,提供运行时环境,处理客户端的HTTP 请求。

从这句话,就可以看出servlet与Web容器的关系:

服务器端往往有很多资源,吸引着不少客户端前来访问。客户端往往会提出请求,为了识别请求于是设立一个HTTP协议(协议,意味着只有懂得才懂,俗称加密通话)。所以客户端发送的请求,就是HTTP请求,服务器响应的内容,就叫HTTP响应。 

 服务器这边有个能干的Web容器,它把客户发来的HTTP请求收下来了。给服务器端保证:“保证处理请求”。

 Web容器怎么处理请求呢?其实它并非直接处理请求,而是将请求分发到相应能处理这个具体功能的servlet。是的,因为servlet们专业能力很强,就是缺乏运行环境,处理客户请求的机会。(所有的servlet就可以在JAVA里抽象成一个类)

因此,Web 容器的主要作用是提供一个运行时环境,用于加载、初始化、管理和销毁 servlet。它还负责将 HTTP 请求分发给正确的 servlet,并将 servlet 的响应发送回客户端。这样,servlet 就可以专注于处理业务逻辑,而无需关心 HTTP 协议的细节或服务器的底层实现。

但是,servlet哪来那么强的业务逻辑?没错,是偶们写的代码逻辑。为了更快让自己写的Servlet类上手,JAVA定了一个叫“Servlet”接口:这个接口统一规定了所有Servlet类必须实现的方法。我们写的Servlet类通常都需要去实现这个接口。

常见的Web容器:我们配置的Tomcat Jetty、Resin、WebLogic 和 WebSphere

收束时间线:

  • servlet之所以没有main方法:

1. 由 Web 容器管理:servlet 的生命周期由 Web 容器(如 Tomcat)管理,而不是由 JVM 直接启动。

2.不需要独立运行:servlet 是一个服务器端组件,不需要独立运行。它依赖于 Web 容器来接收和处理请求。

  • 而servlet在具体代码编写时,要继承HttpServlet类的原因:

刚刚说,我们写的Servlet类要实现JAVA类的Servlet接口,但是在处理HTTP请求时,需要实现的方法也只有几个,其他方法用不到,但是规定又要让我们实现,这可如何是好:

HttpServlet类是一个抽象类,实现了JAVA类的Servlet接口——也提供了处理 HTTP 请求的基本方法,如 doGetdoPost。于是,我们既要实现Servlet接口,又想要HttpServlet类的处理 HTTP 请求的基本方法。怎么办? 继承HttpServlet类。只要继承,我们就可以既满足规定,又拿到我们想要的方法。

public class firstServlet extends HttpServlet
{

}

总结一下:

Servlet是何物?Servlet 是一个接口:定义了所有 Servlet 必须实现的方法。其中我们编写的Servlet类于是就要遵从这个规定(必须实现JAVA里Servlet这个接口的方法),也要处理相应请求(HTTP请求)编写相应请求的方法,所以只需继承HttpServlet这个抽象类

因为HttpServlet类本身就实现了Servlet接口,我们只需改写需要改写的部分就行。

 三、HttpServlet要实现哪些方法

我们仔细看“代码部分”:

既然继承了父类,我们这里显示调用了super(),它用于调用父类的构造函数。这里它会明确地调用父类的无参构造函数来初始化我们的firstServlet类。如果我们不写可以吗?可以。(哈哈,是的,可以)因为我们并没有打算初始化传参,或执行初始化的其他逻辑。

这里涉及到JAVA中什么时候显式调用super(),这里就不多说。一般都不用写,后期如果学习到要显示调用,我们会深入探讨此点。

所以,真正关注的代码是以下两个方法:关注,就是要熟练掌握

public class firstServlet extends HttpServlet
{
    protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException
    {}
    protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException
    {}
}

两个方法都是受保护的:且你可以发现二者的参数是惊人的相似:

传入的参数:HttpServletRequest request表示客户端发送的请求对象,包含请求的所有信息,如请求参数、请求头、请求方法等。HttpServletResponse response:表示服务器返回给客户端的响应对象,用于设置响应的内容类型、状态码、响应头等,并向客户端发送响应内容。

JAVA嘛,万物皆可类。对于请求,我们打包成一个类,对于响应的信息,我们也可以打包成一个类返还。

最后返回值都是void。

且都要抛出两种异常:ServletException和IOException。如果有兴趣想了解异常的读者可以去看看我之前的文章,作者之前写过相关文章(害羞😳),当然后面我们会结合需求聊聊这方面。

1. doGet 方法

doGet方法用于处理 HTTP GET 请求。GET 请求通常用于获取资源,例如加载网页或查询数据。

2.doPost 方法

doPost方法用于处理 HTTP POST 请求。POST 请求通常用于提交数据,例如表单提交、文件上传等。也就是说:doPost可以处理用户提交的表单数据,上传的文件。

接下来的文章,我们就会核心关注这三件事——然后在实现小项目中,体会doGet和doPost~

四、@WebServlet 注解

这句话就是@WebServlet注解。它是什么?在做什么,为何要注解这样一句代码?

作用:指定客户端可以通过哪个 URL 访问该 Servlet。

注:URL:统一资源定位符。URL 是互联网上资源的地址,也就是这块:

完整的URL: 

协议://主机名:端口号/路径?查询字符串#锚点

比如:我运行firstServlet.java文件后

分析URL: 

http://localhost:89/BearOnToilet/firstServlet
协议:http
主机名:localhost
端口号:89
路径:/BearOnToilet/firstServlet

 其实之所以能运行firstServlet.java文件就能访问到我的firstServlet,是因为前面在firstServlet.java里注释了这一句@WebServlet(“/firstServlet”)。

有人问了:如果路径名和对应的Servlet名字不同,还能映射嘛?

这里我将firstServlet的URL映射路径改成“hehehehehe” ,我们运行一下该.java文件,看看什么结果:

打印的语句还是一样的,说明访问到了firstServlet.java这个Servlet,但是注意看它的URL:

是不是对应上了,说明我们要访问一个servlet,在搜索框里填的就是该servlet的url映射路径也就是@WebServlet括号里的部分;而非该Servlet的名字。 

  • @WebServlet注解是什么
@WebServlet("\......")
//省略号填写Servlet映射的路径
  •  @WebServlet作用

1.定义 Servlet 的 URL 映射:指定客户端可以通过哪个 URL 访问该 Servlet

2.替代 web.xml 配置:在 Java Servlet 3.0 之前,Servlet 的配置通常需要在 web.xml 文件中手动定义。(我们现在感受不到,所以重点理解第一点)

  • 为何要注解这一句话:

其实这个问题本质还是在问@WebServlet作用,我们这次精炼概括一下:给相应的Servlet编个路径,方便访问。

本节重点:

@WebServlet("\...")
public class ... extends HttpServlet
{
    protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException IOException
{} 
    protected void doPost(HttpServletRequest request,HttpServletResponse response) throws
ServletException IOException
{}
}

理解:

用户端通过servlet的映射路径访问该servlet。用户的访问——即我们所说的“请求”。

http://www.dtcms.com/a/121696.html

相关文章:

  • input_ids ,attention_mask 是什么
  • js解除禁止复制、禁止鼠标右键效果
  • 阿里发布实时数字人项目OmniTalker,实时驱动技术再突破~
  • json 转 txt 用于 yolo 训练(可适用多边形标注框_python)
  • HOW - React Developer Tools 调试器
  • SpringBoot和微服务学习记录Day1
  • 决策树+泰坦尼克号生存案例
  • 强化学习原理一
  • 本地部署 opik
  • 卡码网54.替换数字
  • 紫光展锐5G SoC T8300:影像升级,「定格」美好世界
  • 用户画像(https://github.com/memodb-io/memobase)应用
  • 神经网络 - 关于简单的激活函数的思考总结
  • Java-对比两组对象找出发生变化的字段工具-支持枚举映射-支持时间-支持显示对应字段中文描述-嵌套list等场景
  • 淘宝API接口:淘宝API接口概述以及对开发者的具体帮助
  • SSRF漏洞技术解析与实战防御指南
  • 【Git 常用操作指令指南】
  • 汽车车窗升降系统全生命周期耐久性验证方案研究
  • Git 的进阶功能和技巧
  • git强制更新本地分支
  • TryhackMe WhatsYourName:题解
  • 都江堰与郑国渠
  • TQTT_KU5P开发板教程---文件的烧写与程序固化
  • 奇安信驻场面试题
  • 三轴云台之惯性测量单元篇
  • SomeIP通讯机制
  • B-tree 的原理源码分析及应用场景等
  • 决策树模型
  • 2025年CCF-C NCA:导航变量多目标粒子群算法NMOPSO,深度解析+性能实测
  • AI时代如何让命令行工具快速智能化?