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.mzph.cn/news/189712.shtml

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

相关文章

如何在财税行业查找批量客户?

现在市场上代记账公司也不算少&#xff0c;做过这行的都知道&#xff0c;最初呢行业竞争不强&#xff0c;都是靠地推、老客户转介绍&#xff0c;或者长期以往的蹲守各个地区的工商注册服务中心&#xff0c;找那些才注册企业的老板或者创业者。但是&#xff0c;随着市场经济的发…

Python+Requests模块_设置代理、超时设置、重定向设置

设置代理 代理&#xff08;英语&#xff1a;Proxy&#xff09;&#xff0c;也称网络代理&#xff0c;是一种特殊的网络服务&#xff0c;英文全称是&#xff08;Proxy Server&#xff09;&#xff0c;其功 能就是代理网络用户去取得网络信息。形象的说&#xff1a;它是网络信息…

[每周一更]-(第75期):Go相关粗浅的防破解方案

Go作为编译语言&#xff0c;天然存在跨平台的属性&#xff0c;我们在编译完成后&#xff0c;可以再不暴露源代码的情况下&#xff0c;运行在对应的平台中&#xff0c;但是 还是架不住有逆向工程师的反编译、反汇编的情形&#xff1b;&#xff08;当然我们写的都不希望被别人偷了…

国内高速下载huggingface上的模型

目录 前言 modelscope huggingface安装 Windows设置环境变量 Linux设置环境变量 设置国内镜像 Windows&#xff08;cmd.exe&#xff09; 当前窗口有效 永久生效 Linux 当前窗口有效 永久生效 下载模型 前言 国内优先使用modelscope&#xff0c;hugging face镜像站下载…

MySQL字符函数

在数据库中&#xff0c;字符函数是一组用于处理字符串的函数。这些函数可以帮助我们执行各种操作&#xff0c;如连接、比较、替换等。本文将介绍一些常用的MySQL字符函数&#xff0c;并演示如何在查询中使用它们。 1.concat() 函数 CONCAT() 函数用于连接两个或多个字符串。它…

【C/PTA —— 13.指针2(课内实践)】

C/PTA —— 13.指针2&#xff08;课内实践&#xff09; 一.函数题6-1使用函数实现字符串部分复制6-2 拆分实数的整数部分和小数部分6-3 存在感 二.编程题7-1 单词反转 一.函数题 6-1使用函数实现字符串部分复制 void strmcpy(char* t, int m, char* s) {int len 0;char* ret …

【C/PTA —— 13.指针2(课外实践)】

C/PTA —— 13.指针2&#xff08;课外实践&#xff09; 一.函数题6-1 鸡兔同笼问题6-2 冒泡排序6-3 字符串反正序连接6-4 计算最长的字符串长度6-5 查找星期 二.编程题7-1 C程序设计 实验5-7 数组指针作函数参数7-2 查找奥运五环色的位置 一.函数题 6-1 鸡兔同笼问题 int Chic…

CSS新手入门笔记整理:CSS图片样式

图片大小 语法 width:像素值; height:像素值; 图片边框&#xff1a;border 语法 边框&#xff1a;宽度值 样式值 颜色值&#xff1b; border:1px solid red; 图片对齐 水平对齐&#xff1a;text-align 语法 text-align:取值; 属性值 说明 left 左对齐(默认值) cent…

csp 现值计算 C语言

号&#xff1a; 202212-1 试题名称&#xff1a; 现值计算 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 512.0MB 问题描述&#xff1a; 问题描述 评估一个长期项目的投资收益&#xff0c;资金的时间价值是一个必须要考虑到的因素。简单来说&#xff0c;假设…

Unittest(1):unittest单元测试框架简介setup前置初始化和teardown后置操作

unittest单元测试框架简介 unittest是python内置的单元测试框架&#xff0c;具备编写用例、组 织用例、执行用例、功能&#xff0c;可以结合selenium进行UI自动化测 试&#xff0c;也可以结合appium、requests等模块做其它自动化测试 官方文档&#xff1a;https://docs.pytho…

JS逆向-mytoken之code参数

前言 本文是该专栏的第60篇,后面会持续分享python爬虫干货知识,记得关注。 本文以mytoken为例,通过js逆向获取其code参数的生成规律。具体的“逆向”思路逻辑,笔者将会详细介绍每个步骤,并且将在正文结合“完整代码”进行详细说明。 接下来,跟着笔者直接往下看正文详细…

OpenOffice 4.1.14的安装以及与数据库进行连接

起因&#xff1a;因为MS Office的Access只能和自家的数据库连接&#xff0c;感觉不太舒服&#xff0c;因此尝试使用Openoffice组件中的Base进行替换。这里记录一下从安装到进行数据库连接的过程。 1.下载地址 https://www.openoffice.org/download/index.html 我这里是Debian1…

(C++)三数之和--双指针法

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 算法原理 双指针法&#xff0c;不一定是说就要使用指针&#xff0c;只是一种形象的说法&#xff0c;在数组中&#xff0c;我们一般将数组下标当做指针。我们首先对数组进行排序&#xff0c;从左向右标定一个下标i&#xff0…

CentOS7根分区扩容之二

Centos根分区快接近100%&#xff0c;如果根分区是逻辑卷&#xff0c;那么可以增加额外的磁盘&#xff0c;通过逻辑卷扩容的方式增加到根分区空间。 1.检查当前根分区大小 df -Th2.检查额外的磁盘 3.把磁盘格式化为lvm类型的文件分区。 [rootlocalhost ~]# fdisk /dev/sdb We…

数据结构:带头双向循环链表的实现

引言 单链表存在缺陷&#xff1a;需要从头开始找前一个节点 解决方法&#xff1a;双向链表 链表的结构&#xff08;8种&#xff09;&#xff1a; 1. 单向&#xff0c;双向 2. 带头、不带头 带头即为带哨兵位的头节点&#xff0c;第一个节点不存储有效数据。带头节点&#…

leetcode刷题详解—— 环形子数组的最大和

1. 题目链接&#xff1a;918. 环形子数组的最大和 2. 题目描述&#xff1a; 给定一个长度为 n 的环形整数数组 nums &#xff0c;返回 nums 的非空 子数组 的最大可能和 。 环形数组 意味着数组的末端将会与开头相连呈环状。形式上&#xff0c; nums[i] 的下一个元素是 nums[(…

VUE语法-(readonly的用法)将数据设置成只读模式

1、功能概述 在Vue中定义一个变量&#xff0c;这个变量的值不允许被修改&#xff0c;核心是通过readonly设置成只读。 如果不会使用ref和reactive响应式数据参考如下博客&#xff1a; https://blog.csdn.net/tangshiyilang/article/details/134701103 2、具体实现 如下案例…

迭代器 iterator

一、什么是 iterator? C中&#xff0c;iterator也被称为迭代器&#xff0c;其主要作用就是指向并访问容器中的元素&#xff0c;其像指针但不是指针。 PS&#xff1a; begin()函数返回一个指向容器第一个元素的迭代器&#xff1b;end()函数返回一个指向容器最后一个元素之后位…

红队攻防实战之某商城Getshell

此后如竟没有炬火&#xff0c;我便是唯一的光 信息收集 端口扫描 nmap -T4 -A -p 1-65535 可以看到目标系统开放22、80、888、3306、8800端口 敏感文件扫描 http:///admin/login.html 后台登陆地址泄露 漏洞挖掘 phpinfo信息泄露 phpinfo信息泄露&#xff0c;此站为Linu…

【笔记】2023最新Python安装教程(Windows 11)

&#x1f388;欢迎加群交流&#xff08;备注&#xff1a;csdn&#xff09;&#x1f388; ✨✨✨https://ling71.cn/hmf.jpg✨✨✨ &#x1f913;前言 作为一名经验丰富的CV工程师&#xff0c;今天我将带大家在全新的Windows 11系统上安装Python。无论你是编程新手还是老手&…