Response和Resquest基础知识+实际开发中需要注意的点(经典)

蓝桥杯单片机学习13——NE555方波发生器&频率测量 NE555详解、引脚图介绍、原理图及工作原理讲解、方波产生的原理、定时器测量频率的原理及使用方法、代码实现 阅读详情
一、response
ServletResponse -- 最基本的response对象,提供了一个响应对象应该具有的最基本的功能
|
|-HttpServletResponse 针对于HTTP协议进行了增强提供了很多和HTTP协议相关的属性和方法

1.向浏览器输出一段数据--乱码问题
response.getOutputStream();
response.getWriter();

2.实现文件下载
URL编码:URLEncoder  URLDEcoder
美:1000 1100 1110
  %2C%3d%4e
女:0111 0011 0001
  %5a%6b%71


  %2C%3d%4e%5a%6b%71

3.实现定时刷新
利用<meta>可以用来模拟HTTP响应头的功能


4.控制浏览器是否缓存资源
Expires 
Cache-Control
Pragma


可以利用这三个头明确的通知浏览器是否缓存资源
可以指定不缓存资源,这时无论浏览器是什么样的缓存机制都不会缓存发送过去的数据了
可以指定缓存资源,并且可以指定缓存的时间,这样无论浏览器是什么样的缓存机制都会缓存发送过去的数据,并且缓存到指定的时间,在指定的时间到来之前,这个缓存一直存在,多次开关浏览器后都能使用这个缓存
5.请求重定向
response.setState(302);
response.setHeader("Location","...");


response.sendRedirect("...");




**重点细节:
response.getWriter()和response.getOutputStream()这两个方法是互斥的,一旦调用了其中一个就不能再去调用另外一个
response.getWriter()和response.getOutputStream()拿到的流在service方法结束后服务器会检查是否关闭过,如果没有关闭过则会帮我们关闭,所以推荐大家平时自己就不用关这俩流

~6.验证码

二、request
ServletRequest -- 通用的请求对象定义了一个请求应该具有的最基本的方法
|
|--HttpServletRequest -- 针对于HTTP协议进行了增强增加和很多和HTTP协议相关的属性和方法


1.获取客户机信息
getRequestURL方法返回客户端发出请求完整URL
!!getRequestURI方法返回请求行中的资源名部分
getQueryString 方法返回请求行中的参数部分
!!getRemoteAddr方法返回发出请求的客户机的IP地址
!!getMethod得到客户机请求方式
!!getContextPath 获得当前web应用虚拟目录名称


2.获取请求头信息
getHeader(name)方法 --- String 
getHeaders(String name)方法 --- Enumeration<String>
getHeaderNames方法 --- Enumeration<String>


getIntHeader(name)方法  --- int
getDateHeader(name)方法 --- long(日期对应毫秒)

*利用referer头防盗链
3.获取请求参数
String getParameter(String)
String [] getParameterValues(String)
Map<String,String[]> getParameterMap()


*乱码问题:
浏览器以什么编码打开表单页面就用什么编码发送提交的数据
而服务器如果不指定默认使用iso8859-1来解码请求参数,此时如果发送的编码和打开的编码不同必然乱码

可以设置request.setCharacterEncoding设置服务器以什么编码打开数据,以此解决乱码问题,但是这个方法只对请求中的实体内容起作用,所以只能解决POST提交的乱码问题

如果和解决GET提交的乱码呢?只能手动的编解码来解决乱码
String username = request.getParameter("username");//有乱码
byte [] bs =username.getBytes("iso8859-1");//反响查回二进制
username = new String(bs,"utf-8")//再使用正确的码表进行解码就可以了


4.利用请求域传递对象
request本身也是一个域对象

作用范围:整个请求链
生命周期:一次请求开始,创建代表请求的request对象,request域开始.一次请求结束,销毁request对象request域销毁
作用:在整个请求链中共享数据


*通常我们在Servlet中处理好数据后,存入request域再请求转发到jsp页面进行显示,从而实现servlet做处理jsp做显示,各自做各自最擅长的事情


setAttribute()
getAttribute()
removeAttribute()




请求参数:浏览器提交的请求参数数据 parameter
request.getParameter()
request.getParameterValues()
request.getParameterMap()


初始化参数:在web.xml中为Servlet或整个web应用配置的初始化信息参数 initparameter
ServletConfig.getInitParamter()
ServletConfig.getInitParamterNames()
ServletContext.getInitParamter()
ServletContext.getInitParamterNames()

域属性:在四大作用于保存的属性信息 attribute
setAttribute
getAttribute
removeAttribute


5.request实现请求转发
ServletContext.getRequestDispatcher("").forward(request,response);
request.getRequestDispatcher("").froward(request,response);

!转发和重定向的区别,什么时候用转发什么时候重定向
~转发和重定向都是资源跳转的方式,
~但是原理不同,重定向基于HTTP协议的302+Location进行,转发是服务器内部资源跳转
~转发一次请求一次响应,重定向两次请求两次响应
~转发地址栏不变,重定向地址栏发生变化
~转发后request域中属性会仍然存在,重定向后由于是新的request找不到之前的域属性
~~如果需要在资源跳转时利用request域带一些属性过去,必须用请求转发
~~如果明确需要在资源跳转后地址栏想要发生变化必须用重定向
~~如果既不需要利用request域带属性也不需要改变地址栏,这是重定向和转发都可以,但是推荐使用转发,因为转发可以减少对服务器的请求次数,减少服务器的压力
!转发细节:
~如果在请求转发之前已经有数据被打给了浏览器那么转发将会失败会抛出异常
~如果在调用forward之前向response缓冲区中写入了内容,只要写入到其中的内容还没有真的被输出到客户端,forward方法就可以正常执行,但原来写入到缓冲区中的数据将被清空,注意只是实体内容被清空,之前写入的响应头信息仍然存在。
~在一个Servlet中多次转发也是不行的
~但是连续转发是可以的
~转发就像是在程序调用,转发之后的代码仍然会执行,如果不想执行需要做return
~!!总之一句话,请求转发最终只能由一个Servlet对外输出数据,试图在一个请求中利用转发让多个Servlet输出数据是不行的



6.请求包含
ServletContext.getRequestDispatcher("").include(request,response);
request.getRequestDispatcher("").include(request,response)
请求包含:将源组件和目标组件的输出进行合并后再输出


!被包含的Servlet程序不能改变响应消息的状态码和响应头,如果它里面存在这样的语句,这些语句的执行结果将被忽略




三、路径专题
相对路径和绝对路径和硬盘路径
绝对路径:以/开头的路径叫做绝对路径,在计算路径时,在一个参考路径上直接拼接给定的绝对路径得到路径
相对路径:不以/开头的路径叫相对路径,在计算路径时,相对于当前位置计算一个新的路径
硬盘路径:以盘符开头的路径叫硬盘路径

虚拟路径 -- 请写绝对路径,如果路径是给浏览器用的请将web应用名称写上,如果路径是给服务器用的web名称一定不要写
request.getRequestDispatcher("/index.jsp").forward();
ServletContext.getRequestDIspatcher("/index.jsp");
response.setHeader("Location","/Day04/index.jsp")
response.sendRedirect("/Day04/index.jsp");
response.setHeader("refresh","3;url=/Day04/index.jsp")
<a href="/Day04/...."></a>
<img src="/Day04/..."/>
<form action="/Day04/...">

真实路径 -- 相对路径 根据原理具体分析应该相对于哪个目录写路径
File file = new File("");//--相对于程序的启动目录
new FileInputStream("");//--相对于程序的启动目录
servletContext.getRealPath("");//--相对于当前web应用的目录
ClassLoader.getResource("");//--相对于类加载的目录











推荐一个直接用于项目开发的PID库!很好用,很稳定 关注、星标公众号,不错过精彩内容大家好,我是小麦。最近有朋友问到有没有现成的C语言PID库。当然有了!现在我就准备给大家安利一下了。一般同学会去某度上搜,看到各种各样版本的PID示例,或者... 阅读详情

相关推荐

毫米波与太赫兹:十射线模型建模

Pt=1,只考虑地面和前后两面墙的反射,反射系数为0.7。用matlab设计程序并实现该功能。,总计考虑10条路径,求出接收功率随。

SupermarketX的博客 785

详解请求消息 resquest

1.1 简介 1.1.1 概述    Request 对象,又称为请求对象,该对象派生自 HTTPResponse 类,是 ASP 中重要的服务器内置对象,它连接着 Web 服务器和 Web 客户端程序。Request 对象是从客户端向服务器发出请求,包括用户提交的信息以及客户端的一些信息。客户端可通过 HTML 表单或在网页地址后面提供参数的方法提交数据,然后服务器通过 Request 对象的相关方法来获取这些数据。Request 的各种方法主要用来处理客户端浏览器提交的请求中的各项参数和选项。 1.1

Demo_Null 924

5.44GHz超高精度!STM32G474的HRTIM时钟配置避坑指南

本文深入解析STM32G474内置高分辨率定时器的时钟配置要点,帮助工程师避开常见陷阱。文章详细阐述了从系统时钟到5.44GHz等效时基的路径,重点分析了预分频器乘法器、周期计算溢出、影子寄存器同步等关键配置,并结合实测波形对比,确保HRTIM在电机控制、数字电源等精密应用中发挥极限性能。

book8的博客 522

servlet入门(二)resquest和response

一、request功能 1、获取数据 2、其他功能 二、response功能

cgl_dong的博客 1102

电赛备赛笔记:用STM32驱动AD9959信号发生器模块,从接线到出波保姆级教程

本文详细介绍了如何使用STM32驱动AD9959信号发生器模块,从硬件接线到软件调试的全流程。AD9959作为高性能DDS芯片,适用于电子设计竞赛中的信号生成需求。文章包含硬件连接指南、寄存器配置解析、多通道控制技巧以及常见问题解决方案,帮助参赛者快速掌握AD9959的应用。

weixin_31858171的博客 366

汽车轮胎动平衡背后的秘密:如何用惯性主轴原理消除方向盘抖动

本文深入解析了汽车轮胎动平衡的核心原理,即利用惯性主轴原理消除高速行驶时的方向盘抖动。文章从方向盘抖动的现象出发,阐释了动不平衡产生的物理本质,并详细介绍了如何通过动平衡机测量、计算与校正,使轮胎-轮毂系统的实际旋转轴回归其惯性主轴,从而实现稳定运转。

grafana6viz的博客 346

Request & Response

Request(请求) & Response(响应)浏览器会向服务器发送请求数据,服务器也需要返回响应数据给浏览器,因此我们需要设置对应的类来代表请求数据和响应数据,且Servlet中的service方法就需要对应的请求数据和响应数据的参数Request:存放请求数据,可以通过request对象来获取请求数据Response:存放响应数据,可以通过response对象设置响应数据。

didkdjdk的博客 1049

Vue - 详细完美解决 ElementUI MessageBox “多次“ 弹框问题,让其无论执行多少次都只弹出来一次(常见于请求拦截器多次触发弹框,导致弹出来很多个)详细示例代码,保证完美解决!

vue如何防止ElementUIMessageBox多次弹框,vueelement弹框弹出来很多次怎么办,elementvueMessageBox解决执行多次后出现多次弹框的问题,elementUI如何阻止MessageBox多次弹出来,vue+element解决多个请求同时报错,弹出多个消息框message,饿了么组件库MessageBox弹框频繁弹出解决方法,vue调用MessageBox出现多次弹框,vueelementMessageBox怎么只弹出一次,vue之axios请求

🏆 前端领域优质创作者 8195

(四)Resquest 知识点总结 (来自那些年的笔记)

目录 URL和URI的区别 获取URL、URI 什么是HttpServletResquest 获取请求头中字段的内容 获取请求信息的数据 将客户机的请求变为一个流返回 常用的方法 request乱码问题 request域 请求转发的细节 页面包含 利用referer防盗链 Web工程中各类地址的写法 先插点小插曲 URL和URI的区别 URI 是爸爸,URL 是崽...

young-youth的博客 2941

无人机视觉锁定与目标跟踪技术深度解析(含完整代码)

本文介绍了无人机视觉锁定系统的核心技术实现,包括系统架构、目标检测与跟踪算法。系统采用YOLOv5进行初始目标检测,结合手动框选作为备选方案。在跟踪环节对比了KCF、CSRT等传统方法和SiamFC等深度学习算法,最终选用CSRT作为CPU平台最优方案。文章详细解析了相关滤波跟踪的数学原理,并提供了目标检测器和跟踪器的Python实现代码。该系统能有效处理目标遮挡、光照变化等挑战,为无人机自主跟踪提供了实用解决方案。

电脑管家 686

S7-200SMART 中如何实现单按钮启停功能(两种方法)?

S7-200SMART 中如何实现单按钮启停功能(两种方法),Toggle库指令,状态翻转

Robot_PLC_HMI_Automation 1万+

servlet中resquest和response的一个小误解

servlet的调用过程是这样的,在浏览器的页面中输入servlet的映射地址如:http://localhost:8081/area_demo/loadProv请求servlet-mapping标签下url-parttern名为/loadProv的servlet的.java类。通俗的讲,虽然.java是这是一个类,但是也可以看做是一个请求的页面或者更准确的说是一个服务窗口(就像我们现实中行政审批...

wolfalcon的专栏 774

Python爬虫实战:利用Selenium与Playwright抓取美团外卖数据

在当今大数据时代,网络数据采集已成为商业分析和市场研究的重要手段。本文以美团外卖平台为例,详细介绍如何使用Python最新爬虫技术(Selenium、Playwright)进行数据采集,并探讨相关技术原理、反爬应对策略及数据存储方案。通过5000+字的详细讲解和完整代码示例,帮助读者掌握现代网络爬虫开发的核心技能。本文详细介绍了使用Python最新爬虫技术采集美团外卖数据的完整流程,涵盖了从环境配置、页面分析到数据存储的全链路解决方案。

2201_76125261的博客 2550

Http协议概述--resquest和response对象

request对象和response对象是由服务器创建的,我们只是使用并不创建request对象是来获取请求消息,response对象是来设置响应消息 一、request对象 request继承结构     ServletRequest(接口)-->HttpServletRequest(接口)-->RequestFacade 类(tomcat实现...

weixin_42387411的博客 1198

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【JSP】08 request和response[详细版]

request和response的主要作用、常用方法以及两者区别。

MOUNTAIN_SEA1的博客 1101

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

在servlet中request.getRequestDispatcher与response.sendRedirect的使用及区别

【1】request.getRequestDispatcher的用法      其返回一个RequestDispatcher对象,是一个Web资源的包装器,可以用来把当前request传递到该资源,或者把新的资源包括到当前响应中。RequestDispatcher接口中定义了两个方法:include/forward。       RequestDispatcher接口所定义的forward()

tongxinxiao的专栏 8541

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

request.getRequestDispatcher()和response.sendRedirect()区别

request.getRequestDispatcher() 1、请求转发,使用方法为: RequestDispatcher rd = request.getRequestDispatcher(dispatchUrl); rd.forward(request, response); 2、RequestDispatcher把request和response复制并转给“dispatchUrl”,需要...

bunnysxy的博客 843

Django使用request和response对象

当请求一张页面时,Django把请求的metadata数据包装成一个HttpRequest对象,然后Django加载合适的view方法,把这个HttpRequest 对象作为第一个参数传给view方法。任何view方法都应该返回一个HttpResponse对象。 我们在本书中大量使用这两个对象;本附录详细解释HttpRequest和HttpResponse对象。 HttpRequest Ht

hujing_Liu 1782

Request Response 跳转页面的理解

1.response 跳转页面 private void writeContent(String content) { HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) ...

Marc1999的博客 132

servlet--response、request

servlet--response、request 请求响应流程图 response 1 response概述 response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse。在客户端发出每个请求时,服务器都会创建一个resp...

weixin_30782293的博客 107

教你写Android网络框架之Request Response类与请求队列

教你写Android网络框架之Request Response类与请求队列

qq_43661309的博客 1407

request.getRequestDispatcher和response.sendRedirect()的区别

1、两者的区别:response.sendRedirect(url):跳转到指定的URL地址,产生一个新的request。所以要传递参数只有在url后加参数,如: url?id=1。request.getRequestDispatcher(url).forward(request,response):是直接将请求转发到指定URL,所以该请求能够直接获得上一个请求的数据。也就是说采用请求转发,req...

cherry_vicent的专栏 972

request、response 中文乱码问题与解决方式

request、response 中文乱码问题与解决方式 request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码; response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码;   乱码产生的原因:不管是request乱码还是response乱码,其实都是由于客户端(浏览器)跟服务器端采

hoey96的博客 309

Servlet——请求(request)与响应(response)

Servlet——请求(request)与响应(response)

weixin_45554007的博客 4420

Webob——WSGI的“滤镜”

通过上文的讨论,我们已经对WSGI有了一点认识了,那么现在,就让我们大体上认识一下Webob吧! 什么是Webob? WSGI是故意设计成最小的Web服务器实现轻松的应用,以便被更多的人采用。但是,几乎没有人真的喜欢直接操作environ变量,也几乎没有人喜欢用start_response这么诡异的逻辑,虽然WSGI提供的API易于实现...

weixin_33858485的博客 182

Servlet(7)请求转发和请求重定向

上一节:https://blog.csdn.net/Carl_changxin/article/details/86612004 本节参考:https://blog.csdn.net/liubin5620/article/details/79922692 1、概念 (1)背景:当前客户端访问的Servlet1不能处理客户端的问题,此时就有两种方式解决这种情况。 方式1:服务器通过...

Carl_changxin的博客 293
上一篇: Servlet开发技术基础
下一篇: Cookie和Session的基础知识+高级编程+实际开发中的应用(经典)
escdelete
博客等级 码龄14年 37粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值