HttpServletResponse注意事项和细节和原理示意图

news2024/11/18 5:56:46

目录

HttpServletResponse

HttpServletResponse 介绍

HttpServletResponse 类图

向客户端返回数据方法

处理中文乱码问题-方案

处理中文乱码问题-方案 2

请求重定向

请求重定向原理示意图

应用实例 

DownServlet Java类

DownServletNew.java

xml配置

请求重定向注意事项和细节


HttpServletResponse

 

HttpServletResponse 介绍

1. 每次 HTTP 请求,Tomcat 会创建一个 HttpServletResponse 对象传递给 Servlet 程序去

使用。

2. HttpServletRequest 表示请求过来的信息,HttpServletResponse 表示所有响应的信息, 如果需要设置返回给客户端的信息,通过 HttpServletResponse 对象来进行设置

 

 

HttpServletResponse 类图

 

 

向客户端返回数据方法

 

1. 字节流 getOutputStream(); 常用于下载(处理二进制数据)

2. 字符流 getWriter(); 常用于回传字符串

3. (细节:)两个流同时只能使用一个。 使用了字节流,就不能再使用字符流,反之亦然,否则就会报错

处理中文乱码问题-方案

 

 

处理中文乱码问题-方案 2

 

 

请求重定向

1. 请求重定向指:一个 web 资源收到客户端请求后,通知客户端去访问另外一个 web资源,这称之为请求重定向

请求重定向原理示意图

 

应用实例 

需 求 : 演 示 请 求 重 定 向 的 使 用 当 访 问 DownServlet 下 载 文 件 , 重 定 向 到 DownServletNew 下载文件

DownServlet Java类

public class DownServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // System.out.println("DownServlet 被调用");
        // response.setContentType("application/x-tar;charset=utf-8");
        // PrintWriter writer = response.getWriter();
        // writer.print("hi");
        // writer.flush();
        // writer.close();

        //完成了自己业务
        //发出请求重定向-> DownServletNew

        //1. sendRedirect 本质就会 返回 302 状态码 Location: /servlet/downServletNew
        //2. 因此 302和 /servlet/downServletNew 是浏览器解析,而不是服务器
        //3. 浏览器在解析 /servlet/downServletNew =>
http://localhost:8080/servlet/downServletNew

        //4. 动态获取到application context
        String contextPath = getServletContext().getContextPath();
        System.out.println("contextPath= " + contextPath);

        //response.sendRedirect("/servlet/downServletNew");

        response.sendRedirect(contextPath + "/downServletNew");

        //response.sendRedirect("http://www.baidu.com");

        //第二种重定向的写法
        // System.out.println("第二种方式重定向...");
        // response.setStatus(302); //设置http响应的状态码
        // //设置http响应的 Location: /servlet/downServletNew
        // response.setHeader("Location", "/servlet/downServletNew");


    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}

DownServletNew.java

public class DownServletNew extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        System.out.println("DownServletNew 被调用");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.print("ok");
        writer.flush();
        writer.close();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}

xml配置

    <servlet>
        <servlet-name>DownServlet</servlet-name>
        <servlet-class>com.servlet.response.DownServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>DownServlet</servlet-name>
        <url-pattern>/downServlet</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>DownServletNew</servlet-name>
        <servlet-class>com.servlet.response.DownServletNew</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>DownServletNew</servlet-name>
        <url-pattern>/downServletNew</url-pattern>
    </servlet-mapping>

请求重定向注意事项和细节

1. 最佳应用场景:网站迁移,比如原域名是 www.hsp.com 迁移到 www.hsp.cn ,但是百度抓取的还是原来网址.

2. 浏览器地址会发生变化,本质是两次 http 请求.

3. 不能共享 Request 域中的数据,本质是两次 http 请求,会生成两个 HttpServletRequest对象

4. 不能重定向到 /WEB-INF 下的资源

5. 可以重定向到 Web 工程以外的资源, 比如到 www.baidu.com 【在前面的案例演示】

6. 重定向有两种方式, 推荐使用第 1 种

 

 

7. 动态获取到 application context

String contextPath = getServletContext().getContextPath();

System.out.println("contextPath= " + contextPath);

response.sendRedirect(contextPath + "/downServletNew");

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

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

相关文章

Ubuntu中用VSCode交叉编译程序放到从机上运行

文章目录 前言&#xff1a;1. 前期准备&#xff1a;1.1 树莓派系统烧录与虚拟机创建1.2 VSCode拓展下载 2. 树莓派交叉编译链查询与下载2.1 交叉编译链如何判断下哪一个2.2 交叉编译链各种版本含义 3. 开始操作3.1 创建helloworld程序3.2 配置交差编译链3.3 json文件说明与配置…

变压器感量计算

1、L:感量计算LBmax*Ae*Np*R/V0.3*17.1*123*1.8/1.01.15mH 第一步:根据经验确定一个大概的感量值。 第二步:实际Sense电压波形测试&#xff0c;判断有没磁饱和&#xff0c;频率是否正确。 W功率 L感量 变压器 …

学系统集成项目管理工程师(中项)系列08a_合同管理(上)

1. 合同&#xff08;Contract&#xff09; 1.1. 契约 1.2. 广义概念 1.2.1. 以确定各种权利与义务为内容的协议&#xff0c;即只要是当事人之间达成的确定权利义务的协议均为合同&#xff0c;不管它涉及哪个法律部门及何种法律关系 1.2.2. 合同除应包括民法中的合同外&…

HTTP请求UML时序图--(POST)图和(GET)图源码分析及代码分析和MIME 介绍--常用的状态码说明

目录 WEB 开发通信协议-HTTP 什么是 HTTP 协议 介绍 http 请求 hi.html 的 UML时序图 HTTP 请求包分析 1. HTTP 请求包分析(GET)图, 说明 可以通过浏览器抓包分析 代码说明 HTML部分 JAVA部分 web.xml部分 3) 完成测试&#xff0c;并抓包分析 HTTP 请求包分析(POST…

汽车车身钣金—车身连接方式

摘要&#xff1a; 当汽车车身构件遭受严重损伤失去维修意义时,汽车维修厂商一般采用更换部件或总成的方法进行修复。 车身连接方式 当汽车车身构件遭受严重损伤失去维修意义时,汽车维修厂商一般采用更换部件或总成的方法进行修复。 车身外部覆盖件大多由相对独立的板件相互…

场效应管(MOS)基础知识

MOSFET管是常用的半导体器件&#xff0c;又称为开关管、场效应管、英文名称&#xff08;MOSFET),简称MOS管 按元件封装工艺可分为两大类:插件类、贴片类。大部分MOSFET管的外观极其类似&#xff0c;常见的封装种类有T0-252&#xff0c;T0-251&#xff0c;T0-220&#xff0c;T0—…

清华发布工具学习框架,让ChatGPT操控地图、股票查询,贾维斯已来?

文&#xff5c;小戏 首先来考大家一道初中历史题&#xff1a;人区别于动物的根本标志是什么›&#xff1f;书上的标准答案是人会制造与使用工具。那么再来一道思考题&#xff0c;如果 AI 会使用甚至会制造工具了以后&#xff0c;会发生什么呢&#xff1f;是像贾维斯一样的 AI 私…

【Java基础】day16

day16 一、switch-case 和 if-else 谁更快&#xff1f; switch-case 在 switch-case 中&#xff0c;case 的值是连续的话&#xff0c;会生成一个 TableSwitch 来进行优化&#xff0c;这样的情况下&#xff0c;只需要在表中进行判断即可。 这里使用 0-4 的连续值来进行测试 如…

UE4: Niagara系统实现雨天效果,并跟随人物移动

目录 创建雨丝Niagara系统雨丝跟随人物移动 创建雨丝Niagara系统 1.创建一个Niagara系统 选择Fountain选项&#xff0c;点一下加号&#xff0c;再点完成&#xff1a; 命名一下打开&#xff1a; 先从粒子生成的方向入手&#xff0c;在Niagara的界面中删掉“Add Velocity in…

springboot+vue小区物业管理系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的小区物业管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风…

C11新特性之Lambda表达式

一.lambda语法 优点&#xff1a; 1.可以定义简短的函数。 2.使用lambda表达式使代码更紧凑&#xff0c;可读性更好。 语法&#xff1a; []表示不捕获任何变量[this]表示值传递方式捕捉当前的this指针 [&]表示引用传递方式捕捉所有父作用域的变量&#xff08;包括this&…

[架构之路-170]-《软考-系统分析师》-5-数据库系统-1-数据库模式、数据模型、数据库访问的标准接口

在当今的知识经济时代&#xff0c;信息是经济发展的战略资源&#xff0c;信息技术已经成为社会生产力中重要的组成部分。人们充分认识到&#xff0c;数据库是信息化社会中信息资源管理与开发利用的基础&#xff0c;当今的计算机信息系统也都以数据库技术为基础。对于一个国家来…

Linux DNS服务

DNS 作用 DNS是 域名系统 的英文缩写&#xff0c;作为将域名与IP地址相互映射的一个分布式数据库&#xff0c;让人可以通过域名访问互联网 正向解析 将域名解析为IP反向解析 根据IP查找对应域名 域名结构 http://www.sina.com.cn./ http://主机名.子域.二级域.顶级域.根域 / 每…

【Linux学习】信号——预备知识 | 信号产生 | 核心转储

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《Linux学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 信号 &#x1f514;信号&#x1f3b5;预备知识&#x1f3b5;信号处理方法的注册 &#x1f514;信…

C/C++每日一练(20230421)

目录 1. 位1的个数 &#x1f31f; 2. 递归和非递归求和 ※ 3. 俄罗斯套娃信封问题 &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 位1的…

大数据技术之Kafka——Kafka入门

目录 一、概述 1.1 为什么要有Kafka ​编辑 1.2 定义 1.3 消息队列 1&#xff09;消息队列的应用场景 2&#xff09;消息队列的两种模式 1.4 基础架构 二、Producer生产者 2.1 生产者消息发送流程 2.1.1 发送原理 2.2 异步发送API 2.2.1 普通异步发送 2.2.2 带回调…

第八章_Redis复制(replica)

是什么 官网地址 一句话 就是主从复制&#xff0c;master以写为主&#xff0c;Slave以读为主 当master数据变化的时候&#xff0c;自动将新的数据异步同步到其它slave数据库 能做什么 读写分离容灾恢复数据备份水平扩容支撑高并发 怎么使用 配从(库)不配主(库) 权限细节&am…

YOLOv8 更换主干网络之 MobileNeXt

《重新思考瓶颈结构以实现高效移动网络设计》 倒置残差块成为了移动网络架构设计的主流。它通过引入学习倒置残差和使用线性瓶颈的两个设计规则,改变了经典的残差瓶颈。在本文中,我们重新思考了这种设计改变的必要性,并发现它可能会带来信息丢失和梯度混淆的风险。因此,我们…

助力工业物联网,工业大数据之ODS层构建:代码结构及修改【九】

文章目录 01&#xff1a;ODS层构建&#xff1a;代码结构及修改02&#xff1a;ODS层构建&#xff1a;连接代码及测试03&#xff1a;ODS层构建&#xff1a;建库代码及测试04&#xff1a;ODS层构建&#xff1a;建表代码及测试 01&#xff1a;ODS层构建&#xff1a;代码结构及修改 …

漏扫常见(可验证)漏洞复现方法

SSL/TLS协议信息泄露漏洞(CVE-2016-2183) 检测到目标服务支持SSL弱加密算法 检测到目标服务支持SSL中等强度加密算法 nmap -sV -p 端口 --script ssl-enum-ciphers 目标ipSSH支持弱加密算法 nmap -sV -p 端口 --script ssh2-enum-algos 目标ipApache Tomcat示例脚本信息泄露…