当前位置: 首页 > article >正文

javaweb--09

一、Response 继承体系与核心概念1. 继承结构plaintextServletResponseJava 提供的响应对象根接口通用协议响应 ↑ 继承 HttpServletResponseJava 提供的对 HTTP 协议封装的响应对象接口HTTP 专用 ↑ 实现 ResponseFacadeTomcat 定义的实现类Tomcat 内部使用开发者面向接口编程核心逻辑Tomcat 为每个请求创建Response对象传入 Servlet 的service()方法用于设置 HTTP 响应数据请求处理完成后销毁。2. Request Response 分工Request获取客户端发送的 HTTP 请求数据请求行、请求头、请求体Response设置服务器返回给客户端的 HTTP 响应数据响应行、响应头、响应体二、Response 设置响应数据3 大部分HTTP 响应分为响应行、响应头、响应体三部分对应不同的设置方法1. 响应行相关方法响应行格式HTTP/1.1 200 OK核心方法void setStatus(int sc)作用设置响应状态码常用状态码200成功、302重定向、404资源未找到、500服务器内部错误2. 响应头相关方法响应头是服务器发送的键值对信息如Content-Type: text/html核心方法void setHeader(String name, String value)作用设置响应头键值对常用响应头Content-Type告知浏览器响应数据类型、Location重定向地址、Refresh定时刷新3. 响应体相关方法响应体是服务器返回给客户端的核心数据如 HTML、文本、文件等PrintWriter getWriter()获取字符输出流用于输出文本数据HTML、普通字符串等ServletOutputStream getOutputStream()获取字节输出流用于输出二进制数据图片、文件下载等三、Response 响应字符数据常用场景1. 基础使用步骤java运行// 1. 通过Response对象获取字符输出流 PrintWriter writer resp.getWriter(); // 2. 写数据文本/HTML writer.write(aaa); writer.write(h1aaa/h1);2. 解决中文乱码问题关键必须在获取流之前设置响应的编码格式和Content-Type让浏览器以 UTF-8 解析java运行// 推荐写法一行代码同时设置编码和Content-Type response.setContentType(text/html;charsetutf-8); // 等价写法不推荐分两步 // response.setHeader(content-type, text/html); // response.setCharacterEncoding(utf-8); // 再获取流、写数据 PrintWriter writer response.getWriter(); writer.write(你好); writer.write(h1aaa/h1);核心要求必须在第一次获取流之前调用设置编码的方法否则设置无效四、Response 两种输出流核心对比表格流类型获取方法适用场景编码问题字符输出流PrintWriter getWriter()输出文本、HTML 等字符数据需手动设置 UTF-8解决中文乱码字节输出流ServletOutputStream getOutputStream()输出图片、文件等二进制数据无编码问题直接写字节五、字符输出流getWriter()详解1. 基础使用步骤java运行// 1. 通过Response对象获取字符输出流 PrintWriter writer resp.getWriter(); // 2. 写数据文本/HTML writer.write(aaa); writer.write(h1aaa/h1);2. 关键注意事项流的关闭该流不需要手动关闭随着响应结束、response 对象销毁由服务器自动关闭中文乱码问题乱码原因字符输出流默认编码为ISO-8859-1不支持中文解决方案在获取流之前设置响应编码和 Content-Typejava运行// 推荐写法一行代码同时设置编码和Content-Type resp.setContentType(text/html;charsetutf-8);必须在第一次获取流之前调用否则设置无效六、字节输出流getOutputStream()详解1. 基础使用步骤java运行// 1. 通过Response对象获取字节输出流 ServletOutputStream outputStream resp.getOutputStream(); // 2. 写数据字节数组/二进制数据 outputStream.write(字节数据);2. 工具类简化IOUtilscommons-io1导入 Maven 依赖xmldependency groupIdcommons-io/groupId artifactIdcommons-io/artifactId version2.6/version /dependency2使用方法java运行// 一行代码完成流的复制简化文件下载等操作 IOUtils.copy(输入流, 输出流);适用场景文件下载、图片回显等需要传输二进制数据的场景优势无需手动循环读写自动处理流的关闭七、重定向Redirect资源跳转方式1. 重定向原理重定向是一种客户端发起的资源跳转流程如下浏览器请求资源 A资源 A 返回302状态码 Location: 资源B路径响应头浏览器收到响应自动向资源 B 发起新的请求资源 B 处理请求返回响应给浏览器2. 实现方式方式 1原生写法分步设置java运行// 设置302状态码 resp.setStatus(302); // 设置Location响应头指定跳转路径 resp.setHeader(location, /request-demo/resp2);方式 2简化写法推荐java运行// 一行代码完成重定向自动设置302和Location response.sendRedirect(/request-demo/resp2);3. 重定向特点浏览器地址栏路径会发生变化变为资源 B 的路径可以跳转到任意外部资源其他服务器、其他网站是两次请求无法使用request共享数据每次请求对应独立的 request 对象八、请求转发Forward服务器内部跳转1. 转发原理请求转发是服务器内部的资源跳转流程如下浏览器请求资源 A资源 A 在服务器内部将请求转发给资源 B资源 B 处理请求返回响应给浏览器整个过程浏览器只发起一次请求感知不到转发2. 实现方式java运行// 获取请求转发器指定资源B路径调用forward方法完成转发 req.getRequestDispatcher(资源B路径).forward(req, resp);3. 转发特点浏览器地址栏路径不发生变化始终是资源 A 的路径只能转发到当前服务器的内部资源是一次请求可以在转发的资源间通过request共享数据4. Request 域对象转发共享数据通过request对象在转发的资源间传递数据方法如下表格方法作用void setAttribute(String name, Object o)存储数据到 request 域中Object getAttribute(String name)根据 key 获取值void removeAttribute(String name)根据 key 删除该键值对九、重定向 vs 请求转发 核心对比表格对比维度重定向Redirect请求转发Forward跳转本质客户端跳转两次请求服务器内部跳转一次请求地址栏变化变化显示目标资源路径不变显示原资源路径跳转范围可跳外部资源任意 URL仅可跳当前服务器内部资源请求共享无法共享 request 数据可共享 request 数据状态码302200路径要求需加虚拟目录项目访问路径无需加虚拟目录十、路径问题开发高频坑点1. 核心规则谁使用路径浏览器使用的路径必须加虚拟目录项目访问路径服务器端使用的路径不需要加虚拟目录2. 常见场景对照表表格场景使用者是否加虚拟目录示例a href路径超链接浏览器必须加a href/request-demo/resp1跳转/aform action路径表单提交浏览器必须加form action/request-demo/resp2resp.sendRedirect(路径)重定向浏览器必须加response.sendRedirect(/request-demo/resp3);req.getRequestDispatcher(路径)请求转发服务器不需要加request.getRequestDispatcher(resp4).forward(req, resp);3. 动态获取虚拟目录推荐避免硬编码java运行// 动态获取项目虚拟目录适配不同部署环境 String contextPath request.getContextPath(); // 重定向时拼接 response.sendRedirect(contextPath /resp2);十一、完整实战示例Servlet 综合使用java运行WebServlet(/resp1) public class ResponseDemo1 extends HttpServlet { Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1. 设置响应编码解决中文乱码 response.setContentType(text/html;charsetutf-8); // 2. 响应字符数据 PrintWriter writer response.getWriter(); writer.write(h1这是响应测试/h1); writer.write(你好Response); // 3. 重定向示例 // response.sendRedirect(request.getContextPath() /resp2); // 4. 请求转发示例共享数据 request.setAttribute(msg, 转发测试数据); request.getRequestDispatcher(/resp2).forward(request, response); } Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } WebServlet(/resp2) public class ResponseDemo2 extends HttpServlet { Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(text/html;charsetutf-8); // 获取转发共享的数据 Object msg request.getAttribute(msg); response.getWriter().write(h1resp2 收到数据 msg /h1); } Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

相关文章:

javaweb--09

一、Response 继承体系与核心概念1. 继承结构plaintextServletResponse(Java 提供的响应对象根接口,通用协议响应)↑ 继承 HttpServletResponse(Java 提供的对 HTTP 协议封装的响应对象接口,HTTP 专用)↑ 实…...

免配置开箱即用:SenseVoice-Small语音识别镜像实战教程

免配置开箱即用:SenseVoice-Small语音识别镜像实战教程 1. 认识SenseVoice-Small语音识别镜像 SenseVoice-Small是一个基于ONNX量化的多语言语音识别服务,它最大的特点就是"开箱即用"。这个镜像已经预装了所有必要的依赖和环境,你…...

OpenClaw 核心工具与策略控制

第 1 章 引言OpenClaw 是一个开源的个人 AI 助手框架,支持多渠道集成,包括 WhatsApp、Telegram、Discord、Slack 等主流 messaging 平台。通过灵活的插件系统,OpenClaw 能够连接各种外部服务,实现跨平台的智能助手功能。工具系统在…...

OpenClaw 语音控制之 移动端麦克风接入

17.1 方案架构 17.1.1 整体架构 移动端麦克风接入 OpenClaw 的整体架构可分为四层: ┌──────────────────────────────────────────────────────────┐ │ 移动端 (Client) …...

别再纠结了!给Unity新手的URP和HDRP选择指南(附项目类型建议)

Unity新手避坑指南:URP与HDRP的黄金选择法则 刚完成Unity基础教程的你,摩拳擦掌准备开发人生中第一个正式项目时,突然被一堆专业术语砸得头晕目眩——SRP、URP、HDRP...这些字母组合到底意味着什么?为什么Unity不能像其他软件那样…...

企业微信JSSDK避坑指南:解决invalid signature和invalid url domain错误

企业微信JSSDK实战避坑:从invalid signature到invalid url domain的终极解决方案 第一次在企业微信H5项目中集成JSSDK时,我盯着控制台里鲜红的"invalid signature"错误整整两天。后端同事信誓旦旦说签名算法绝对正确,前端检查了无数…...

Flink架构的核心组件:Task、Job、TaskManager与JobManager

文章目录前言一、整体架构概览二、JobManager — 集群的“大脑”2.1 定义与职责2.2 核心职责2.3 内部组件2.4 代码示例:提交作业到JobManager三、TaskManager — 真正的“执行者”3.1 定义与职责3.2 核心职责3.3 Slot — 资源的最小单位3.4 TaskManager配置示例四、…...

Pixel Couplet Gen实战教程:微信小程序订阅消息推送用户定制春联结果

Pixel Couplet Gen实战教程:微信小程序订阅消息推送用户定制春联结果 1. 项目介绍与核心功能 Pixel Couplet Gen是一款融合了传统春节文化与现代像素艺术风格的AI春联生成器。通过ModelScope大模型驱动,我们打造了一个充满复古游戏美学的数字春联创作平…...

AdaIN风格迁移实战:如何用预训练VGG-19快速打造你的艺术滤镜(附完整代码)

AdaIN风格迁移实战:如何用预训练VGG-19快速打造你的艺术滤镜(附完整代码) 想象一下,你只需要几行代码就能把梵高的《星空》风格转移到自己的照片上,或者用莫奈的笔触渲染旅行风景。AdaIN(自适应实例归一化&…...

【生成式AI服务治理黄金标准】:20年架构师亲授5大核心管控域与落地Checklist

第一章:生成式AI应用服务治理方案概览 2026奇点智能技术大会(https://ml-summit.org) 生成式AI应用服务的规模化落地正面临模型输出不可控、接口调用越权、敏感数据泄露、合规审计缺失等系统性挑战。治理方案需覆盖服务全生命周期——从模型注册、API网关接入、实时…...

Flutter 在智能家居应用开发中的实践与优化

引言 随着物联网技术的快速发展,智能家居已成为现代生活的重要组成部分。用户通过移动应用控制家庭设备的需求日益增长,这要求开发高效、跨平台的应用解决方案。Flutter 作为 Google 推出的开源 UI 框架,凭借其跨平台能力(支持 Android 和 iOS)、热重载特性和丰富的 widg…...

当APP说‘不走代理’时,我是如何用Postern+Charles+Burpsuite搞定抓包的?

突破APP代理限制的流量捕获实战解析 在移动应用安全测试领域,数据流量分析是最基础却最关键的环节之一。许多应用开发者为了提升安全性,会在代码中设置setProxy(null)或类似指令,强制应用流量绕过系统代理设置。这种防御机制让传统基于HTTP代…...

微信小程序调用Pixel Couplet Gen:灰度发布与版本回滚策略

微信小程序调用Pixel Couplet Gen:灰度发布与版本回滚策略 1. 项目背景与核心价值 Pixel Couplet Gen是一款基于ModelScope大模型驱动的创新型春联生成器,它将传统春节文化与现代像素游戏美学完美融合。这款应用最大的特色在于: 视觉革新&…...

CefFlashBrowser:如何在Flash退役后继续畅玩经典游戏和课件?

CefFlashBrowser:如何在Flash退役后继续畅玩经典游戏和课件? 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 随着Adobe Flash Player的正式退役,无数经…...

企业级AI应用隐私合规倒计时:30天完成ISO/IEC 27001:2022 + ISO/IEC 27701:2019双认证路径

第一章:生成式AI应用数据隐私保护 2026奇点智能技术大会(https://ml-summit.org) 生成式AI在内容创作、代码生成、客服对话等场景中展现出强大能力,但其训练与推理过程常涉及敏感用户数据,引发严重的隐私泄露风险。模型记忆(mem…...

jdk1.8下载与安装教程2026(附安装包)

一、下载安装 1、官网需要注册登录,推荐百度网盘自提, jdk安装包如下 https://pan.baidu.com/s/1zkXvKw_8PE0qV1t2PopZew?pwd1111 提取码:1111 2、下载后直接点击安装程序,点击【运行】。这里我使用的是64位的。 3、点击【下一…...

常见问题解决:Fish Speech 1.5生成失败、杂音问题排查

常见问题解决:Fish Speech 1.5生成失败、杂音问题排查 1. 问题概述:Fish Speech 1.5常见故障表现 Fish Speech 1.5作为一款创新的文本转语音工具,在实际使用中可能会遇到两类典型问题: 生成失败:点击生成按钮后无响…...

鸿蒙开发应用性能优化技巧

一、性能优化的核心维度 鸿蒙应用性能优化主要围绕以下四个维度展开:优化维度关键指标优化目标启动性能冷启动耗时≤800ms内存管理内存峰值≤150MB渲染流畅度帧率稳定性≥55fps线程效率线程阻塞率≤8%二、关键优化技巧与代码实现 1. 长列表懒加载优化 问题&#xff…...

西门子S7-1200 PLC控制的六台十层电梯系统设计

本文还有配套的精品资源,点击获取简介:本案例涉及一个为六台电梯服务于十层建筑的控制系统设计,涵盖西门子S7-1200 PLC的编程和相关文档。该系统能够智能调度和控制电梯,通过TIA Portal环境使用多种编程语言实现电梯的运行控制。压…...

(207页PPT)工业大数据采集处理与应用(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 https://download.csdn.net/download/AI_data_cloud/89624187 资料解读:工业大数据采集、处理与应用 详细资料请看本解读文章的最后内容。 本文件系统性地阐述了工业大数据从基础概…...

Git-RSCLIP在VSCode中的开发与调试技巧

Git-RSCLIP在VSCode中的开发与调试技巧 1. 开发环境搭建 在开始Git-RSCLIP项目开发之前,我们需要先配置好VSCode开发环境。这个过程其实很简单,跟着步骤走就能搞定。 首先确保你已经安装了Python环境,建议使用Python 3.8或更高版本。然后在…...

免费在线3D模型查看器终极指南:浏览器中轻松预览和测量任何3D设计文件

免费在线3D模型查看器终极指南:浏览器中轻松预览和测量任何3D设计文件 【免费下载链接】Online3DViewer A solution to visualize and explore 3D models in your browser. 项目地址: https://gitcode.com/gh_mirrors/on/Online3DViewer 还在为查看3D模型而烦…...

从工具到平台:我为何要停下一切,重构“大雄自习室”?

当你的产品无人问津,账户余额只减不增时,你会怎么做? 一、现实:当热情撞上生存 大家好,我是大雄。去年10月,我裸辞了。 原因很简单——身体发出了警报。那段时间经常胸闷,整个人状态很差。辞职…...

实战指南:用 Python + NLP 搭建一套轻量级 AI 舆情监控系统

在信息爆炸的 2026 年,舆情风险已成为企业品牌管理的“头号杀手”。传统的关键词匹配早已无法应对多模态、碎片化的传播环境。作为一名技术负责人,如何快速构建一套具备情感分析、热点聚类和实时预警能力的 AI 舆情系统?本文将带你通过 Pytho…...

网络安全入行门槛越来越高:这 4 个证书没用,这 3 个才值钱

开篇:2026 年,安全入行真的越来越难了吗? 我看了 2025 年全年和 2026 年 Q1 的 1000 份网络安全招聘 JD,访谈了 20 多位安全团队负责人,发现一个明显的趋势: 入行门槛确实在提高,但‘难’的不…...

你还在手动整理会议笔记?2026奇点大会演示的AI学习助手已实现“语义意图捕获→知识脉络自构→能力缺口反推”全链路闭环

第一章:2026奇点智能技术大会:AI学习助手 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次发布开源AI学习助手框架 SingularityLearner v1.0,专为开发者与教育者设计,支持多模态知识理解、上下文感知式提问引导及自适…...

暖玛士发布农业大棚供暖定制方案

改写冬季种植供暖规则 针对农业大棚冬季供暖痛点,暖玛士推出全新专属定制解决方案:○ 超薄不占地:发热板厚度仅数毫米,可灵活铺挂于育苗床、作物侧方,完全不占用耕作空间; ○ 模块化适配:…...

紧急收藏,2026开年AI杀疯了!前端人必看,大模型直接改写你的职业命运

2026开年以来,AI技术的爆发式发展已然席卷整个技术圈,而受影响最直接、最深刻的,当属咱们前端开发者——它不再是“锦上添花”的技术补充,而是实实在在改写前端人职业轨迹、决定职业存亡的核心变量,建议小白和正在转型…...

ForgeAdmin 新成员:AI 赋能的数据可视化大屏平台

ForgeAdmin 新成员:AI 赋能的数据可视化大屏平台 基于 GoView 二次开发,集成 AI 智能生成能力,对接真实后台接口,让数据大屏开发效率提升 10 倍。 一、项目背景 在数字化转型的浪潮中,数据可视化大屏已经成为企业展示…...

收藏!字节大模型岗硕士月薪5-6万!AI高薪窗口期,小白如何抓住机会?

文章指出字节跳动大模型岗位薪资高达5-6万/月,年薪可达70-80万,引发行业关注。大模型方向门槛提升,硕士是起步要求,但需对Transformer架构等有深刻理解。文章建议深耕具体方向,重视论文或开源项目,尽早实习…...