Servlet总结(未完待续)

news2024/11/19 5:39:11

Servlet总结

    • 一. 简介
    • 二. Servlet执行流程
    • 三. 生命周期
    • 四. 体系结构
    • 五. urlPattern配置
      • 匹配规则
    • 六. Request和Response
      • 1. Request
        • 1.1 Request继承体系
        • 1.2 Request获取请求数据API
        • 1.3 通用方式获取请求参数
        • 1.4 通用方式中文乱码解决
        • 1.5 Request请求转发
      • 2.1 Response

一. 简介

Servlet是Java的一种动态的 web资源开发技术;

Servlet是JavaEE的规范,也是一套接口,由开发人员去定义接口的是实现类;

二. Servlet执行流程

Servlet在Web项目中;
然后将Web项目发布在Tomcat服务器中;
右键点击module→run maven: tomcat7,然后通过浏览器输入url就能访问Servlet;

url在这里插入图片描述

分别是Tomcat路径、Web项目路径(可通过 隐藏)、Servlet路径;

三. 生命周期

Servlet 运行在Servlet的容器(Web服务器如Tomcat)中,其生命周期由容器来管理:

  1. 加载和实例化(默认情况下),当Servlet第一次被访问时,由容器创建Servlet对象

  2. 初始化:在Servlet实例化后,容器使用 inti() 方法初始化这个Servlet对象,完成加载配置、创建链接等工作。 init()方法只被调一次;

  3. 请求处理:请求每次Servlet时,Servlet容器都会调用 service() 方法进行处理!

  4. 服务终止:当需要释放内存或者关闭容器时,容器会调用servlet对象的 destroy() 方法完成资源的释放!而后容器会释放servlet对象,其会被GC回收。

注意:

  1. 加载和实例化:可以提前实例化Servlet对象,通过 loadOnStartup 参数即可:
    在这里插入图片描述

  2. 初始化:只会执行一次init()用于初始化!
    修改时间:通过修改loadOnStartup属性修改Servlet对象被创建的时间,也就修改了init()被调用的时间;
    loadOnStartup默认是-1,设置为正整数就会在Tomcat服务器启动时就创建Servlet并执行init()方法!

  3. 请求处理:service()被调用的时间:每一次Servlet被访问时!
    service()被调用的次数:多次

  4. 服务终止:正常关闭: Ctrl+c,这样会执行destroy()方法!
    destroy() 被调用次数:一次
    红色停止是关闭进程!不会执行destroy() !在这里插入图片描述

四. 体系结构

在这里插入图片描述

将来开发B/S架构的web项目,都是针对HTTP协议
所以自定义的Servlet要继承 HttpServlet ,并重写doGetdoPost方法;
httpservlet实际上是简化了servlet的操作;

在这里插入图片描述

问题1:HttpServlet为什么根据请求方式的不同,调用不同方法?
因为get方式提交的参数在请求行中,和url一起
post方式提交的参数在请求体中,更安全!
所以根据不同的方式请求,而分别处理!

问题2:如何调用?
①写一个类继承HttpServlet
②重写doGet()doPost()方法;

五. urlPattern配置

在这里插入图片描述

urlPatten就是Servlet的访问路径;也是表单提交的路径 action
在这里插入图片描述
早期使用XML配置路径,新版本使用@注解来访问!

Servlet要被访问,必须配置访问路径即urlPatten;
注意访问路径要从 / 开始!

一个Servlet可以配置多个urlParttern
在这里插入图片描述

匹配规则

在这里插入图片描述

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

DefaultServlet为 / 即Tomcat默认的Servlet,是用来处理静态资源的!
而如果使用任意配置 “/”,就会覆盖默认的Servlet!默认的Servlet就不生效了,那么静态资源就没法访问了!
所以一般不用④任意匹配。

六. Request和Response

request和response是Servlet()方法的参数,
在这里插入图片描述

HTTP的请求就是字符串,会被 Tomcat 解析,解析完成之后,被放到request对象中保存
通过request对象可以获取用户请求的数据,以此进行逻辑判断 !
(即Tomcat解析HTTP请求数据 ,封装为request对象,并且创建request对象,传递到service方法中;

响应的字符串被放到response对象,将来通过response对象来设置响应的数据,然后由 Tomcat 将数据拼成HTTP响应报文格式的字符串,返回给浏览器(客户端);

1. Request

1.1 Request继承体系

在这里插入图片描述
如果自定义Servlet类实现的是Servlet,则参数是ServletRequest
在这里插入图片描述
如果自定义Servlet类实现的是HttpServlet,则参数是HttpServletRequest
在这里插入图片描述

使用:
将来使用request对象,查阅JavaEE API文档的HttpServletRequest接口!

1.2 Request获取请求数据API

在这里插入图片描述
在这里插入图片描述
参数为请求头名称;

在这里插入图片描述

总结:GET通过getQueryString()方法获取参数,POST通过输入流的方式获取参数(doPost()中);

1.3 通用方式获取请求参数

doGet()和doPost() 只有请求参数(只有POST才有请求头)不一样,其他都一样---------------- 这会导致代码重复;

在这里插入图片描述
大部分时候,参数只有一个value;

方法:
将重复的部分写到doGet()方法内,而doPost() 方法中写:this.doGet(HttpServletRequest,HttpServletResponse)
在这里插入图片描述

1.4 通用方式中文乱码解决

POST:
底层获取参数是getReader()方法,即流的方式,默认编码是ISOiso8859-1,改成UTF-8即可:
在这里插入图片描述

GET:
底层是getQueryString()方法,
浏览器不支持中文,会将中文转换成URL编码,
Tomcat接收到数据会进行URL解码,而在编码时中文是UTF-8编码的,而Tomcat默认是默认编码是ISOiso8859-1,

在这里插入图片描述
解决:
由于字节是一样的,可以将将url先解码,然后获取解码后的decode字节byte数组,然后再转换成中文;
在这里插入图片描述
在这里插入图片描述
主要是后两步,先编码为byte[]数组,再用utf-8解码为中文!

1.5 Request请求转发

是Request提供的特殊功能,一种在服务器内部的资源跳转方式,可以完成资源之间的跳转;
在这里插入图片描述

方法:
在资源A中使用Request对象的方法,参数资源B路径和资源A的Request、Response对象:
在这里插入图片描述
一般转发时多个资源间要数据共享,一般将数据存到Request对象中去:
在这里插入图片描述
总结转发的特点:
1.浏览器地址不发生变化
2.只能转发当前服务器的内部资源,即资源A和资源B在同一个Web服务器中
一次请求,可以在转发的资源间使用request对象共享数据;

2.1 Response

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

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

相关文章

轻量级 Java 权限认证框架——Sa-Token

Sa-Token 介绍 Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。 Sa-Token最新开发文档地址:https://sa-token.cc Sa-Token功能结构图…

MySQL最左匹配原则

说到最左匹配原则,我们还得先从组合索引说起。 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS user; CREATE TABLE user (id int(5) NOT NU…

【Java AWT 图形界面编程】LayoutManager 布局管理器 ⑥ ( BoxLayout 布局 )

文章目录一、BoxLayout 布局二、BoxLayout 布局 API三、BoxLayout 布局代码示例1、BoxLayout 布局垂直排列代码示例2、BoxLayout 布局水平排列代码示例一、BoxLayout 布局 BoxLayout 布局 不是 AWT 中的布局 , 而是 Swing 中引入的 ; 在 BoxLayout 布局 中 , 可以 在 垂直 和 …

[Effective Objective] 对象、消息、运行期

对象:“对象”(object)就是“基本构造单元”(building block),开发者可以通过对象来储存并传递数据。 消息:在对象之间传递数据并执行任务的过程就叫做“消息传递”(Messaging)。 运行期&…

最粗暴的方法实现一个栈

对于栈和队列是一个很简单的知识,用的感觉也不是很多,但是,我们仍然的学习!!加油!!在实现最简单的栈之前,我们需要简单了解一下栈是什么??栈(stac…

iplatform平台简介

前置条件:原则规范一)统一技术栈1)关于JDK统一使用Open JDK,版本最低1.8,几年后可能会升级到17;避免使用Sun JDK,这是商业软件,而且包含部分私有(com.sun)类库…

pandas 实战:分析三国志人物

简介 背景 Pandas 是 Python 的一个工具库,用于数据分析。由 AQR Capital Management 于 2008 年 4 月开发,2009 年开源,最初被作为金融数据分析工具而开发出来。Pandas 名称来源于 panel data(面板数据)和 Python d…

基于SEIR模型的传染病预测软件开发(完整代码+数据集+报告)

1 操作页面及用户使用说明(1) 界面说明App页面主要分为4个区域,分别是:曲线显示区、模型初始化和预防参数设定区、传染病特征参数设定区、绘图控制区。① 曲线显示区:显示模型预测的不同人数量随时间的变化曲线。② 模型初始化和预防参数设定…

泛函分析中的向量空间

一、向量空间背景 (1) 具有如下点内积或标量内积的实数域RRR上的欧式空间RNR^NRN: ⟨u,v⟩uTvu0v0u1v1⋯uN−1vN−1∑i0N−1uivi\langle\boldsymbol{u}, \boldsymbol{v}\rangle\boldsymbol{u}^{\mathrm{T}} \boldsymbol{v}u_{0} v_{0}u_{1} v_{1}\cdotsu_{N-1} v_{…

SpringCloud-Netflix学习笔记——微服务和微服务架构

一、什么是微服务? 什么是微服务?微服务(Microservice Architecture)是近几年流行的一种架构思想,关于它的概念很 难一言以蔽之。究竟什么是微服务呢?我们在此引用 ThoughtWorks 公司的首席科学家 Martin F…

谷粒商城-高级篇-Day11-商城业务

文章目录整合thymeleaf渲染页面页面修改不重启服务器实时更新渲染二三级数据nginx-搭建域名访问环境一nginx-搭建域名访问环境二整合thymeleaf渲染页面 将index放到product的资源下的static目录&#xff0c;index.html放到templates文件夹下 导入thymeleaf <!-- 模板引擎…

【Acwing寒假2023每日一题】4700. 何以包邮?- 01背包dp至少模板

4700. 何以包邮&#xff1f; - AcWing题库 设满x元包邮&#xff0c;题目要求总价值至少x的最小价值 目录 1、一维 01背包-至少模板 至少模板和至多模板的两大区别 2、二分 二维 01背包-至多模板 &#xff08;1&#xff09;二维dp 3、逆向思维 一维 01背包-至多模板 1…

1.环境搭建 创建spring boot 项目(mac)

1.安装maven 首先你需要在maven官网上下载mac专用的二进制maven压缩包。也就是下图的这个&#xff1a; 然后&#xff0c;开始我们的配置。 1、打开终端&#xff0c;输入这个代码&#xff1a; vim ~/.bash_profile 2、然后点击键盘上的“i”&#xff0c;进入vim编辑模式&…

【BBuf的CUDA笔记】五,解读 PyTorch index_add 操作涉及的优化技术

本文把pytorch index_add算子的代码抽取出来放在&#xff1a;https://github.com/BBuf/how-to-optim-algorithm-in-cuda/blob/master/indexing/index_add_cuda_pytorch_impl.cu 。如果不太熟悉PyTorch的话也可以直接看这个.cu文件&#xff0c;有问题请在这个repo提issue。 0x0.…

2022,我感受到了CSDN不平凡

最初注册CSDN&#xff0c;只是因为老师的要求&#xff0c;负责教C课程的老师让同学们注册CSDN&#xff0c;并经常更新自己的博客。虽然注册了CSDN的博客&#xff0c;也写了几篇博客文章&#xff0c;可最初我并不理解老师为什么要让我们注册&#xff0c;可是随着在CSDN驻留时间的…

运行时数据区

目录 一、概述 1.1、数据区 1.2、JAVA线程数据区 二、线程 2.1、JVM线程概述 2.2、JVM系统线程 三、PC寄存器 3.1、寄存器概述 3.2、作用 3.3、常见问题 一、概述 1.1、数据区 内存是非常重要的系统资源&#xff0c;是硬盘和CPU的中间仓库及桥梁&#xff0c;承载着操…

vulnhub DC系列 DC-5

总结&#xff1a; 下载地址 DC-5.zip (Size: 521 MB)Download: http://www.five86.com/downloads/DC-5.zipDownload (Mirror): https://download.vulnhub.com/dc/DC-5.zip使用方法:解压后&#xff0c;使用vm直接打开ova文件。 漏洞利用 信息收集 这里还是使用DC-1的方法 1.给靶…

AR Foundation

AR Session 在一个AR应用中有且只允许存在一个AR Session 包括两个组件 &#xff1a;AR Session &#xff08;用于管理 Session&#xff09;、AR Input Manager (用于管理输入的一些信息) AR Session&#xff08;用于管理 Session&#xff09; 作用&#xff1a;管理AR应用状…

01.数据的存储

1. 数据类型介绍 1&#xff09;基本的内置类型&#xff1a;char //字符数据类型 short //短整型 int //整形 long //长整型 long long //更长的整形 float //单精度浮点数 double //双精度浮点数 2&#xff09;类型的意义&#xff1a; 使用这个类型开辟内存空间的大小&#xff…

Docker快速入门自用笔记

1. Docker - 介绍 不同Linux的内核一致。 2. Docker - 与虚拟机的不同 3. Docker - Docker架构 镜像&#xff08;只读&#xff09;&#xff1a;应用程序及其所需依赖、函数库、环境、配置等文件打包在一起&#xff0c;称为镜像。 容器&#xff1a;镜像中的应用程序运行后…