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

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

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类

1. public class DownServlet extends HttpServlet {
2. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
3. 
4. // System.out.println("DownServlet 被调用");
5. // response.setContentType("application/x-tar;charset=utf-8");
6. // PrintWriter writer = response.getWriter();
7. // writer.print("hi");
8. // writer.flush();
9. // writer.close();
10. 
11. //完成了自己业务
12. //发出请求重定向-> DownServletNew
13. 
14. //1. sendRedirect 本质就会 返回 302 状态码 Location: /servlet/downServletNew
15. //2. 因此 302和 /servlet/downServletNew 是浏览器解析,而不是服务器
16. //3. 浏览器在解析 /servlet/downServletNew =>
17. http://localhost:8080/servlet/downServletNew
18. 
19. //4. 动态获取到application context
20. String contextPath = getServletContext().getContextPath();
21.         System.out.println("contextPath= " + contextPath);
22. 
23. //response.sendRedirect("/servlet/downServletNew");
24. 
25.         response.sendRedirect(contextPath + "/downServletNew");
26. 
27. //response.sendRedirect("http://www.baidu.com");
28. 
29. //第二种重定向的写法
30. // System.out.println("第二种方式重定向...");
31. // response.setStatus(302); //设置http响应的状态码
32. // //设置http响应的 Location: /servlet/downServletNew
33. // response.setHeader("Location", "/servlet/downServletNew");
34. 
35. 
36.     }
37. 
38. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
39.         doPost(request,response);
40.     }
41. }

DownServletNew.java

1. public class DownServletNew extends HttpServlet {
2. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
3. 
4.         System.out.println("DownServletNew 被调用");
5.         response.setContentType("text/html;charset=utf-8");
6. PrintWriter writer = response.getWriter();
7.         writer.print("ok");
8.         writer.flush();
9.         writer.close();
10.     }
11. 
12. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
13.         doPost(request,response);
14.     }
15. }

xml配置

1. <servlet>
2. <servlet-name>DownServlet</servlet-name>
3. <servlet-class>com.servlet.response.DownServlet</servlet-class>
4. </servlet>
5. 
6. <servlet-mapping>
7. <servlet-name>DownServlet</servlet-name>
8. <url-pattern>/downServlet</url-pattern>
9. </servlet-mapping>
10. 
11. <servlet>
12. <servlet-name>DownServletNew</servlet-name>
13. <servlet-class>com.servlet.response.DownServletNew</servlet-class>
14. </servlet>
15. 
16. <servlet-mapping>
17. <servlet-name>DownServletNew</servlet-name>
18. <url-pattern>/downServletNew</url-pattern>
19. </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");


目录
相关文章
|
存储 Java 文件存储
如何用 Java 压缩 ZIP 文件?
【2月更文挑战第21天】
1049 1
|
9月前
|
编解码 算法
信号分析中的经验模态分解和希尔伯特变换
信号分析中的经验模态分解(EMD) 和希尔伯特变换(HT) 是处理非线性、非平稳信号的强大工具。它们共同构成了希尔伯特-黄变换(Hilbert-Huang Transform, HHT) 的核心。
|
前端开发 JavaScript 关系型数据库
前后端分离 -- SpringBoot + Vue实战项目 部署至阿里云服务器
前后端分离 -- SpringBoot + Vue实战项目 部署至阿里云服务器
4454 2
前后端分离 -- SpringBoot + Vue实战项目 部署至阿里云服务器
|
11月前
|
JSON 文字识别 并行计算
自动识别图片点击脚本,文字识别自动点击器, 能识别屏幕内容并自动点击
本方案采用OCR文字识别+图像匹配双模式识别技术: OCR引擎识别屏幕文字内容 OpenCV模板匹配识别图形元素 PyAutoGUI实现
|
SQL Java 关系型数据库
SpringBoot整合MybatisPlus基本的增删改查,保姆级教程
SpringBoot整合MybatisPlus基本的增删改查,保姆级教程
913 0
|
Dart 测试技术 开发工具
Dart开发环境搭建-Windows
Dart开发环境搭建-Windows
933 7
|
数据库
SQLSERVER 2014 删除数据库定时备份任务提示失败DELETE 语句与 REFERENCE 约束“FK_subplan_job_id“冲突
SQLSERVER 2014 删除数据库定时备份任务提示失败DELETE 语句与 REFERENCE 约束“FK_subplan_job_id“冲突
468 0
|
分布式计算 Java Hadoop
Hadoop找到JAVA_HOME变量,并设置其值
【7月更文挑战第19天】
837 3
|
API
servlet研究学习总结--OutputStream和PrintWriter的区别
servlet研究学习总结--OutputStream和PrintWriter的区别
629 1