(十二)Servlet教程——HttpServletResponse接口

HttpServletResponse接口继承自ServletResponse接口,HttpServletResponse用来封装HTTP响应消息,简称response对象。

每次请求一个Servlet,Servlet容器就会针对每次请求创建一个response对象,并把它作为参数传递给Servlet的service方法。Servlet处理请求后,会将响应信息封装到response对象中,并由Servlet容器解析后返回给客户端。

response对象向页面输出内容有两种方式:字节流输出和字符流输出。

使用这两种方式输出中文时都有可能出现乱码。

getOutputStream(),用于获取字节输出流对象。

getWriter(),用于获取字符输出流对象。

以下是使用字符流输出中文的例子:

创建一个ResponseClass01类继承自HttpServlet,重写HttpServlet的service方法

@WebServlet("/s001")

public class ResponseClass01 extends HttpServlet {

@Override

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//设置服务端的编码

response.setCharacterEncoding("UTF-8");

PrintWriter writer=response.getWriter();

writer.write("<h2>你好</h2>");

}

}

启动程序后,打开浏览器,输入URL http://localhost:8686/s01/s001

在360浏览器中可以正常显示中文,但是标记显示不正确

使用谷歌浏览器访问同样的地址后,可以看到中文是显示乱码的,然后html标记也没有正确显示。

所以上面的代码中需要加上这一行代码

response.setHeader("content-type", "text/html"); //设置header的content-type

以下是使用字节流输出中文的例子:

//字节流响应数据

//同时设置服务器和客户端都使用UTF-8字符集,还设置了响应头

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

//字节流

ServletOutputStream outputStream=response.getOutputStream();

//输出数据

outputStream.write("<h2>你好。。。。<h2>".getBytes("UTF-8"));

Servlet重定向

Servlet重定向属于客户端行为。服务器在收到客户端请求后,会通知客户端浏览器重新向另外一个URL发送请求,这称为请求重定向。

Servlet重定向本质上是两次HTTP请求,对应两个request对象和两个response对象。

Servlet重定向的工作流程如下:

① 用户在浏览器中输入URL,请求访问服务器上的Web资源。

② 服务端的Web资源返回一个状态码为302的响应信息,该响应的含义为:通知浏览器再次发送请求,访问另外一个Web资源(在响应信息中提供了另一个资源的URL)。

③ 当浏览器接收到响应后,立即自动访问另一个指定的Web资源。

④ 另一个Web资源请求处理完成后,由容器把响应信息返回给浏览器进行展示。

//实现重定向,在刚才的代码后面加上此代码

response.sendRedirect("index.jsp");

重新启动程序后,在浏览器地址栏中输入http://localhost:8686/s01/s001

敲击回车键后浏览器地址栏马上变为如下图所示地址

重定向的特点

① 浏览器地址栏会发生改变;

② 支持跨域跳转,可以跳转到任意资源(包括内部资源和外部资源);

③ 是两次请求和两次响应,不共享request和response对象;

④ 不能通过request域对象传递数据;

⑤ 速度相对于转发要慢一些;

⑥ 是客户端行为;

相关推荐
毕设源码-朱学姐5 小时前
【开题答辩全过程】以 工厂能耗分析平台的设计与实现为例,包含答辩的问题和答案
java·vue.js
Spring AI学习6 小时前
Spring AI深度解析(9/50):可观测性与监控体系实战
java·人工智能·spring
java1234_小锋7 小时前
Spring IoC的实现机制是什么?
java·后端·spring
xqqxqxxq8 小时前
背单词软件技术笔记(V2.0扩展版)
java·笔记·python
猫头虎8 小时前
又又又双叒叕一款AI IDE发布,国内第五款国产AI IDE Qoder来了
ide·人工智能·langchain·prompt·aigc·intellij-idea·ai编程
消失的旧时光-19438 小时前
深入理解 Java 线程池(二):ThreadPoolExecutor 执行流程 + 运行状态 + ctl 原理全解析
java·开发语言
哈哈老师啊8 小时前
Springboot学生综合测评系统hxtne(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·数据库·spring boot
4311媒体网8 小时前
帝国cms调用文章内容 二开基本操作
java·开发语言·php
zwxu_8 小时前
Nginx NIO对比Java NIO
java·nginx·nio
可观测性用观测云9 小时前
Pyroscope Java 接入最佳实践
java