标题request和response主要区别:

1、 请求转发使用 request对象,重定向使用 response 对象
2、 请求转发使用服务器端路径,重定向使用客户端路径
3、 请求转发不能跳转外网,重定向可以跳转外网
4、 请求转发是服务器内部的跳转,不依赖网速,跳转速度极快
——重定向是依赖浏览器的跳转,严重依赖网速,跳转速度略慢
5、 请求转发:请求一次,响应一次, 占用资源少
——重定向:重定向 N 次,响应 n+1 次,占用大量资源
6、 请求转发可以访问受保护目录资源WEB-INF,重定向不能访问受保护目录
7、 请求转发不会改变地址栏路径,重定向会改变路径。
——安全:请求转发。会隐藏后面转发程序的访问路径。
——程序 BUG:由于请求转发不会更改地址,会导致用户重复访问某个 Servlet程序。解决方案:建议改为重定向
8、 请求转发可以使用 request 作用域,重定向不能使用request作用域

何时使用request和response

何时使用请求转发
1、 为了安全,隐藏某些程序的访问路径
2、 为了效率
3、 为了内存占用率低
4、 访问受保护目录资源
5、 使用 request 作用域
何时使用重定向
1、 跳转外网路径
2、 改变地址栏访问路径

除了以上 7 种情况外,两种跳转方式可以相互替代使用

请求转发&重定向图示

请求外网,用重定向,其他所有使用请求转发即可

request原理简述&继承树&行头体操作

原理

继承树

public void t2(){//http://localhost:8080/day05/d1?method=t2//操作请求行System.out.println(getRequest().getRemoteAddr());//0:0:0:0:0:0:0:1   因为是服务器自己开浏览器访问自己,所以客户端地址仍然是服务器的System.out.println(getRequest().getContextPath());//   /day05System.out.println(getRequest().getMethod());//GETSystem.out.println(getRequest().getRequestURI());//  /day05/d1System.out.println(getRequest().getQueryString());// method=t2System.out.println(getRequest().getProtocol());// HTTP/1.1System.out.println(getRequest().getServletPath());//  /d1System.out.println(getRequest().getRemoteHost());//  0:0:0:0:0:0:0:1  因为是服务器自己开浏览器访问自己,所以客户端主机仍然是服务器的System.out.println(getRequest().getRemotePort());//  51088System.out.println(getRequest().getLocalAddr());//   0:0:0:0:0:0:0:1

public void t3(){HttpServletRequest request = getRequest();System.out.println(request.getHeader("Accept"));System.out.println(request.getHeader("User-Agent"));System.out.println(request.getHeader("aa"));//null
}

public void t1(){//后台进行数据获取时,get遇到中文或特殊符号,会导致乱码问题//1、写过滤器//2、使用tomcat8.5或以上版本Person person = toBean(Person.class);System.out.println(person);//原生获取方式System.out.println("----------");String username = getRequest().getParameter("username");String aaa = getRequest().getParameter("aaa");String hobbyStr = getRequest().getParameter("hobby");System.out.println(username);System.out.println(aaa);System.out.println(hobbyStr);System.out.println("----------");String[] hobbies = getRequest().getParameterValues("hobby");System.out.println(Arrays.toString(hobbies));String[] bbb = getRequest().getParameterValues("bbb");System.out.println(bbb);System.out.println("----------");Map<String, String[]> map = getRequest().getParameterMap();System.out.println(map);
}

response原理简述&继承树&行头体操作

原理概述

继承树


public void t6(){HttpServletResponse response = getResponse();//追加response.addHeader("aa","a1");response.addHeader("aa","a2");//覆盖response.setHeader("bb","b1");response.setHeader("bb","b2");//如果响应体中,包含中文//response.setCharacterEncoding("utf-8");//设置响应体的编码为utf-8response.setContentType("text/html;charset=utf-8");//设置响应体里是html文本,编码是Utf-8
}

响应体信息无限,所以一般用来传递大量数据。
字节流:” getOutputStream()
向响应体输出二进制字节流信息。【文件下载】
字符流:”getWriter()
向响应体输出字符流信息。【字符串及前端代码输出,Ajax,axios】
若输出前端代码,则会被浏览器解析执行
两个方法我们都使用其 write()方法进行数据输出。
<------------------------------------------------------->

public void t7() throws IOException {//注意:两个流不能同时调用, 否则出现异常:IllegalStateExceptionHttpServletResponse response = getResponse();//字节流
//        ServletOutputStream os = response.getOutputStream();
//        os.write(" 今天天气好晴朗 ".getBytes("utf-8"));//字符流PrintWriter writer = response.getWriter();writer.write("<h1>今天天气好晴朗</h1>");writer.flush();//建议刷流操作在请求转发中不要使用writer.write("<h1>处处好风光</h1>");//writer.close();//建议:不建议手动关流,因为该流是由服务器创建,服务器会对该流进行close()操作}

请求转发(request对象)和重定向(response)的区别及何时使用请求转发和重定向相关推荐

  1. Servlet转发forward和重定向response.sendRedirect()区别

    转发(forward):浏览器地址不会改变,始终是同一个请求.执行forward时,浏览器不知道服务器发送的内容是从何处来,浏览器地址栏中还是原来的地址.forward是内部重定向. 重定向(send ...

  2. Node之HTTP模块(request对象解析、response对象解析、图片上传)

    文章目录 一.什么是Web服务器? 1.1 web服务器初体验 1.2 另外一种创建方式 1.3 listen方法的参数详解 二.request对象解析 2.1 基本使用 2.2 进阶使用 2.3 m ...

  3. Javaweb-Servlet总结(概述、接口使用、配置、获取请求方式、路径操作、Request对象、Response对象)

    文章目录 Servlet概述 Servlet核心接口和类 三种自定义Servlet接口的方法 1.实现Servlet接口 2.继承GenericServlet抽象类 3.继承HttpServlet抽象 ...

  4. java Request对象和Response对象详解

    一:概述 Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象一.Response对象1.Resonse的继承结构:S ...

  5. request 对象和 response 对象

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象 HttpServletResponse HttpServletR ...

  6. Flask框架(flask中的request对象,获取请求参数,保存上传的文件)

    1.request中包含了前端发送过来的所有数据 ,请求的 request 对象中保存了一次HTTP请求的一切信息. 通过request.from可以直接发送提取请求体中的表单格式数据,是一个类字典的 ...

  7. 【JavaWeb】Request对象详解

    HTTP之Request:接上一篇博文HTTP协议详细. 本文目录 一.Request请求 1.Request对象和Response对象的原理 2.Request对象继承体系结构 3.Request功 ...

  8. request对象_爬虫:request库的简介

    一. request库的安装 在命令行输入pip install requests进行安装 随后进行调用,发现成功 二. request库的最常用方法:get 方法 r= request.get(ur ...

  9. Javaweb 快速入门之jsp基本语法表单提交方式request对象

    文章目录 一.jsp简介 二.jsp之表单提交方式 三.jsp内置函数 总结 一.jsp简介 1.jsp简介             (1)jsp全称:java server pages java服务 ...

  10. Request对象详细介绍

    1.Request对象 是当客户端向服务器端发送请求时,服务器为本次请求创建request对象,并在调用Servlet的service方法时,将该对象传递给service方法.Request对象中封装 ...

最新文章

  1. 一个框架看懂优化算法之异同 SGD/AdaGrad/Adam
  2. Angular 4 依赖注入教程之一 依赖注入简介
  3. C#操作注册表全攻略
  4. 计算机组成原理答案郑秋梅,计算机组成原理-郑秋梅_习题.docx
  5. macos 此服务器的证书无效_网易出现重大失误,忘记续费HTTPS证书导致大量用户受影响...
  6. PHP MySQL 相关函数(上)
  7. 第四代移动机器人:灵动科技V-AMR全球首发
  8. Intellij Idea下tomcat设置自动编译
  9. 第五章 shell学习之文件的排序、合并和分割
  10. WPF 微信 MVVM 【续】发送部分QQ表情
  11. 用Java实现md5加密
  12. TensorFlow学习记录:saved_model模块的用法
  13. 线上故障之-CPU飙高
  14. ghost linux 黑屏,Ghost 与 Linux 的兼容性
  15. 山海关与老龙头 逃不掉的寂寞与人群
  16. matlab2016a配置vs2013编译器
  17. java长方体的父类_一个长方形类Rectangle,一个子类长方体类,计算周长,面积,体积...
  18. ABP Vnext 学习03-授权中心微信小程序登录
  19. C#圆形卡尺测量程序基于halcon
  20. 解决Navicat1166错误

热门文章

  1. 服务器性能管理系统,服务器系统性能管理是什么
  2. 编译原理 最左推导和最右推导
  3. pygame 躲避僵尸
  4. python_pygame.外星人入侵
  5. 学问经得起时间考验的傅立叶
  6. uniapp easycom教程
  7. 你的睡眠时间和睡眠质量达标了么?
  8. 任正非:华为没有 996,更没有 007!
  9. 30年时间让科技与人对话,什么是机器人语音识别原理
  10. Python 字符串前加r,b,u