Servlet概念视频笔记

学习地址:121-尚硅谷-Servlet-什么是Servlet_哔哩哔哩_bilibili

目录

1.Servlet技术

a.什么是Servlet

b.手动实现Servlet程序

c.url地址如何定位到Servlet程序去访问

d.Servlet的生命周期

e.GET 和 POST 请求的分发处理

f.通过继承 HttpServlet 实现 Servlet程序

g.使用IDEA创建 Servlet 程序

h.Servlet类的继承体系

2.ServletConfig类

a.ServletConfig 类的三大作用

b.ServletConfig类的补充说明

3.ServletContext类

a.什么是 ServletContext?

b. ServletContext类的四个作用

4.Http协议

a.什么是 HTTP 协议

b.请求的 HTTP 协议格式

      i.GET请求

        ii.POST 请求

        iii.常用请求头说明

         iv.哪些是GET请求,哪些是POST请求

c.响应的 HTTP协议格式

d.常用的响应码说明

e.MIME 类型说明

f.谷歌游览器如何查看HTTP协议​编辑


1.Servlet技术

a.什么是Servlet

 1.是JavaEE规范之一。规范就是接口

 2.Servlet->JavaWeb三大组件之一。三大组件分别是:Servlet程序、Filter程序、Listener监听器。

 3. Servlet是运行在服务器上的一个java小程序,它可以(通过HTTP超文本传输协议)接收客户端发送过来的请求,并响应数据给客户端


b.手动实现Servlet程序

1.编写一个类实现Servlet接口

2.实现service方法处理请求,并响应数据

3.到web.xml中去配置servlet程序的访问地址

<?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"><!--servlet标签给Tomcat配置Servlet程序 --><servlet><!--servlet-name标签 Servlet程序起一个别名(一般是类名)--><servlet-name>HelloServlet</servlet-name><!--servlet-class是Servlet程序的全类名--><servlet-class>com.example.servlet.HelloServlet</servlet-class></servlet><!--servlet-mapping标签给servlet程序配置访问地址--><servlet-mapping><!--servlet-name标签告诉服务器我当前配置的地址给哪个Servlet程序使用--><servlet-name>HelloServlet</servlet-name><!--url-pattern标签配置访问地址(自定义访问路径)/    斜杠在服务器解析的时候,表示地址为: http://ip:port/工程路径     <br/>/hello  表示地址为: http://ip:port/工程路径/hello   <br/>--><url-pattern>/hello</url-pattern></servlet-mapping></web-app>
package com.example.servlet;import java.io.IOException;
import javax.servlet.*;
import javax.servlet.annotation.*;public class HelloServlet implements Servlet{@Overridepublic void init(ServletConfig servletConfig) throws ServletException {}@Overridepublic ServletConfig getServletConfig() {return null;}/*** service方法是专门用来处理请求和响应的* @param servletRequest* @param servletResponse* @throws ServletException* @throws IOException*/@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("Hello Servlet 被访问了");}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {}
}


c.url地址如何定位到Servlet程序去访问


d.Servlet的生命周期

1、执行Servlet构造器方法

2、执行 init 初始化方法

第一、二步,是在第一次访问的时候创建 Servlet 程序会调用

3、执行 service 方法

第三步,每次访问都会调用

4、执行 destroy 销毁方法

第四步,停止的时候才会执行


e.GET 和 POST 请求的分发处理

GET请求

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><form action="http://localhost:8080/Days2_war_exploded/hello" method="get"><input type="submit" ></form></body>
</html>

点击提交后


POST请求

    @Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("3 service === Hello Servlet 被访问了");// 类型转换(因为它有getMethod()方法)HttpServletRequest httpServletRequest=(HttpServletRequest)servletRequest;// 获取请求的方式String method=httpServletRequest.getMethod();System.out.println(method);//        System.out.println("get请求");
//        System.out.println("post请求");}

点击提交按钮之后 

这个得到请求的方式get/post都能搞

 @Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("3 service === Hello Servlet 被访问了");// 类型转换(因为它有getMethod()方法)HttpServletRequest httpServletRequest=(HttpServletRequest)servletRequest;// 获取请求的方式String method=httpServletRequest.getMethod();if("GET".equals(method)){doGet();}else if ("POST".equals(method)){doPost();}}/*** 做get请求的操作*/public void doGet(){System.out.println("get请求");}/*** 做post请求的操作*/public void doPost(){System.out.println("post请求");}

f.通过继承 HttpServlet 实现 Servlet程序

一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet程序

1、编写一个类去继承 HttpServlet 类

2、根据业务需要重写 doGet 或 doPost 方法

3、到 web.xml中的配置 Servlet 程序的访问地址

package com.example.servlet;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class HelloServlet2 extends HttpServlet {/***doGet() 在get请求时调用* @param req* @param resp* @throws ServletException* @throws IOException*/@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("HelloServlet2 的doGet方法");}/***doPost() 在post请求时调用* @param req* @param resp* @throws ServletException* @throws IOException*/@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("HelloServlet2 的doPost方法");}
}
 <servlet><servlet-name>HelloServlet2</servlet-name><servlet-class>com.example.servlet.HelloServlet2</servlet-class></servlet><servlet-mapping><servlet-name>HelloServlet2</servlet-name><url-pattern>/hello2</url-pattern></servlet-mapping>


g.使用IDEA创建 Servlet 程序

package com.example.servlet;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;public class HelloServlet3 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("HelloServlet3的doGet方法");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("HelloServlet3的doPost方法");}
}

h.Servlet类的继承体系

        


2.ServletConfig类

从类名上来看,就知道是 Servlet程序的配置信息类

a.ServletConfig 类的三大作用

1、可以获取Servlet程序的别名servlet-name 的值

2、获取初始化参数 init-param

3、获取ServletContext对象

    @Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("2 init初始化");//获取别名Servlet-name的值System.out.println("HelloServlet程序的别名是:"+servletConfig.getServletName());//获取初始化参数init-paramSystem.out.println("初始化参数username的值:"+servletConfig.getInitParameter("username"));//获取ServletContext对象System.out.println(servletConfig.getServletContext());}


b.ServletConfig类的补充说明

Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用。

Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的ServletConfig 对象。

<servlet><servlet-name>HelloServlet2</servlet-name><servlet-class>com.example.servlet.HelloServlet2</servlet-class><!--init-param是初始化参数--><init-param><!--是参数名--><param-name>username</param-name><!--是参数值--><param-value>root2</param-value></init-param></servlet>

    @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("HelloServlet2 的doGet方法");//也可以使用ServletConfig servletConfig=getServletConfig();System.out.println(servletConfig);//获取初始化参数init-paramSystem.out.println("初始化参数username的值是:"+servletConfig.getInitParameter("username"));}@Overridepublic void init(ServletConfig config) throws ServletException {super.init(config);System.out.println("重写了init初始化方法,做了一些工作");}

这张图解释了写super.init(config)的原因


3.ServletContext类

a.什么是 ServletContext?

1、ServletContext是一个接口,它表示 Servlet 上下文对象

2、一个 web 工程,只有一个 ServletContext 对象实例

3、ServletContext 对象是一个域对象。

什么是域对象?

域对象,是可以像 Map 一样存取数据的对象,叫域对象。

这里的域指的是存取数据的操作范围

                          存数据                        取数据                                删除数据

Map                      put()                         get()                                 remove()

域对象                setAttribute()        getAttribute()                          removeAttribute()


b. ServletContext类的四个作用

1、获取 web.xml 中配置的上下文参数context-param

2、获取当前的工程路径,格式:/工程路径

3、获取工程部署后在服务器磁盘上的绝对路径

4、像 Map 一样存取数据

绝对路径本质是映射这个webapp目录

如果在下面创建了一个css文件,可以在/后面加css->/css访问

package com.example.servlet;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;public class ContextServlet1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {ServletContext servletContext  =getServletContext();System.out.println(servletContext);System.out.println("保存之前: Context1 中获取域数据key1的值是:"+servletContext.getAttribute("key1"));servletContext.setAttribute("key1","value1");System.out.println("Context1 中获取域数据key1的值是:"+servletContext.getAttribute("key1"));}}
package com.example.servlet;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;public class ContextServlet2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {ServletContext servletContext  =getServletContext();System.out.println(servletContext);System.out.println("Context2 中获取域数据key1的值是:"+servletContext.getAttribute("key1"));}}

只要是这个工程,这个Context就永远都是它


4.Http协议

a.什么是 HTTP 协议

所谓 HTTP 协议,就是客户端和服务器端发送请求的数据,需要遵守的规则,叫 HTTP 协议

HTTP 协议中的数据又叫报文


b.请求的 HTTP 协议格式

客户端给服务器端发送数据叫请求

服务器端给客户端回传数据叫响应

请求又分为 GET请求,和 POST   请求两种

      i.GET请求

1.请求行

        (1) 请求的方式                                  GET

        (2)请求的资源路径[+?+请求参数]

        (3)请求的协议的版本号                    HTTP/1.1

2.请求头

       key:value 组成,不同的键值对,表示不同的含义

         

        ii.POST 请求

1.请求行

        (1) 请求的方式                                 POST

        (2)请求的资源路径[+?+请求参数]

        (3)请求的协议的版本号                    HTTP/1.1

2.请求头

       key:value 组成,不同的请求头,表示不同的含义

空行

3.请求体 ===>>> 就是发送给服务器的数据

        iii.常用请求头说明

        Accept:表示客户端可以接受的数据类型

        Accpet-Language:表示客户端可以接受的语言类型

        User-Agent:表示客户端游览器的信息

        Host:表示请求时的服务器 ip 和端口号

         iv.哪些是GET请求,哪些是POST请求

GET请求有哪些:

        1、form标签 method=get

        2、a标签

        3、link标签引入css

        4、Script标签引入 js 文件

        5、img标签引入图片

        6、iframe 引入 html页面

        7、在游览器地址栏中输入地址后敲回车

POST请求有哪些:

        8、form 标签 method=post


c.响应的 HTTP协议格式

        1、响应行

        (1)响应的协议和版本号

        (2)响应状态码

        (3)响应状态描述符

        2、响应头

        (1)key:value 不同的响应头,有其不同含义

        空行

        3、响应体   ----->>>  就是回传给客户端的数据

格林时间距离北京时间差8小时


d.常用的响应码说明

           200                   表示请求成功

           302                   表示请求重定向

           404                   表示请求服务器已经收到了,但是你要的数据不存在(请求地址错误)

           500                  表示服务器已经收到请求了,但是服务器内部错误(代码错误)


e.MIME 类型说明


f.谷歌游览器如何查看HTTP协议

学习如逆水行舟,不进则退。摆烂的小吴!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务架构:解析分布式系统的演进

目录 微服务是什么&#xff1f; 微服务的优势 微服务的挑战 应对微服务挑战的方法 结论 在当今快速发展的软件开发领域&#xff0c;微服务架构成为一种备受瞩目的设计理念&#xff0c;被广泛应用于构建灵活、可扩展的分布式系统。本文将深入探讨什么是微服务&#xff0c;为…

论文阅读:“Appearance Capture and Modeling of Human Teeth”

文章目录 AbstractIntroductionMethod OverviewTeeth Appearance ModelEnamelDentinGingiva and oral cavity Data AcquisitionImage captureGeometry capture ResultsReferences Abstract 如果要为电影&#xff0c;游戏或其他类型的项目创建在虚拟环境中显示的人类角色&#…

模糊C均值(Fuzzy C-means,FCM)聚类的可运行的python程序代码,复制即可用!!切记需要安装库 scikit-fuzzy

文章目录 前言一、安装库 scikit-fuzzy二、具体程序代码&#xff08;复制可运行&#xff09;三、结果展示总结 前言 模糊C均值&#xff08;Fuzzy C-means&#xff0c;FCM&#xff09;聚类是一种软聚类方法&#xff0c;它允许数据点属于多个聚类&#xff0c;每个数据点对所有聚…

Matlab 点云线性指数计算(加权)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 思路其实很简单,即对每个邻近点集中的点,根据其到点集中心的距离进行加权处理(权重函数),之后再基于加权之后的点获取其协方差矩阵,最后再求取其相关的特征值,以此来获取该点的线性指数。相关公式如下所示:…

IntelliJ IDEA安装使用教程

IntelliJ IDEA是一个流行的Java 集成开发环境&#xff08;IDE&#xff09;&#xff0c;由JetBrains公司开发。它是一款全功能的IDE&#xff0c;支持多种编程语言&#xff0c;如Java、Kotlin、Groovy、Scala、Python、JavaScript、HTML、CSS等等。IntelliJ IDEA 提供了高效的代码…

docker-compose脚本编写及常用命令

安装 linux DOCKER_CONFIG/usr/local/lib/docker/cli-plugins sudo mkdir -p $DOCKER_CONFIG/cli-plugins sudo curl -SL https://521github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose sudo c…

AntDB“超融合+流式实时数仓”——颠覆50年未变的数据库内核

流式处理引擎&#xff0c;颠覆50年未变的数据库内核 流式处理的概念 2001年9月11日&#xff0c;美国世贸大楼被袭击&#xff0c;美国国防部第一次将“主动预警”纳入国防的宏观战略规划。而IBM作为当时全球最大的IT公司&#xff0c;承担了大量基础支撑软件研发的任务。其中200…

2021年11月10日 Go生态洞察:Twelve Years of Go

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

计算机网络:快速了解网络框架

文章目录 前言一、什么是Internet&#xff1f;1.从具体构成角度什么是协议&#xff1f; 2.从服务角度3小结 二、网络边缘1.采用网络设施面向连接服务&#xff08;TCP&#xff09;2.采用基础设施的无连接服务&#xff08;UDP&#xff09; 三、网络的核心1.电路交换2.分组交换3.分…

软件工程 - 第8章 面向对象建模 - 2 静态建模

静态建模&#xff08;类和对象建模&#xff09; 类和对象模型的基本模型元素有类、对象以及它们之间的关系。系统中的类和对象模型描述了系统的静态结构&#xff0c;在UML中用类图和对象图来表示。 类图由系统中使用的类以及它们之间的关系组成。类之间的关系有关联、依赖、泛…

Google Chrome 下载 (离线版)

1 访问网址 Google Chrome 网络浏览器 2 点击 下载Chrome 3 直接运行 ChromeStandaloneSetup64.exe 其他&#xff1a; ####################### 谷歌浏览器 (Google Chrome) 最新版离线安装包下载 https://www.iplaysoft.com/tools/chrome/#google_vignette Google Chrome …

【译】Spring 6 入参数据校验: 综合指南

原文地址&#xff1a;Spring 6 Programmatic Validator: A Comprehensive Guide 一、前言 在 Spring 6.1 中&#xff0c;有一个非常值得注意的重要改进——编程式验证器实现。Spring 长期以来一直通过注解支持声明式验证&#xff0c;而 Spring 6.1 则通过提供专用的编程式验证…

kafka学习笔记(一)--脑裂

我知道你想裂&#xff0c;但你先别裂 目录 脑裂Kafka脑裂实验Kafka如何防止脑裂--Leader Epochepoch的局限性ISR列表ISR列表的伸缩机制 脑裂 用集群部署的大多数的分布式系统无可避免会面临脑裂问题。简单来说&#xff0c;脑裂就是在同一时刻出现了两个“Leader&#xff08;或…

Vue+Element-ui实例_在form中动态校验tag标签

1.开发需求 在日常开发中&#xff0c;我们会遇到form表单的动态添加和校验&#xff0c;当我们需要在动态添加的内容中再次动态使用输入框的时候&#xff0c;就会变得很繁琐&#xff0c;我在网上找了很多案例&#xff0c;没有符合自己需求的内容&#xff0c;只好闲暇时间自己搞…

css加载会造成阻塞吗??

前言 前几天面试问到了这个问题&#xff0c;当时这个答得不敢确定哈哈&#xff0c;虽然一面还是过了 现在再分析下这个&#xff0c;总结下&#xff0c;等下次遇到就能自信得回答&#xff0c;666 准备工作 为了完成本次测试&#xff0c;先来科普一下&#xff0c;如何利用chr…

【开源】基于Vue和SpringBoot的农家乐订餐系统

项目编号&#xff1a; S 043 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S043&#xff0c;文末获取源码。} 项目编号&#xff1a;S043&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户2.2 管理员 三、系统展示四、核…

Peter算法小课堂—差分与前缀和

差分 Codeforces802 D2C C代码详解 差分_哔哩哔哩_bilibili 一维差分 差分与前缀和可以说成减法和加法的关系、除法和乘法的关系、积分和微分的关系&#xff08;听不懂吧&#xff09; 给定数组A&#xff0c;S为A的前缀和数组&#xff0c;则A为S的差分数组 差分数组构造 现…

openbabel 安装 生成指纹方法

今日踩坑小结&#xff1a; openbabel 安装&#xff1a; 可以装&#xff0c;但是得在 Linux 环境下&#xff0c;win 环境装会报错&#xff08;安装不会报错&#xff0c;但是生成指纹的时候会&#xff09; 指纹&#xff1a; 在下面这个链接里&#xff0c;官方给出了命令行调用 o…

这几款 idea 插件让效率起飞!

作者&#xff1a;苍何&#xff0c;前大厂高级 Java 工程师&#xff0c;阿里云专家博主&#xff0c;CSDN 2023 年 实力新星&#xff0c;土木转码&#xff0c;现任部门技术 leader&#xff0c;专注于互联网技术分享&#xff0c;职场经验分享。 &#x1f525;热门文章推荐&#xf…

Vue3-toRaw 和 markRaw 函数

Vue3-toRaw 和 markRaw 函数 toRaw(转换为原始)&#xff1a;将响应式对象转换为普通对象&#xff0c;只适用于 reactive 生成的响应式对象。markRaw(标记为原始)&#xff1a;标记某个对象&#xff0c;让这个对象永远都不具备响应式。一些集成的第三方库&#xff0c;会有大量的…