[ServletJSP] HttpServletResponse的使用

2024-06-05 08:38

本文主要是介绍[ServletJSP] HttpServletResponse的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用HttpServletResponse可以对浏览器进行响应。大部分情况下,可以使用setContentType()设置响应类型,使用getWriter()取得PrintWriter对象,而后使用PrintWriter对象的println()等方法输出HTML内容。

还可以进一步使用setHeader()、addHeader()等方法进行响应标头的设置,或者是使用sendRedirect()、sendError()方法,对客户端要求重定向网页,或是传送错误消息状态。也可以使用getOutputStream()取得ServletOutputStream,直接使用串流对象对浏览器进行字节数据的响应。

对浏览器进行响应

当浏览器收到响应时,必须知道如何处理响应的数据,这个信息来自于HTTP响应的content-type标头,该标头的设置值为MIME(Multipurpose Internet Mail Extentions)类型,常见的设置有text/html、application/pdf、application/jar、application/x-zip、image/jpeg等。

setContentType()会自动设置content-type响应标头,只要指定MIME类型就可以了,必要时可以附加一个编码规格,容器会使用指定的字符编码来作为响应对象处理编码的方式(默认是ISO-8859-1)。响应对象处理编码的方式亦可以使用setCharacterEncoding()来设置,使用getCharacterEncoding()则可以取得代表编码方式的字符串。

setContentType()可以自动设置content-type的标头。如果要自行设置响应标头,则可以使用setHeader()、addHeader()等方法。语句:

response.setContentType("text/html;charset=utf-8");

等同于以下的程序:

response.setHeader("content-type", "text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");

如果标头名称相同,后续的setHeader()设置值会覆盖先前的设置值,如果打算在一个标头上附加值,则应使用addHeader()方法。
另外还有setIntHeader()、setDateHeader()、addIntHeader()、addDateHeader()等方法,方便以对应的类型来设置标头值。

sendRedirect()与sendError()

RequestDispatcher的forward()方法会将请求转发至指定的URL,这个动作是在Web容器中进行的,浏览器并不会知道请求被转发,地址栏不会有变化。
使用HttpServletResponse的sendRedirect()可以要求浏览器重新请求另一个URL,又称为重定向,使用时可指定绝对URL或相对URL。这个方法会在回应中设置HTTP状态吗301以及Location标头,浏览器接到这个标头后,会重新使用GET方法请求所指定的URL,因此在地址栏上会有URL的更改。

如果再处理请求的过程中发现一些错误,而你有想要发送服务器默认的状态与错误消息,则可以使用sendError()方法。例如,如果根据请求参数必须返回的数据根本不存在,则可以执行如下语句送出错误消息。

response.sendError(HttpServletResponse.SC_NOT_FOUND);

SC_NOT_FOUND会令服务器响应404状态码。如果想使用自定义的消息来替换默认的消息正文,则可以使用sendError()的另一个版本。

response.sendError(HttpServletResponse.SC_NOT_FOUND, "笔记文件");

sendRedirect()和sendError()方法必须在响应未确认输出前执行,否则会提示IllegalStateException。

ServletOutputStream的使用

对浏览器进行字节输出时可以使用HttpServletResponse的getOutputStream()方法取得ServletOutputStream实例,它是OutputStream的子类。

一个简单地例子如下,用户输入正确的密码时可以取得所提供的PDF电子书。
ebook.html:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><form action="ebook.do" method="post">username: <input type="text" name="username" /><br>password: <input type="text" name="password" /><br><input type="submit" value="SUBMIT" /></form>
</body>
</html>

Ebook.java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@WebServlet("/ebook.do")
public class Ebook extends HttpServlet{protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String password = request.getParameter("password");if (password.compareTo("123") == 0) {response.setContentType("application/pdf");InputStream in = this.getServletContext().getResourceAsStream("WEB-INF/libsvm.pdf");OutputStream out = response.getOutputStream();int len = -1;byte[] buffer = new byte[1024];while ((len = in.read(buffer)) != -1) {out.write(buffer, 0, len);}in.close();out.close();} else {response.sendError(HttpServletResponse.SC_NOT_FOUND, "密码错误");}}
}

getServletContext()可以取得ServletContext对象,这个对象代表当前的Web应用程序;getResourceAsStream()方法可以以流方式读取文件。

需要注意的是,在同一个请求周期中,HttpServletResponse的getWriter()与getOutputStream()只能择一使用,否则会提示IllegalStateException。

这篇关于[ServletJSP] HttpServletResponse的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1032600

相关文章

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows