JavaWeb-Servlet服务连接器(三)

目录

Response响应对象

1.基本功能

2.重定向

3.路径

4.服务器输出数据到浏览器


Response响应对象

1.基本功能

设置响应行:格式为 HTTP/1.1 200 OK,可以使用 setStatus(int sc) 方法设置状态码为 200 表示成功。

方法名称描述
setStatus(int sc)设置状态码为给定的整数值。

设置响应头:使用 setHeader(String name, String value) 方法来设置响应头信息,比如 setHeader("Content-Type", "text/html") 设置响应内容类型为 HTML。

方法名称描述
setHeader(String name, String value)设置指定名称的请求头为给定的值。

设置响应体:获取输出流:

方法名称描述
getWriter()获取字符输出流,用于向客户端发送字符数据。
getOutputStream()获取字节输出流,用于向客户端发送字节数据。

使用输出流将数据输出到客户端浏览器。


2.重定向

 重定向通过response对象的sendRedirect("目标地址")进行跳转

方法名称描述
sendRedirect(String location)通过指定目标地址进行重定向跳转。设置响应的 Location 头,使客户端重新向指定的目标地址发送请求。
package com.company;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.concurrent.TimeUnit;@WebServlet("/Demo9")
public class Demo9 extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {try {
//            等待三秒后跳转回到主页面TimeUnit.SECONDS.sleep(3);}catch (Exception e){e.printStackTrace();}
//        本站资源进行跳转
//        resp.sendRedirect("/com_alphamilk_war_exploded/Demo8");
//        外部站点资源进行跳转resp.sendRedirect("https://blog.csdn.net/dogxixi?spm=1000.2115.3001.5343");}
}

 访问后就自动跳转到CSDN中·

 response对象重定向的特点(sendRedirect)

  1. 地址栏会发生变化
  2. 重定向可以访问其他站点(服务器)的资源
  3. 重定向是二次请求,但是重定向后不能使用request的共享变量

request对象的请求转发特定(Forward)

  1. 地址栏不会发生变化
  2. 转发只能访问当前服务器下的资源
  3. 转发是一次请求

3.路径

相对路径(通过访问当前的资源和目标的资源之间的相对位置关系):

  1.      同级目录:. /资源名称
  2.      后退一个目录: . . /资源名称

特点:无法确定唯一的资源

绝对路径:根据请求对象分类

  • 如果是客户端浏览器访问的就需要加上虚拟目录
  • 如果是服务器自行使用则不需要加虚拟目录

特点:通过绝对路径可以确定唯一的资源.

注意:但是在重定向时,为了保证跳转的准确性,需要将虚拟目录包含在重定向的路径中。例如:resp.sendRedirect("/context_path/Demo8")

问题引出:

        由于为了重定向的准确性,一般会在重定向的路径中加入虚拟目录,但是如果虚拟目录经常发生变化,就需要相应的所有有关的路径全部修改,会造成大量的时间浪费,所以引入了动态路径的概念。具体原理是通过request对象的方法的获取路径getContextPath+/资源名。

案例代码:

package com.company;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.concurrent.TimeUnit;@WebServlet("/Demo9")
public class Demo9 extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {try {
//            等待三秒后跳转回到主页面TimeUnit.SECONDS.sleep(3);}catch (Exception e){e.printStackTrace();}
//        本站资源进行跳转(动态路径)resp.sendRedirect(req.getContextPath()+"/Demo5");}
}

4.服务器输出数据到浏览器

 通过流输出内容,具体方法如下:

1.通过字符流实现数据发送

package com.company;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;@WebServlet("/Demo10")
public class writer extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        创建字符流输出对象PrintWriter writer = resp.getWriter();
//        输出数据writer.write("<h1>Hello World</h1>" +"<h1>你好 世界</h1>");writer.close();}
//    统一方法操作@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);}
}

可以发现用了字符流输出中文的时候出现了乱码,原因在于:使用编码的字符集不一致(字符集使用的是GBK 而流使用的是ISO - 8859-1),只需要告诉浏览器服务器用的编码方式,浏览器就会自动进行相应编码转换

 修改后代码

package com.company;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;@WebServlet("/Demo10")
public class writer extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//        告诉浏览器服务器使用编码方式是utf-8resp.setHeader("content-type","text/html;charset=utf-8");//        创建字符流输出对象PrintWriter writer = resp.getWriter();
//        输出数据writer.write("<h1>Hello World</h1>" +"<h1>你好 世界</h1>");writer.close();}
//    统一方法操作@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);}
}

2.字节流发送数据

 原理同上

案例:

package com.company;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;@WebServlet("/Demo11")
public class writeByte extends HttpServlet{@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        告诉浏览器编码格式为utf-8resp.setHeader("content-type","text/html;charset=utf-8");
//        创建字节流ServletOutputStream sos = resp.getOutputStream();
//        使用字节流输出sos.write("你好啊".getBytes(StandardCharsets.UTF_8));}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}
}

如果不了解字符流和字节流和打印流的知识可以在下面的章节中了解更多内容Java IO(File、字节输入输出流、字符输入输出流、打印流)附带相关面试题_Alphamilk的博客-CSDN博客


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

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

相关文章

docker下载和案例

文章目录 Docker安装一,根据官方文档安装二,根据我以下方式 Docker配置错误导致漏洞一,CRLF注入漏洞介绍在nginx中该漏洞例子解决方法 目录穿越漏洞介绍解决方法 Docker安装 一,根据官方文档安装 官方文档 二,根据我以下方式 docker安装要求&#xff1a; Docker要求Ce…

用户数据报协议UDP

UDP的格式 载荷存放的是:应用层完整的UDP数据报 报头结构: 源端口号:发出的信息的来源端口目的端口号:信息要到达的目的端口UDP长度:2个字节(16位),即UDP总长度为:2^16bit 2^10bit * 2^6bit 1KB * 64 64KB.所以一个UDP的最大长度为64KBUDP校验和:网络的传输并非稳定传输,…

【leetcode】前缀和

内容摘抄自&#xff1a; 小而美的算法技巧&#xff1a;前缀和数组 | labuladong 的算法小抄 一维数组的前缀和 看这个 preSum 数组&#xff0c;若想求索引区间 [1, 4] 内的所有元素之和&#xff0c; 就可以通过 preSum[5] - preSum[1] 得出。 class NumArray {private:// 前缀…

wordpress数据表中标签和分类如何区分?

wordpress中标签和分类是什么关系怎么区分&#xff1f;最后有一个群的网友告诉了我文章ID和标签ID的关系是放在了wp_term_relationships表中&#xff0c;然后我百度了下这个表的结构和相关介绍&#xff0c;发现果然如此&#xff0c;先把文章保存起来&#xff1a; wp_term_rela…

消息中间件 Asio (C++)

折腾了一上午&#xff0c;看到这个结果的时候泪目了兄弟闷&#xff0c;讲真。我的asio客户端成功收到服务端发来的消息了。虽然这确实是极其智障又简单的入门哈哈 下载独立版本 asio网络通信库新建cmake工程&#xff0c;CMakeLists.txt加载asioasio最简单的服务端和客户端代码…

【elasticSearch系】3.完整搭建详尽版elk

话不多说,我们先看下经典的elk 是由哪些组件搭建组合起来的 elasticSearch和kibana搭建 可以查看之前我搭建elasticsearch和kibana 的这篇文章 logstash搭建 为了和之前我搭建elasticsearch和kibana版本保持一致,这里我们还是选择7.17.3 下载地址 点击下载,这里为了方…

wangEditor5实现@评论功能

需求描述&#xff1a;在输入框输入后显示用户列表&#xff0c;实现人功能 当前环境&#xff1a;vue3viteelementPluswangEditor5 需要插件&#xff1a;wangeditor/plugin-mention 安装插件&#xff1a;npm i wangeditor/plugin-mention 输入框组件分两部分&#xff1a;1. wa…

谈谈对Spring MVC的理解

问题分析&#xff1a; SpringMVC 是一种基于 Java 语言开发&#xff0c;实现了 Web MVC 设计模式&#xff0c;请求驱动类型 的轻量级 Web 框架。 SpringMVC采用了 MVC 架构模式的思想&#xff0c;通过把 Model&#xff0c;View&#xff0c;Controller 分离&#xff0c;将 Web 层…

基于vue3+webpack5+qiankun实现微前端

一 主应用改造&#xff08;又称基座改造&#xff09; 1 在主应用中安装qiankun(npm i qiankun -S) 2 在src下新建micro-app.js文件&#xff0c;用于存放所有子应用。 const microApps [// 当匹配到activeRule 的时候&#xff0c;请求获取entry资源&#xff0c;渲染到containe…

软件测试基础篇——MySQL

MySQL 1、数据库技术概述 数据库database&#xff1a;存放和管理各种数据的仓库&#xff0c;操作的对象主要是【数据data】&#xff0c;科学的组织和存储数据&#xff0c;高效的获取和处理数据SQL&#xff1a;结构化查询语言&#xff0c;专为**关系型数据库而建立的操作语言&…

JavaScript类

JavaScript 类(class) 类是用于创建对象的模板。 我们使用 class 关键字来创建一个类&#xff0c;类体在一对大括号 {} 中&#xff0c;我们可以在大括号 {} 中定义类成员的位置&#xff0c;如方法或构造函数。 每个类中包含了一个特殊的方法 constructor()&#xff0c;它是类…

vue3项目中引入dialog插件,支持最大最小化、还原、拖拽

效果图&#xff1a; 上图是layui-vue组件库中的layer插件&#xff0c;我的项目使用的是element-plus组件库&#xff0c;在用不上layui组件库的情况下&#xff0c;就单独引入layui/layer-vue这个弹层插件就可以了 npm地址&#xff1a;layui/layer-vue - npm layui-vue组件库地址…

UnrealEngine - 网络同步之连接篇

1 连接过程 - 握手 传统的 C/S 架构下&#xff0c;Client 和 Server 通常会建立一条抽象的 Connection&#xff0c;用来进行两端的通信。 UE 的官方文档中提供了 Client 连接到 Server 的示例 &#xff0c;简单来说分为如下几步&#xff1a; 打包构建好 Client 和 Server 进程…

11-数据结构-栈和队列的应用(C语言)

栈和队列的应用 目录 栈和队列的应用 一、括号匹配&#xff08;栈&#xff09; 二、表达式的各种转换 (1)中缀转后缀(手工) (2)后缀转中缀表达式(手工) (3)中缀转后缀(栈) (4)中缀转后缀&#xff08;树&#xff09; (5)后缀表达式求值 (6)中缀表达式求值&#xff08;栈…

jackson库收发json格式数据和ajax发送json格式的数据

一、jackson库收发json格式数据 jackson库是maven仓库中用来实现组织json数据功能的库。 json格式  json格式一个组织数据的字符文本格式&#xff0c;它用键值对的方式存贮数据&#xff0c;json数据都是有一对对键值对组成的&#xff0c;键只能是字符串&#xff0c;用双引号包…

时序预测 | Matlab实现基于GRNN广义回归神经网络的电力负荷预测模型

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 时序预测 | Matlab实现基于GRNN广义回归神经网络的电力负荷预测模型 1.Matlab实现基于GRNN广义回归神经网络的电力负荷预测模型 2.单变量时间序列预测; 3.多指标评价,评价指标包括:R2、MAE、MBE等,代码质量极高…

excel 之 VBA

1、excel和VBA 高效办公&#xff0c;把重复性的工作写成VBA代码&#xff08;VB代码的衍生物&#xff0c;语法和VBA相同&#xff09;。 首先打开开发工具模式&#xff0c;如果没有选显卡&#xff0c;需要手动打开 打开程序编辑界面 快捷键 altF11一般操作 程序调试&#xf…

概率论与数理统计:第二、三章:一维~n维随机变量及其分布

文章目录 Ch2. 一维随机变量及其分布1.一维随机变量1.随机变量2.分布函数 F ( x ) F(x) F(x)(1)定义(2)分布函数的性质 (充要条件)(3)分布函数的应用——求概率3.最大最小值函数 2.一维离散型随机变量及其概率分布(分布律)3.一维连续型随机变量及其概率分布(概率密度)4.一般类型…

深度学习关键要素:数据集汇总与分享

引言 在深度学习的应用中&#xff0c;数据被认为是最重要的因素之一。因此&#xff0c;选择一个好的数据集对于深度学习的成功至关重要。在选择数据集时&#xff0c;不仅需要关注数据量的大小、多样性以及质量&#xff0c;还要考虑数据集是否代表了所研究问题的真实情况。本文…

2023国赛数学建模B题思路分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…