2.javaWeb_请求和响应的处理(Request,Response)

2.请求和响应的处理

文章目录

  • 2.请求和响应的处理
    • 一、动态资源和静态资源
      • javax.servlet(包)
    • 二、Servlet体系
      • 1.简介
      • 2.HttpServlet
      • 3.Servlet生命周期
    • 三、Request对象
      • 1.ServletRequest
        • 1)ServletRequest主要功能有:
        • 2)ServletRequest类的常用方法:
      • 2.HttpServletRequest处理请求
    • 四、Response对象
      • 1.ServletResponse
        • 1)常用方法:
      • 2.HttpServletResponse处理响应
        • 1)常用方法:

一、动态资源和静态资源

  1. 静态资源:

    客户端发送请求到web服务器,web服务器从内存取到相应的文件,返回给客户端,客户端解析并渲染显示出来

  2. 动态资源: .jsp.asp/.aspx.php

    请求的资源先提交web服务器>>连接数据库处理,再将内容交给web服务器>>客户端

    动态资源需要在服务器端运行,响应给客户端是服务器端代码的运行结果

  3. javax.servlet(包)

    Servlet相关的接口都放在javax.servlet 包中,常用接口有:

    接口说明
    Servlet处理请求和发送响应的过程的Java技术
    ServletConfig在初始化的过程中由 Servlet容器使用
    ServletContext定义在Servlet用于获取来自其容器的信息的方法
    ServletRequest向服务器发送的请求信息
    ServletResponse客户端请求的响应
    ServletInputStream用于从客户端读取二进制数据
    ServletOutputStream用于将二进制数据发送到客户端

二、Servlet体系

1.简介

Servlet 是一个用 Java 编写的程序,此程序在服务器上运行以处理客户端请求,处理请求的过程如下:

  1. 接收客户端(浏览器)请求信息
  2. 调用业务处理
  3. 向客户端(浏览器)发送HTTP响应

2.HttpServlet

HttpServlet 类是一个抽象类,用以创建针对HTTP协议的 Servlet接口的实现类,它实现了service方法;

针对客户端不同的消息发送方式,分别调用doGet()、doPost()等方法,因此在继承HttpServlet时只需要覆盖doGet或doPost方法即可

3.Servlet生命周期

阶段时机调用的方法(钩子)
实例化Servlet 容器创建 Servlet 的实例默认构造方法
初始化第一次向服务器发送请求或者服务器上没有servlet的时候,实例化之后init(config)
服务每次向服务器发送请求的时候service()
销毁服务停止的时候,项目重新加载的时候destroy ()
不可用销毁实例并标记为垃圾收集等待GC回收

Servlet的生命周期可以归纳为以下几个阶段:

  1. 装载Servlet:这项操作一般是动态执行的。有些服务器提供了响应的管理功能,可以在启动的时候就装载Servlet并能够初始化特定的Servlet。

    只调用一次

    当web应用处于运行阶段时,特定的servlet被客户端首次请求访问。

    在web.xml文件中为servlet设置了<load-on-startup>元素

     <servlet><servlet-name>servlet1</servlet-name><servlet-class>servlet.servlet1</servlet-class><load-on-startup>0</load-on-startup></servlet>
    

    在servlet的配置当中,<load-on-startup>5</load-on-startup>的含义是:标记容器是否在启动的时候就加载这个servlet。

    当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;

    当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。正数的值越小,启动该servlet的优先级越高。

    当web应用被重新启动时,web应用中的所有servlet会在特定的时间被重新初始化。

  2. 创建一个Servlet实例。

  3. 调用Servlet的init()方法。

  4. 一个客户端的请求到达服务器。

  5. 创建一个请求对象。

  6. 创建一个响应对象。

  7. 激活Servlet的Service()方法,并传递请求和响应对象。

    多次调用执行

    在这个阶段servlet可以随时响应客户端的请求。当servlet容器接到访问特定的servlet请求时,servlet容器会创建针对与这个请求的servletRequest和servletResponse对象,然后调用service()方法,并把这两个对象当做参数传递给service()方法。Service()方法通过servletRequest对象获得请求信息,并处理该请求,再通过servletResponse对象生成响应结果。

    不管是post还是get方法提交,都会在service中处理,然后,由service来交由相应的doPost或doGet方法处理,如果你重写了service方法,就不会再处理doPost或doGet了,如果重写sevice()方法,可以自己转向doPost()或doGet()方法

    当servlet容器把servlet生成的响应结果发送给客户后,servlet容器会销毁servletRequest和sevletResponse对象。

  8. Service()方法获得关于请求对象的信息、处理请求、访问其它资源、获得需要的信息。

  9. Service()方法使用响应对象的方法,将响应传回服务器,最终到达客户端。

  10. 对于更多的客户端请求,服务器创建新的请求和响应对象,仍然激活此Servlet的Service()方法,将两个对象作为参数传递给它。

  11. 当服务器不再需要Servlet或当服务器关闭时,服务器将会调用Servlet的destroy()方法来销毁Servlet。

    只执行一次

    当Web应用被终止时,servlet容器会先调用web应用中所有的servlet对象的destroy()方法,然后在销毁servlet对象。此外容器还会销毁与servlet对象关联的servletConfig对象。

    在destroy()方法的实现中,可以释放servlet所占用的资源。如关闭文件输入输出流,关闭与数据库的连接。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三、Request对象

Request对象封装了客户端对服务器的请求信息

实现javax.servlet.http.HttpServletRequest接口

使用 HTTP 协议处理客户端的请求

1.ServletRequest

ServletRequest接口封装了客户端请求的细节。它与协议无关,并指定一个HTTP的子接口。

1)ServletRequest主要功能有:
  • 找出客户端的主机名和IP地址
  • 检索请求参数
  • 取得和设置属性
  • 取得输入、输出流
2)ServletRequest类的常用方法:
  • getAttribute(String name): 返回具有指定名称的请求属性,如果不存在则返回null。属性可由Servlet引擎设置或使用
  • setAttribute()显式加入。
  • getAttributeName(): 返回请求中所有属性名的枚举。如果不存在属性,则返回一个空的枚举。
  • getCharacteEncoding(): 返回请求所用的字符编码。
  • getInputStream()throws IOException: 返回与请求相关的(二进制)输入流。可以调用getInputStream()或getReader()方法。
  • getParameter(String name): 返回指定输入参数,如果不存在,返回null。
  • getParameterName(): 返回请求中所有参数名的一个可能为空的枚举。
  • getParameterValues(String name): 返回指定输入参数名的取值数组,如果取值不存在则返回null。

2.HttpServletRequest处理请求

HttpServletRequest类型的对象代表的是请求对象,父接口:ServletRequest

所在包为:javax.servlet.http

常用方法

  • getParameter: 得到客户端的请求参数信息
  • getMethod: 得到客户端的请求方式,返回GET或者POST
  • getRequestDispatcher: 得到请求转发器
  • setAtrribute(): 给请求范围中设置数据
  • getAttribute(): 取出请求范围的数据

四、Response对象

服务器端生成响应并发送给客户端

1.ServletResponse

ServletResponse将一个Servlet生成的结果传送到发出请求的客户端。ServletResponse操作主要是作为输出流及其内容类型和长度的包容器,它由Servlet引擎创建。

1)常用方法:
  • getCharacterEncoding(): 返回响应程序使用字符解码的名字。除非显式设置,否则为ISO-8859-1。
  • getOutputStream()throws IOException: 返回用于将返回的二进制输出写入客户端的流,此方法和getWrite()方法二者只能调用其一。
  • getWriter()throws IOException: 返回用于将返回的文本输出写入客户端的一个字符写入器,此方法和getOutputStream()二者只能调用其一。
  • setContentType(String type): 设置内容类型。在HTTPServlet中设置Content-Type头标。

2.HttpServletResponse处理响应

HttpServletResponse类型的对象代表的是响应对象,父接口ServletResponse;

HttpServletResponse代表了对客户端的Http的响应。它提供了表示状态码、状态信息和响应头标的方法,同时还负责对URL中写入一个Web页面的HTTP会话ID进行解码。JSP中的内建对象response是一个HttpServletResponse实例。

所在包为:javax.servlet.http

1)常用方法:
  • addCookie(Cookie cookie): 将一个Set-Cookie头标加入到响应。
  • setHeader(String name,String value): 设置具有指定名字和取值的一个响应头标。
  • encodeRedirectURL(String url): 如果客户端不知道接受cookie,则向URL加入会话ID。第一种形式只对在sendRedirect()中使用的URL进行调用。其它被编码的URL应被传递到encodeURL()中。
  • encodeURL(String url): 使用URL和一个SessionID重写这个URL。
  • sendRedirect(String location): 把响应发送到另一页面或者Servlet进行处理。
  • getWriter(): 该方法取得PrintWriter对象,来输出字符数据。
  • getOutputStream(): 该方法获得ServletOutputStream输出流。
  • setContentType(): 该方法设置响应的MIME类型。
    dRedirect(String location): 把响应发送到另一页面或者Servlet进行处理。
  • getWriter(): 该方法取得PrintWriter对象,来输出字符数据。
  • getOutputStream(): 该方法获得ServletOutputStream输出流。
  • setContentType(): 该方法设置响应的MIME类型。
  • setCharacterEncoding(String charset): 设置响应的字符编码类型。

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

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

相关文章

请你谈谈:spring bean的生命周期 - 阶段2:Bean实例化阶段

在Spring框架中&#xff0c;Bean的实例化是Bean生命周期中的一个重要阶段。这个过程包括两个关键的子阶段&#xff1a;Bean实例化前阶段和Bean实例化阶段本身。 BeanFactoryPostProcessor&#xff1a;BeanFactoryPostProcessor是容器启动阶段Spring提供的一个扩展点&#xff0…

LG 选择 Flutter 来增强其智能电视操作系统 webOS

可以这个话题会让大多数人困惑&#xff0c;2024 年了为什么还会冒出 webOS 这种老古董&#xff1f;然后 LG 为什么选择 webOS &#xff1f;现在为什么又选择 Flutter &#xff1f; 其实早在 Google I/O 发布 Flutter 3.22 版本的时候&#xff0c;就提到了 LG 选择 Flutter 来增…

智慧园区整体解决方案3PPT(41页)

智慧园区整体解决方案概述智慧园区整体解决方案旨在通过先进的科技手段打造一个智能化、网络化的园区环境。该方案涵盖了私有云部署、智能会议系统、智慧物管、视频监控中心、消防监控中心、绿色健康大数据平台、智慧一卡通系统、智慧停车系统、智能餐厅、安全监控系统等多个方…

Flutter 状态管理新境界:多Provider并行驱动UI

前言 在上一篇文章中&#xff0c;我们讨论了如何使用 Provider 在 Flutter 中进行状态管理。 本篇文章我们来讨论如何使用多个 Provider。 在 Flutter 中&#xff0c;使用 Provider 管理多个不同的状态时&#xff0c;你可以为每个状态创建一个单独的 ChangeNotifierProvider…

Android中OkHttp3中超时时间概述

目录 前言connectTimeoutreadTimeoutwriteTimeoutcallTimeoutpingInterval拓展 前言 可以看到&#xff0c;使用还是很简单的。主要相关的有这五个参数&#xff0c;其中我们常用到是就是connectTimeout、readTimeout和writeTimeout。 再看上图&#xff0c;可以看到默认下connec…

电脑压缩视频文件 电脑压缩视频大小的方法

在数字化时代&#xff0c;视频已成为我们记录生活、分享快乐的重要工具。然而&#xff0c;大尺寸的视频文件常常让分享和存储变得棘手。如何在保持视频画质的前提下&#xff0c;轻松减小视频文件大小&#xff1f;今天&#xff0c;就让我们一起探索苹果电脑上的几种高效视频压缩…

探索Facebook的最新更新:社交体验的新高度

Facebook作为全球领先的社交媒体平台&#xff0c;一直致力于不断创新和改进&#xff0c;以提供更优质的用户体验。近期&#xff0c;Facebook推出了一系列新的更新&#xff0c;旨在提升用户的社交互动体验和平台功能。本文将详细探讨这些最新更新&#xff0c;分析其对用户和社交…

nginx全局块的user指令

文章目录 1、user指令1.1、进入nginx解压的目录1.2、./configure --help1.3、工作进程默认是nobody 2、user指令的使用步骤:2.1、设置一个用户信息"www"2.2、 创建一个用户2.3、./nginx -s reload2.4、创建/root/html/index.html页面&#xff0c;添加如下内容2.5、修…

数电基础 - 模数转换

目录 一. 简介 二. A/D转换器 三. 取样-保持电路 四. 并联比较型A/D转换器 五. 反馈比较型A/D转换器 六. 双积分型A/D转换器 七. V-F变换型A/D转换器 八. 总结 一. 简介 模数转换&#xff08;Analog-to-Digital Conversion&#xff0c;简称 ADC&#xff09;是将模拟信号…

AV1技术学习: Compound Prediction

一、双向 Compound Prediction AV1支持两个参考帧的预测通过多种复合模式线性组合。复合预测公式为 其中&#xff0c;权重m(x, y) is scaled by 64 以进行整数计算&#xff0c;R1(x, y)和R2(x, y)表示两个参考块中位于(x, y)的像素。P(x, y)将按比例缩小 1/64 以形成最终的预测…

taocms 3.0.1 本地文件泄露漏洞(CVE-2021-44983)

前言 CVE-2021-44983 是一个影响 taoCMS 3.0.1 的远程代码执行&#xff08;RCE&#xff09;漏洞。该漏洞允许攻击者通过上传恶意文件并在服务器上执行任意代码来利用这一安全缺陷。 漏洞描述 taoCMS 是一个内容管理系统&#xff08;CMS&#xff09;&#xff0c;用于创建和管…

使用 ABBYY FineReader PDF 15 在创建或转换 PDF 时自动生成书签

使用 ABBYY 为 PDF 文件添加书签&#xff0c;可以帮助快速定位文档中的主要内容&#xff0c;也能更方便的梳理出一份文档大纲。 有很多 PDF 文件在创建时并没有编辑书签&#xff0c;这里介绍使用 ABBYY FineReader PDF 15&#xff08;Win 系统&#xff09;在 PDF 中自动添加书…

Windows上LabVIEW编译生成可执行程序

LabVIEW项目浏览器(Project Explorer)中的"Build Specifications"就是用来配置项目发布方法的。在"Build Specifications"右键菜单中选取"New"&#xff0c;可以看到程序有几种不同的发布方法&#xff1a;Application(EXE)、Installer、.Net Inte…

EasyPhoto - 一键训练并生成人像写真,支持参考图生成 独立版 本地一键整合包下载

EasyPhoto最早是作为AI绘画软件StableDiffusion的一款插件备受大家喜爱&#xff0c;今天分享的是 EasyPhoto 的独立版本一键整合包&#xff0c;无需安装StableDiffusion即可解压即用。 和之前分享的腾讯开源的 PhotoMaker 和 阿里开源的 FaceChain 类似&#xff0c;EasyPhoto操…

数据库系统概论:数据库系统模式

数据库系统在我们的数字世界中扮演着至关重要的角色&#xff0c;无论是个人设备还是企业级应用&#xff0c;数据的有效管理和访问都是必不可少的。而数据库系统的模式结构是确保数据一致性和可访问性的关键组成部分。 数据库系统模式 基本概念 型和值 数据模型中有 型(type…

网络开局 与 Underlay网络自动化

由于出口和核心设备 部署在核心机房,地理位置集中,业务复杂,开局通常需要网络工程师进站调测。 因此核心层及核心以上的设备(包含核心层设备,旁挂独立AC设备和出口设备)推荐采用WEB网管开局方式或命令行开局方式。 核心以下的设备(包含汇聚层设备、接入层设备和AP)由于数量众…

MySQL第一次作业

一、库的建立 mysql> show databases; -------------------- | Database | -------------------- | information_schema | | mydb2_stuinfo | | mydb3_employee | | mydb4_product | | mydbl_test | | mysql | | performance…

【Java项目笔记】01项目介绍

一、技术框架 1.后端服务 Spring Boot为主体框架 Spring MVC为Web框架 MyBatis、MyBatis Plus为持久层框架&#xff0c;负责数据库的读写 阿里云短信服务 2.存储服务 MySql redis缓存数据 MinIO为对象存储&#xff0c;存储非结构化数据&#xff08;图片、视频、音频&a…

Java中的迭代器(Iterator)

Java中的迭代器&#xff08;Iterator&#xff09; 1、 迭代器的基本方法2、 迭代器的使用示例3、注意事项4、克隆与序列化5、结论 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java中&#xff0c;迭代器&#xff08;Iterator&#xff0…