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

news2024/9/23 17:23:45

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.coloradmin.cn/o/1932438.html

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

相关文章

InterSystems IRIS Python 使用 DB-API连接 ,比odbc简单

1、下载安装驱动 同步的gitee下载地址&#xff1a;&#xff1a;于光/iris-driver-distribution - Gitee.com pip install intersystems_irispython-version-py3-none-any.whl 2、python代码测试 import iris as dbapi conn dbapi.connect(hostname127.0.0.1, port1972, names…

只讲干货!!自己喜欢的只能靠自己努力才能拿到!!今天拿下:IO流技术介绍

什么是IO 输入(Input) 指的是&#xff1a;可以让程序从外部系统获得数据&#xff08;核心含义是 “读 ” &#xff0c;读取外部数据&#xff09;。 输出(Output) 指的是&#xff1a;程序输出数据给外部系统从而可以操作外部 系统&#xff08;核心含义是“ 写 ” &#xff0c;将…

基于MindSpore实现BERT对话情绪识别

讲解视频&#xff1a; 基于MindSpore实现BERT对话情绪识别

防御笔记第七天(时需更新)

1.防火墙的可靠性&#xff1a; 因为防火墙不仅需要同步配置信息&#xff0c;还需要同步状态信息&#xff08;会话表等&#xff09;&#xff0c;所以防火墙不能像路由器那样单纯靠动态协议来进行切换&#xff0c;还需要用到双击热备技术。 双机---目前双机技术仅仅支持两台防火…

AI 大事件:超级明星 Andrej Karpathy 创立AI教育公司 Eureka Labs

&#x1f9e0; AI 大事件&#xff1a;超级明星 Andrej Karpathy 创立AI教育公司 Eureka Labs 摘要 Andrej Karpathy 作为前 OpenAI 联合创始人、Tesla AI 团队负责人&#xff0c;他的专业性和实力备受瞩目。Karpathy 对 AI 的普及和教育充满热情&#xff0c;从 YouTube 教程到…

一招轻松解决猫毛 最值得买的浮毛空气净化器排名

作为一名6年资深铲屎官&#xff0c;我常常被朋友问到关于宠物空气净化器的各种问题。有的人认为这是个神器&#xff0c;而有的人则认为这完全是花钱买智商税。其实我刚开始对购买宠物空气净化器也持怀疑态度&#xff0c;心想这么多钱花下去真的有效吗&#xff1f;但使用后&…

【Linux】将IDEA项目部署到云服务器上,让其成为后台进程(保姆级教学,满满的干货~~)

目录 部署项目到云服务器什么是部署一、 创建MySQL数据库二、 修改idea配置项三、 数据打包四、 部署云服务器五、开放端口号六 、 验证程序 部署项目到云服务器 什么是部署 ⼯作中涉及到的"环境" 开发环境:开发⼈员写代码⽤的机器.测试环境:测试⼈员测试程序使⽤…

Springboot整合MyBatis实现数据库查询(二)

目录 第一章、准备1.1&#xff09;准备数据库表1.2&#xff09;创建springboot项目&#xff0c;添加依赖1.3&#xff09;使用mybatis逆向工程 第二章、代码开发2.1&#xff09;建包并编写代码2.2&#xff09;application配置文件2.3&#xff09;设置编译位置 第三章、测试访问3…

09 深度推荐模型演化中的“平衡与不平衡“规律

你好&#xff0c;我是大壮。08 讲我们介绍了深度推荐算法中的范式方法&#xff0c;并简单讲解了组合范式推荐方法&#xff0c;其中还提到了多层感知器&#xff08;MLP&#xff09;。因此&#xff0c;这一讲我们就以 MLP 组件为基础&#xff0c;讲解深度学习范式的其他组合推荐方…

Why is LlamaCPP freezing during inference?

题意&#xff1a;为什么LlamaCPP在推理过程中会冻结 问题背景&#xff1a; Im using the following code to try and recieve a response from LlamaCPP, used through the LlamaIndex library. My model is stored locally in a gguf file. Im trying to do inference on the…

【数学建模】——多领域资源优化中的创新应用-六大经典问题解答

目录 题目1&#xff1a;截取条材 题目 1.1问题描述 1.2 数学模型 1.3 求解 1.4 解答 题目2&#xff1a;商店进货销售计划 题目 2.1 问题描述 2.2 数学模型 2.3 求解 2.4 解答 题目3&#xff1a;货船装载问题 题目 3.1问题重述 3.2 数学模型 3.3 求解 3.4 解…

Beelzebub过程记录及工具集

文章目录 靶场搭建靶场测试过程安装dirsearch扫描目录wpscan扫描破解 靶场搭建 https://download.vulnhub.com/beelzebub/Beelzebub.zip 下载解压镜像&#xff0c;从vmware打开。 一键式开机即可。 打开后配置网络。 确保网络可达。 靶场测试过程 首先使用nmap扫描网段的存…

为什么品牌需要做 IP 形象?

品牌做IP形象的原因有多方面&#xff0c;这些原因共同构成了IP形象在品牌建设中的重要性和价值&#xff0c;主要原因有以下几个方面&#xff1a; 增强品牌识别度与记忆点&#xff1a; IP形象作为品牌的视觉符号&#xff0c;具有独特性和辨识性&#xff0c;能够在消费者心中留…

提高自动化测试脚本编写效率 5大关键注意事项

提高自动化测试脚本编写效率能加速测试周期&#xff0c;减少人工错误&#xff0c;提升软件质量&#xff0c;促进项目按时交付&#xff0c;增强团队生产力和项目成功率。而自动化测试脚本编写效率低下&#xff0c;往往会导致测试周期延长&#xff0c;增加项目成本&#xff0c;延…

【C#】已知有三个坐标点:P0、P1、P2,当满足P3和P4连成的一条直线 与 P0和P1连成一条直线平行且长度一致,该如何计算P3、P4?

问题描述 已知有三个坐标点&#xff1a;P0、P1、P2&#xff0c;当满足P3和P4连成的一条直线 与 P0和P1连成一条直线平行且长度一致&#xff0c;该如何计算P3、P4&#xff1f; 解决办法 思路一&#xff1a;斜率及点斜式方程 # 示例坐标 x0, y0 1, 1 # P0坐标 x1, y1 4, 4 # …

MySQL执行状态查看与分析

当mysql出现性能问题时&#xff0c;一般会查看mysql的执行状态&#xff0c;执行命令&#xff1a; show processlist 各列的含义 列名含义id一个标识&#xff0c;你要kill一个语句的时候使用&#xff0c;例如 mysql> kill 207user显示当前用户&#xff0c;如果不是root&…

生信软件27 - 基于python的基因注释数据查询/检索库mygene

1. mygene库简介 MyGene.info提供简单易用的REST Web服务来查询/检索基因注释数据&#xff0c;具有以下特点&#xff1a; mygene技术文档&#xff1a; https://docs.mygene.info/en/latest/ 多物种支持: 包括人、小鼠、大鼠、斑马鱼等多个模式生物&#xff1b; 多数据源聚合…

mysql-事务的隔离界别

一.事务的隔离级别 二.查看事务的隔离级别 SELECT TRANSASCTION ISOLATION 三.设置事务隔离级别 SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE] 四.总结 1.事务简介 事务是一组操作的集合…

车载以太网交换机入门基本功(2)— 初识VLAN

在《交换机入门基本功 -上》提到&#xff0c;交换机在物理层面划分通信区域并产生局域网&#xff08;Local Area Network, LAN&#xff09;。局域网具有一个特点&#xff1a;连线拓扑一旦确定&#xff0c;一定时间内不会发生通信区域的变动。在实际通信过程中&#xff0c;广播报…

MKS流量计软件MFC通讯驱动使用于C和P系列MFC控制USB接口W10系统

MKS流量计软件MFC通讯驱动使用于C和P系列MFC控制USB接口W10系统