HttpServletResponse对象、HttpServletResponse应用、请求重定向
HttpServletResponse对象
1.HttpServletResponse接口定义的状态码方法
当Servlet向客户端回送响应消息时,需要在响应消息中设置状态码,状态码代表着客户端请求服务器的结果。为此,HttpServletResponse接口定义了3个发送状态码的方法。HttpServletResponse接口—setStatus(int status)方法setStatus(int status)方法用于设置HTTP响应消息的状态码,并生成响应状态行。由于响应状态行中的状态描述信息直接与状态码相关,而HTTP版本由服务器确定,所以,只要通过setStatus(int status)方法设置了状态码,即可实现状态行的发送。例如,正常情况下,Web服务器会默认产生一个状态码为200的状态行。HttpServletResponse接口—sendError(int sc)方法sendError(int sc)方法用于发送表示错误信息的状态码,例如,404状态码表示找不到客户端请求的资源。HttpServletResponse接口—sendError(int code,String message)方法sendError(int code, String message)方法除了设置状态码,还会向客户端发出一条错误信息。服务器默认会创建一个HTML格式的错误服务页面作为响应结果,其中包含参数message指定的文本信息,这个HTML页面的内容类型为“text/html”,保留cookies和其他未修改的
响应头信息。如果一个对应于传入的错误码的错误页面已经在web.xml中声明,那么这个声明的错误页面会将优先建议的message参数服务于客户端。
2.HttpServletResponse接口设置HTTP响应头字段的方法
方法说明 | 功能描述 |
---|---|
void addHeader(String name, String value) | 这两个方法都是用来设置HTTP协议的响应头字段,其中,参数name用于指定响应头字段的名称,参数value用于指定响应头字段的值。不同的是,addHeader()方法可以增加同名的响应头字段,而setHeader()方法则会覆盖同名的头字段 |
void setHeader(String name, String value) | |
void addIntHeader(String name,int value) | 这两个方法专门用于设置包含整数值的响应头。避免了调用addHeader()与setHeader()方法时,需要将int类型的设置值转换为String类型的麻烦 |
void setIntHeader(String name,int value) | |
void setContentLength(int len) | 该方法用于设置响应消息的实体内容的大小,单位为字节。对于HTTP协议来说,这个方法就是设置Content-Length响应头字段的值 |
void setContentType(String type) | 该方法用于设置Servlet输出内容的MIME类型,对于HTTP协议来说,就是设置Content-Type响应头字段的值。例如,如果发送到客户端的内容是jpeg格式的图像数据,就需要将响应头字段的类型设置为“image/jpeg”。需要注意的是,如果响应的内容为文本,setContentType()方法的还可以设置字符编码,如:text/html;charset=UTF-8 |
void setLocale(Locale loc) | 该方法用于设置响应消息的本地化信息。对HTTP来说,就是设置Content-Language响应头字段和Content-Type头字段中的字符集编码部分。需要注意的是,如果HTTP消息没有设置Content-Type头字段,setLocale()方法设置的字符集编码不会出现在HTTP消息的响应头中,如果调用setCharacterEncoding()或setContentType()方法指定了响应内容的字符集编码,setLocale()方法将不再具有指定字符集编码的功能 |
void setCharacterEncoding(String charset) | 该方法用于设置输出内容使用的字符编码,对HTTP 协议来说,就是设置Content-Type头字段中的字符集编码部分。如果没有设置Content-Type头字段,setCharacterEncoding方法设置的字符集编码不会出现在HTTP消息的响应头中。setCharacterEncoding()方法比setContentType()和setLocale()方法的优先权高,setCharacterEncoding()方法的设置结果将覆盖setContentType()和setLocale()方法所设置的字符码表 |
需要注意的是,addHeader()、setHeader()、addIntHeader()、setIntHeader()方法都是用于设置各种头字段的,而setContetType()、setLoacale()和setCharacterEncoding()方法用于设置字符编码,这些设置字符编码的方法可以有效解决中文字符乱码问题。
3.发送响应消息体相关的方法
由于在HTTP响应消息中,大量的数据都是通过响应消息体传递的,所以,ServletResponse遵循IO流传递大量数据的设计理念。在发送响应消息体时,定义了两个与输出流相关的方法。getOutputStream()方法getOutputStream()方法所获取的字节输出流对象为ServletOutputStream类型。由于ServletOutputStream是OutputStream的子类,它可以直接输出字节数组中的二进制数据。所以,要想输出二进制格式的响应正文,就需要调用getOutputStream()方法。getWriter()方法getWriter()方法所获取的字符输出流对象为PrintWriter类型。由于PrintWriter类型的对象可以直接输出字符文本内容,所以,要想输出内容为字符文本的网页文档,需要调用getWriter()方法。
07HttpServletResponse对象_哔哩哔哩_bilibili
案例:
package com.miao.response;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;/*** \* Created with IntelliJ IDEA.* \* User: maomao* \* Date: 2022/3/18* \* Time: 17:11* \* Description:* \*/
@WebServlet(name = "PrintServletDemo", value = "/PrintServletDemo")
public class PrintServletDemo extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String data = "同学们,好好学习JavaWeb!!!!!";// 获取字节流输出对象
// ServletOutputStream outputStream = resp.getOutputStream();
// outputStream.write(data.getBytes());// 获取字符流输出对象resp.setContentType("text/html;charset=utf-8");PrintWriter writer = resp.getWriter();writer.println(data);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
注意:路径的问题
HttpServletResponse应用
1.实现请求重定向
08HttpServletResponse应用_哔哩哔哩_bilibili
在某些情况下,针对客户端的请求,一个Servlet类可能无法完成全部工作。这时,可以使用请求重定向来完成。所谓请求重定向,指的是Web服务器接收到客户端的请求后,可能由于某些条件限制,不能访问当前请求URL所指向的Web资源,而是指定了一个新的资源路径,让客户端重新发送请求。HttpServletResponse接口—sendRedirect()方法为了实现请求重定向,HttpServletResponse接口定义了一个sendRedirect()方法,该方法用于生成302响应码和Location响应头,从而通知客户端重新访问Location响应头中指定的URL。sendRedirect()方法的完整声明如下所示:public void sendRedirect(java.lang.String location) throws java.io.IOException需要注意的是,参数location可以使用相对URL,Web服务器会自动将相对URL翻译成绝对URL,再生成Location头字段。
login.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title>
</head>
<body>
<!--把表单内容提交到chapter04工程下的LoginServlet-->
<form action="LoginServlet" method="post">用户名: <input type="text" name="username" /><br />密 码:<input type="password" name="password"/><br /><input type="submit" value="登录" />
</form>
</body>
</html>
welcome.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>欢迎你,登录成功!
</body>
</html>
LoginServletDemo
package com.miao.login;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet(name = "LoginServletDemo", value = "/LoginServletDemo")
public class LoginServletDemo extends HttpServlet {// 在这里可以用doGet 和 doPost两个方法@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=utf-8");String username = req.getParameter("username");String password = req.getParameter("password");final String root = "/chapter04_war_exploded";if (username.equals("zahngsan") && password.equals("123456")) {resp.sendRedirect(root + "/welcome.html");} else {resp.sendRedirect(root + "/login.html");}}
}
2.页面中的乱码问题
HttpServletResponse接口提供了一个setCharacterEncoding()方法,该方法用于设置字符的编码方式,接下来对chineseServlet类进行修改,在代码String data = “中国”;前增加一行代码,设置字符编码使用的码表为UTF-8。response.setCharacterEncoding("utf-8");
HttpServletResponse对象、HttpServletResponse应用、请求重定向相关推荐
- Java Web 请求转发与请求重定向
Java Web 请求转发与请求重定向 请求转发 服务器行为,即用户向服务器发送了一次http请求,该请求可能会经过多个信息资源处理以后菜返回给用户,各个信息资源使用请求转发机制互相转发请求,但是用户 ...
- 请求重定向与请求转发的比较(HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法)...
尽管HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很 ...
- javaweb学习总结(八)——HttpServletResponse对象(二)
一.HttpServletResponse常见应用--生成验证码 1.1.生成随机图片用作验证码 生成图片主要用到了一个BufferedImage类, 生成随机图片范例: 1 package gacl ...
- javaweb学习总结(八):HttpServletResponse对象(二)
一.HttpServletResponse常见应用--生成验证码 1.1.生成随机图片用作验证码 生成图片主要用到了一个BufferedImage类, 生成随机图片范例: 1 package gacl ...
- HttpServletResponse对象(一)
web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象,和代表响应的response对象. request和response对象既然代表请求和响应,那么我 ...
- Struts2教程6:在Action类中获得HttpServletResponse对象的四种方法
在struts1.x Action类的execute方法中,有四个参数,其中两个就是response和request.而在Struts2中,并没有任何参数,因此,就不能简单地从execute方法获得H ...
- Struts2 - 在Action类中获得HttpServletResponse对象
Struts2 - 在Action类中获得HttpServletResponse对象 在struts1.x Action类的execute方法中,有四个参数,其中两个就是 response和reque ...
- javaweb学习总结(七)——HttpServletResponse对象(一)
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. request和response对象即然代表请求和响应,那我们 ...
- javaweb学习总结(七):HttpServletResponse对象(一)
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. request和response对象即然代表请求和响应,那我们 ...
最新文章
- 如何使用jquery_免费CDN:jsDelivr+Github 使用方法
- Python--音频文件分类代码
- tf卡低级格式化_华为授权雷克沙nCARD评测:用了这么多年TF卡,该换换了
- JVM虚拟机总结 内存分析及调试
- 三维重建:***三维模型的网格细化
- UNIX网络编程学习笔记(代码超详细解析)(持续更新)
- 【资料】机器学习笔记的github镜像下载(github个人star数量排名175)
- c# 将doc转换为docx
- 【经典回顾】YouTube 深度学习推荐系统的十大工程问题(附论文下载链接)
- visual studio 2015 2017 key vs2015 vs2017密钥
- MySQL数据类型特征_Mysql学习(三)数据类型_mysql
- html怎么定义音乐参数,AudioParam - 表示与音频相关的参数
- 海思Hi3519AV100sensor移植之二-- imx586 sensor
- Java毕业设计-医院药品管理系统
- Jersey框架简单实践(一)
- 数电笔记之逻辑函数卡诺图化简
- python运维自动化老男孩_Day1 老男孩python自动化运维课程学习笔记
- Endnote 插入文献导致word崩溃!!解决方法
- 国家公祭日悼念:黑白网页背景设置教程
- 学习笔记-DQPSK系统的调制与解调
热门文章
- Html如何触发闹铃,闹钟开启页面.html
- uefi怎么念_UEFI
- 复旦投毒案宣判:嫌犯表情漠然 对死刑反应淡定
- PGSQL中的LIKE,ILIKE,SIMILAR TO的使用
- 测试小白的福音,推荐一款自动化测试神器,不会代码你也可以做自动化!
- mysql里collection_foreach中collection的三种用法
- unity实现牧师与魔鬼2.0(动作分离版) 基本操作演练
- 在APPLE从创建ID到申请发布AppStore账户(四)登记前Apple ID 的双重认证(Two-factor authentication for Apple ID)
- 团队项目(2.2) -- 人脸检测和瞳孔检测
- 虚拟化一:虚拟化开篇