`

服务器响应的生成:HTTP响应报头

    博客分类:
  • Java
阅读更多

前面提到了,web服务器响应一般由状态行,一个或多个响应报头 (其中一个必须为Content-Type),一个空行和关联文档组成,要让servlet发挥最大的效力,你不仅需要知道如何生成文档(事实上以后都是用jsp来完成这个工作的),更重要的是要知道  有效地利用状态行和响应报头


如前所述,HTTP响应报头的设置,经常是和状态代码的设置结合一起的 ,例如文档发生移动的状态代码300到307都伴随一个Location头,401(Unauthorized)

代码经常包括伴随WWW-Authenticate的报头。

即使在设置正常的状态代码时,指定报头 也是十分重要的。响应报头 可以用来:指定cookie,提供页面的修改日期(用于客户端缓存),指示浏览器在指定的时间间隔后重新载入页面,给出文件的大小使持续性http连接的应用成为可能,指定生成文档的类型以及执行许多其他任务。




7.1  在servlet中设置响应报头


1,  指定报头时,最通用的方式是使用HttpServletResponse的setHeader方法,接受两个字符串,报头名和报头值:

setHeader(String headerName, String headerValue);//注意这样就只能设置报头值是String类型的报头了


这是通用的方法,对于含有整数和日期的报头,提供了专门的方法,消去上述职能设置String值的缺点:

setDateHeader(String header, long milliseconds)

setIntHeader(String header, int headerValue)

2,  HTTP允许同名的报头名多次出现,有时候我们希望加入新的报头,这时就 用addHeader,addDateHeader,addIntHeader;(set替换,add新增),如果需要知道是否已经包含了特定的报头,可 以用containsHeader进行检查。


3,  HttpServletResponse还提供了许多方便的方法来指定常用的报头(就不用再使用setHeader了)

setContentType(String mimeType)  设置Content-Type报头,大多数servlet都要用到这个

setContentLength(int length)      设置Content-Length报头,如果浏览器支持持续性http连接,这个报头将十分有用

addCookie(Cookie c)         见cookie管理

sendRedirect(String address)  将状态代码设为302,并设置Location报头




7.2  理解HTTP1.1响应报头

理解常见报头的含义:

Allow  指定服务器支持的请求方法

Cache-Control

Connection  close值指定浏览器不要使用持续性http连接

Content-Disposition

Content-Encoding   页面传输使用的编码,gzip,,,

Content-Language

Content-Length

Content-Type  响应文档的mime类型

Expires

Last-Modified

Location  通知浏览器文档的地址

Pragma

Refresh   表明浏览器多长时间后请求最新的页面  例如response.setIntHeader("Refresh", 30);

Retry-After  告诉客户程序多久后重复它的请求

Set-Cookie  

WWW-Authenticate

棕色表示的报头在下面的示例中会用到



7.3 示例:构建Excel表格


servlet也可以生成Excel类型,Excel的MIME类型是application/vnd.ms-excel:

response.setContentType( " application/vnd.ms-excel " ); PrintWriter out = response.getWriter();

 

package coreservlets; import java.io. * ; import javax.servlet. * ; import javax.servlet.http. * ; // 输出一个简单的excel表格 public class ApplesAndOranges extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType( " application/vnd.ms-excel " ); // 设置setContent-Type报头指定输出格式 PrintWriter out = response.getWriter(); // excel接受制表符/t out.println( " \tQ1\tQ2\tQ3\tQ4\tTotal " ); out.println( " Apples\t78\t87\t92\t29\t=SUM(B2:E2) " ); out.println( " Oranges\t77\t86\t93\t30\t=SUM(B3:E3) " ); } }


请求:http://localhost:8080/Servlet/servlet/ApplesAndOranges的结果----




打开表格内容为:





7.4  servlet状态的持续以及页面的自动重载

 
如果你的jsp或者servlet执行一项耗时较长的计算任务,比如20秒或者更多,你不能知网计算完成后再将结果发送至客户,到那时客户可能已经放弃并离开该页面或者更坏---用户单击Reload重新计算过程。解决方案:

1)一种跨请求存储数据的方式

对于不专属于任意客户的数据,可以将其存储在servlet的字段变量中(实例变 量),对于用户专用的数据,可以将其存储在HttpSession对象中(参见后续章节),对于其他servlet和jsp页面需要用到的数据,可以存储 到ServletContex中(后续章节)。

2)一种在请求发送给用户后,继续保持运算的方式

启动一个线程,系统为了应答请求而启动的线程,在响应完成后线程自动结束,但其他的线程会保持运行。要将线程的优先级设为一个较低的值,才不至于影响整个服务器的运行

3)一种在更新的结果就绪后,使浏览器得到它的方式

遗憾的是,服务器主动的将新结果发送给浏览器并不容易,因为浏览器并不维护一个与服务器之间保持打开的连接 ,只能让浏览器去主动请求,这样就用Refresh报头来指定重新请求的时间间隔




7.5  使用servlet生成jpeg图像


跟excel差不多,就是具体过程麻烦点,不写在这了



这两章主要都在讲服务器对浏览器请求的响应,要理解响应的格式,这两章分开讲解了响应内容中的状态码和报头 ,理解servlet是怎样利用这些状态码和响应报头来完成一些应用的

分享到:
评论

相关推荐

    双目摄像头python测试代码

    双目摄像头python测试代码

    VS2010旗舰版的VB.NET版本任意进制互相转换程序源代码QZQ.zip

    VS2010旗舰版的VB.NET版本任意进制互相转换程序源代码QZQ

    前端开发_Mantine框架_Vite模板_快速启动_开发指_1744170109.zip

    前端开发_Mantine框架_Vite模板_快速启动_开发指_1744170109.zip

    RK3568核心板设计指南:基于Rockchip方案的硬件与软件实现

    内容概要:本文详细介绍了RK3568核心板的设计要点,涵盖硬件和软件两大部分。硬件方面,着重讨论了电源设计、时钟设计、DDR布线、散热设计等关键环节,提供了具体的实例代码和调试技巧。软件部分则涉及驱动开发、系统移植等内容,展示了如何通过设备树文件配置和驱动程序编写来实现硬件与操作系统的无缝对接。此外,还分享了许多实用的调试经验和优化方法,帮助开发者更好地理解和掌握RK3568核心板的设计。 适合人群:从事嵌入式系统开发的技术人员,尤其是对RK3568核心板感兴趣的硬件工程师和软件开发者。 使用场景及目标:适用于准备开发基于RK3568核心板的产品的研发团队,旨在帮助他们快速上手并解决实际开发过程中遇到的问题,提高开发效率和产品质量。 其他说明:文中不仅提供了理论指导,还包括大量实战案例和代码片段,便于读者理解和实践。同时,针对一些常见的错误和难题给出了有效的解决方案,有助于减少开发周期和技术风险。

    前端开发_Vite打包工具_Vue2框架_TypeScrip_1744171829.zip

    前端开发_Vite打包工具_Vue2框架_TypeScrip_1744171829.zip

    试题:矩阵理论:运算与性质.docx

    试题:矩阵理论:运算与性质.docx

    【嵌入式系统】第八届蓝桥杯嵌入式设计与开发省赛基础知识试题解析:选择题及答案分析

    内容概要:本文档为第八届蓝桥杯嵌入式设计与开发项目省赛的基础知识试题部分,主要考察参赛者对嵌入式系统的基本概念、逻辑运算、微控制器特性、通信接口及时钟源的选择等知识点的理解。试题涵盖逻辑表达式的化简、门电路的功能识别、STM32F103RBT6微控制器的内核及数据类型支持情况、RS232接口用于双机通信所需的最少信号线数量、STM32程序下载调试的方式选择、可菊链连接的接口类型、USB外设开发的时钟源选择、DMA的工作机制以及简单电路的电压计算等多个方面,旨在全面检验选手的专业知识掌握程度。 适合人群:具有一定的电子技术与单片机开发基础,准备参加嵌入式设计与开发竞赛的学生或爱好者。 使用场景及目标:①帮助参赛者熟悉并巩固嵌入式系统相关理论知识;②作为赛前复习资料,提高解题速度和准确性;③通过练习加深对各种硬件特性和应用场景的理解。 其他说明:文档提供了详细的答案解析,有助于学习者更好地理解题目背后的原理,建议结合实际项目经验进行学习,同时注意不同版本器件之间的差异。

    MX Player V1.90.1.apk

    MX Player V1.90.1.apk

    3dmax插件a显示所有的组物体.ms

    3dmax插件

    MATLAB实现ARIMA模型的时间序列预测:从数据预处理到模型优化

    内容概要:本文详细介绍了一个基于MATLAB的时间序列预测系统,特别是ARIMA模型的应用。首先介绍了如何从Excel文件中读取数据并进行预处理,如差分处理和平稳性检验。接着讨论了模型定阶方法,包括使用ACF/PACF图和BIC准则自动选择最佳模型阶数。然后讲解了模型参数估计、残差诊断以及预测阶段的具体步骤,包括反向差分和置信区间的计算。最后提供了动态可视化的实现方法,并分享了一些实用技巧和注意事项。 适合人群:具有一定MATLAB编程基础的研究人员、数据分析员、学生等。 使用场景及目标:适用于零售销量、电力负荷、交通流量等多种时间序列预测任务,帮助用户快速构建高效的时间序列预测模型,提高预测精度。 其他说明:文中还提到一些常见的陷阱和解决方案,如数据预处理中的时间戳处理、异常值处理等。同时提供了一些扩展功能,如季节性调整和GARCH模型的应用。

    数据库管理_VitessOperator_兼容性支持_云端部_1744166554.zip

    数据库管理_VitessOperator_兼容性支持_云端部_1744166554.zip

    粒子群与遗传算法结合解决旅行商问题(TSP)的Python实现及优化

    内容概要:本文详细介绍了将粒子群算法(Particle Swarm Optimization, PSO)与遗传算法(Genetic Algorithm, GA)相结合的方法来求解旅行商问题(Traveling Salesman Problem, TSP)。首先,文中展示了如何准备输入数据,即城市坐标存储于文本文件中并通过Python脚本加载。接着,重点讲解了混合算法的核心设计,包括粒子类定义、适应度计算、交叉操作以及变异操作的具体实现方式。此外,还讨论了算法的整体流程及其参数设置,并分享了一些实用的经验和技巧,如引入模拟退火思想以增强跳出局部最优的能力。 适合人群:对智能优化算法感兴趣的科研人员、学生或者有一定编程基础的数据科学家。 使用场景及目标:适用于需要高效求解TSP或其他类似组合优化问题的研究项目或应用系统开发。主要目标是在较短时间内获得接近最优解的路径安排。 其他说明:文中提供了完整的Python代码示例,便于读者理解和实践。同时也提到了一些性能优化措施,例如预处理距离矩阵、调整交叉率和变异率等方法来提升算法效率。

    LS-DYNA霍普金森压杆SHPB动态劈裂仿真k文件详解及优化技巧

    内容概要:本文详细介绍了LS-DYNA软件中霍普金森压杆(SHPB)动态劈裂仿真的源代码k文件的具体实现方法和优化技巧。首先概述了SHPB动态劈裂实验的基本原理,然后深入剖析了k文件中各部分的关键字和参数设置,如模型定义、材料属性、边界条件、接触定义、加载波形以及结果输出控制。文中还特别强调了常见错误和注意事项,并提供了具体的代码片段作为实例。此外,提到了‘LS-DYNA-浩雨’这一资源平台,分享了许多实用的经验和技术诀窍,有助于提高模拟精度和效率。 适合人群:从事材料动态力学性能研究的科研人员、工程技术人员以及对LS-DYNA仿真感兴趣的学者。 使用场景及目标:适用于需要进行SHPB动态劈裂仿真的研究人员,旨在帮助他们更好地理解和掌握LS-DYNA中k文件的编写规则和优化方法,从而提升仿真的准确性和可靠性。 其他说明:文章不仅提供了理论指导,还包括大量实践经验,能够帮助读者快速入门并解决实际问题。同时提醒读者注意一些常见的陷阱,避免不必要的错误。

    3dmax插件037-体块工具.ms

    3dmax插件

    工业自动化中同步磁阻电机及驱动器等关键技术的C语言实现与优化

    内容概要:本文详细介绍了工业自动化领域中同步磁阻电机及其驱动器、光伏储能双向变流器、EtherCAT伺服控制以及软启动器等关键技术的C语言实现方法和优化技巧。针对同步磁阻电机,文中探讨了六步换相算法、模型预测控制、磁链观测器等技术的应用;对于光伏储能,讨论了二阶广义积分器PLL、双向储能模式切换等问题;EtherCAT伺服方面则涉及主站协议栈的状态机设计及时钟同步;软启动器部分讲述了突加负载检测、电压斜坡控制等内容。每个技术点均附有具体的C代码示例,展示了如何应对实际工程中的挑战,如提高能效比、增强控制精度、确保协议兼容性等。 适合人群:从事工业自动化相关工作的工程师和技术人员,尤其是那些希望深入了解同步磁阻电机、光伏储能、EtherCAT伺服控制等领域核心技术实现的人群。 使用场景及目标:适用于正在参与或计划开展工业自动化项目的技术团队,旨在帮助他们掌握高效可靠的嵌入式控制系统开发技能,提升产品的性能指标,降低成本风险。同时,也为高校师生提供了宝贵的实践教学资料。 其他说明:文章不仅分享了理论知识,还结合大量真实案例,强调了实际应用中的注意事项和常见错误规避方法。通过对这些技术细节的学习,读者能够更好地理解和解决工业现场遇到的各种难题。

    多相永磁同步电机控制算法详解:PI、滑模、ADRC及模型预测控制

    内容概要:本文详细介绍了多相(五相和六相)永磁同步电机的各种控制算法及其应用技巧。首先讨论了PI控制的基本原理和常见问题,如积分饱和。接着深入探讨了滑模控制的抖颤抑制技术和ADRC控制中的扩张状态观测器的应用。此外,文章还讲解了SVPWM矢量控制的具体实现方法,以及无位置传感器控制中扩展卡尔曼滤波的应用。针对五相和六相电机的特点,文中提供了具体的矢量选择策略和改进的滑模观测器算法。最后,文章分享了一些实用的经验和技术细节,如参数整定、谐波抑制和电流跟踪优化。 适合人群:具备一定电机控制基础知识的研发人员、工程师和研究人员。 使用场景及目标:适用于需要深入了解多相永磁同步电机控制算法的设计和优化,特别是在高性能驱动系统、工业自动化等领域。目标是提高系统的稳定性和效率,减少电流谐波和转矩波动。 其他说明:文章不仅提供了理论分析,还附带了大量的Matlab/Simulink代码片段,便于读者理解和实践。建议读者结合实际项目进行调试和验证,以获得更好的效果。

    智能穿搭_ComfyUI_模型换装_SegVITON_实时服_1744169167.zip

    智能穿搭_ComfyUI_模型换装_SegVITON_实时服_1744169167.zip

    3dmax插件a定点点击复制.ms

    3dmax插件

    新能源电动车整车控制器开发:基于飞思卡尔5634芯片的高精度模拟量采集与控制

    内容概要:本文详细介绍了基于飞思卡尔5634芯片的新能源电动车整车控制器(VCU)的开发过程和技术细节。主要内容涵盖硬件架构设计,如十路模拟量采集、高边和低边输出驱动及其保护机制;软件部分则涉及Matlab自动生成代码、扭矩控制逻辑以及CCP/INCA标定协议的应用。文中还分享了许多实战经验和常见问题解决方案,强调了量产级别的稳定性和安全性措施,如故障保护、标定接口的安全性以及高效的刷写方法。 适合人群:从事新能源汽车控制器开发的技术人员,尤其是有一定嵌入式系统开发经验的研发人员。 使用场景及目标:帮助开发者深入了解新能源电动车整车控制器的具体实现方式,掌握高效可靠的硬件设计和软件编程技巧,提高产品可靠性和性能。 其他说明:文章不仅提供了详细的代码片段和技术参数,还分享了大量来自实际项目的经验教训,有助于读者避开常见的开发陷阱并提升工作效率。

    【办公软件应用】DeepSeek+WPS配置指南:集成AI助手实现自动化文本处理功能

    、在VB编辑器中添加自定义函数CallDeepSeekAPI,该函数通过HTTP请求调用阿里云的千问2.5大模型API,并处理API响应。第二种方法是通过office-A内容概要I助手插件:本文档详细,用户可从介绍了DeepSeek+W指定网站下载并PS的配置与安装该插件使用方法,由,通过微信登录尚硅谷讲师宋红康讲解。并设置内置大模型,如硅首先介绍了手动配置基流动的满的方法,包括安装血版R1VBA插件,同时提供了交互、配置WPS测试和其他高级功能宏安全性、设置VB模块(如。最后,还提供了如何在W添加阿里云千PS中添加受问2.5大模型的API信任加载项以及更多使用文档的函数)、添加模块链接。 适合人群作为AI助手以及:适合有一定编程创建模板以实现基础和技术背景的宏的自动启用WPS用户,。其次,文档还提供了另一种配置尤其是希望在WPS中集成AI方式——通过office助手进行智能写作-AI助手进行配置,具体步骤和文档处理的用户。 使用场景涵盖下载安装office及目标:-AI助手、在WPS内①适用于需要在WPS中集成设置内置大模型AI助手进行智能并进行交互测试。最后,文档写作、文档处理的用户;给出了wps中添加受信任加载②帮助用户通过手动配置或使用项的方法和Office插件快速集成AI助手的使用DeepSeek+WPS文档链接,确保,提升工作效率;用户能够顺利使用③提供详细的相关功能。 适合人群:对WPS有基本了解,希望提升办公配置步骤,确保用户能够顺利完成配置并正常使用AI助手效率或尝试AI的各项功能。 阅读建议:由于涉及到辅助写作的办公具体的配置步骤和技术人员及开发者。 细节,建议读者使用场景及目标在阅读过程中仔细:①希望通过WPS集成Deep按照步骤操作,并参考提供的链接获取Seek实现智能文本处理、问答等功能更多信息。对于初次配置的用户,;②利用建议先尝试简单的office-AI助手进行文章续写手动配置,熟悉后再考虑使用插、创作等高级件。办公任务;③解决WPS中第三方插件加载受限的问题,确保各类插件正常运行。 阅读建议:本文档内容详尽,实际操作性强,建议读者按照文中步骤逐一尝试,遇到问题可参考提供的补充说明或访问指定网站获取更多信息。同时,对于API密钥的获取和配置部分,务必仔细阅读官方指引,确保顺利完成配置。

Global site tag (gtag.js) - Google Analytics