请求转发

转发的概述

一个Web组件(Servlet/JSP)将未完成的处理通过容器转交给另外一个Web组件继续处理,服务器内部跳转, 转发的各个组件会共享Request和Response对象

转发的特点

· 转发之后浏览器地址栏的URL不会发生改变
· 转发过程中共享Request对象(一次请求有效)
· 转发的URL不可以是其它项目工程

案例

前台传参到a,a再转发到b,b在传给前台

案例2

1.在queryServlet中查询所有的用户(模拟数据库查询)
2.将所有用户的集合存储到request对象中
3.跳转到showServlet
4.showServlet将用户集合进行遍历, 把每一个用户信息通过响应输出流, 输出到浏览器(输出html页面)
·思路分析
1.访问queryServlet
2.queryServlet中查询所有用户(模拟查询数据库), 将用户集合设置到request对象   中 req.setAttribute(key,value)
3.需要传递数据, 使用请求转发
将请求转发到showServelt  req.getRequestDispather.forward(req,resp)
4.showServlet中获取用户集合并遍历用户集合, 将每一条用户信息通过响应输出流    输出到浏览器(输出html)


重定向

转发,就是客户端发送数据请求到客户端,发送完毕之后,由其中一个servlet转发到另外一个servlet,然后传到前台

重定向,就是请求到达一个servlet之后,会传递一个302到客户端,随后客户端在拿着我们之前设置好的信息,去请求另外一个servlet,路径也会变成另外一个servlet路径,

首先客户端浏览器发送http请求,当web服务器接受后发送302状态码响应及对应新的location给客 户浏览器,客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location 地址,服务器根据此请求寻找资源并发送给客户

重定向的特点

·重定向之后,浏览器地址栏的URL会发生改变。
·重定向过程中会将前面Request对象销毁,然后创建一个新的Request对象。
·重定向的URL可以是其它项目工程

重定向的实现

实现重定向需要借助javax.servlet.http.HttpServletResponse接口中的以下方法:

注意事项:

重定向的路径必须为 /项目名+/资源名

案例:


注意

如果是多次请求,前台的状态码是302,是无法进行传参的

案例:

用户访问登录页面
用户名或密码错误, 响应输出一句话 登录失败
用户名和密码正确, 跳转到queryServlet查询所有用户, 跳转到showServlet向浏览器输出每一条用户信息(输出 html)
·思路分析:

  1. 用户名密码正确, 重定向到queryServlet(不需要传递任何数据)
  2. queryServlet和showServlet处理过程和上个案例相同
    (回顾)queryServlet将用户集合设置到request对象, 请求转发到showServlet(需要传递数据), 响应输出用户的每一条信息

登出

转发和重定向的总结

请求转发(需要传递数据 如: 查询):

请求转发一次请求,Tomcat服务器内部的行为,共享同一个Request对象
一次请求就将用户的需求完整的处理完毕。 一般用户发起的查询功能会使用请求转发来完成请求的处理以及结果的响应。而增,删,改的请求,因为请求转发的地址栏信息是不改变的,容易造成用户刷新一次页面就重新增,删,改了一次(造成表单重复提交)

重定向(不需要传递数据 如: 增,删,改):

多次次请求,地址栏改变,经常处理增,删,改的请求, 增删改请求处理完, 一般不需要响应任何的数据
可以保护第一次的请求,避免用户因为刷新页面造成数据的重复提交

Servlet线程安全

线程不安全, 只会实例化一次, 默认第一次被调用, load-on-startup配置tomcat启动时servlet创建

  1. 服务器在收到请求之后,会启动一个线程来进行相应的请求处理
  2. 服务器为每个Servlet只创建一个实例。 当多个请求访问同一个Servlet时,有多个线程访问同一个Servlet对象,使用成员变量会出现线程安全问题, 所以尽量使用局部变量

状态管理

·Web程序基于HTTP协议通信,而HTTP协议是”无状态”的协议,一旦服务器响应完用户的请求之后,就断开连接,而同一个用户的下一次请求又会重新建立网络连接
·服务器程序有时是需要判断是否为同一个用户发出的请求,比如用户的多次选购商品, 因此,有必要跟踪同一个用户发出的一系列请求
·把浏览器与服务器之间多次交互作为一个整体,将多次交互所涉及的数据保存下来,即状态管理
·多次交互的数据状态可以在客户端保存,也可以在服务器端保存
·状态管理主要分为以下两类:
客户端管理:将状态保存在客户端。基于Cookie技术实现
服务器管理:将状态保存在服务器端。基于Session技术实现

servlet的请求和重定向详解相关推荐

  1. Servlet交互【重定向 与 请求分派】详解

    Servlet交互 在serlvet中,需要调用另外一个资源来对浏览器的请求进行响应,两种方式实现: 调用HttpServletResponse.sendRedirect 方法实现 重定向 调用Req ...

  2. (转)web.xml 中的listener、 filter、servlet 加载顺序及其详解

    转: https://www.cnblogs.com/Jeely/p/10762152.html web.xml 中的listener. filter.servlet 加载顺序及其详解 一.概述 1. ...

  3. Linux重定向详解

    I/O重定向详解及应用实例  1. 基本概念(这是理解后面的知识的前提,请务必理解) a. I/O重定向通常与 FD有关,shell的FD通常为10个,即 0-9: b. 常用FD有3个,为0(std ...

  4. Linux文件解hgc,Linux shell I/O重定向详解

    I/O重定向详解及应用实例 1. 基本概念(这是理解后面的知识的前提,请务必理解) a. I/O重定向通常与 FD有关,shell的FD通常为10个,即 0-9: b. 常用FD有3个,为0(stdi ...

  5. http协议与https协议+UDP协议和TCP协议+WebSocket协议下服务端主动去发送信息+对称加密与非对称加密+get和post请求方式区别详解+浏览器内核以及jsj解析引擎

    TCP和UDP协议是TCP/IP协议的核心. 在TCP/IP网络体系结构中,TCP(传输控制协议,Transport Control Protocol).UDP(用户数据报协议,User Data P ...

  6. linux输出重定向跨服务器,【一看就懂,一听就会】Linux重定向详解——输出重定向...

    一.啥是重定向?? Linux重定向定向分为两种,一种输入重定向,一种是输出重定向: 从字面上理解,输入输出重定向(重新定义方向) 就是「改变输入与输出的方向」的意思. 总结: 输入方向就是我们人类从 ...

  7. android xutils json请求,Android Xutils3网络请求的封装详解及实例代码

    Xutils3网络请求的封装详解 封装了一个Xutil3的网络请求工具类,分享给大家,本人水平有限,不足之处欢迎指出. 使用前先配置xutils3: 1.gradle中添加 compile 'org. ...

  8. web.xml 中的listener、 filter、servlet 加载顺序及其详解(转)

    在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...

  9. [转]web.xml 中的listener、 filter、servlet 加载顺序及其详解

    2019独角兽企业重金招聘Python工程师标准>>> 转自:http://zhxing.iteye.com/blog/399668 在项目中总会遇到一些关于加载的优先级问题,近期也 ...

  10. web.xml 中的listener、 filter、servlet 加载顺序及其详解

    在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...

最新文章

  1. Object.create()和new Object()
  2. Redis-学习笔记01【Redis环境搭建】
  3. 鲲鹏云HCIA知识总结(一)
  4. 网站大访问量优化整体思路
  5. 【二十】Jmeter:插件二次开发—— JMeter 源码导入 eclipse
  6. vue 父刷新子_vue.js从父级中更新子组件数据
  7. Kubernetes 搭建 Kafka 和 Zookeeper 集群(完整教程)
  8. liferay录入中文乱码问题
  9. 超详细 CSS动画-animation
  10. 【Python煮音乐】MID文件转WAV
  11. 蓝牙路由器系列产品:企业级Cassia E1000
  12. csv交换到excel
  13. 微信小程序使用阿里字体图标库的方法
  14. 初识Modern UI for WPF
  15. 建立积分兑换商城的意义
  16. phalApi框架打印SQL语句
  17. python三维图能画地图_使用Python绘制地图的三大秘密武器
  18. Python中安装GDAL
  19. js获取当前日期及下一天日期
  20. 关于DBSCAN图像上小圆圈和大圆圈的问题

热门文章

  1. 蚂蚁金服研究员何征宇:系统软件和开源都是手段,不是目的
  2. 【优化算法】龙格-库塔优化算法【含Matlab源码 1799期】
  3. 【预测模型】基于matlab粒子群算法预测【含Matlab源码 1326期】
  4. 【图像去噪】基于matlab GUI中值+均值+维纳+小波滤波图像去噪【含Matlab源码 753期】
  5. 【物理应用】基于matlab波数谱计算【含Matlab源码 508期】
  6. python美多商城项目百度网盘_美多商城项目(十)
  7. ai人工智能_相信AI?
  8. 自己搭建Maven项目下运行项目后Eclipse报错:org.springframework.web.context.ContextLoaderListener
  9. (PyTorch0.4.0) AttributeError: module 'torch' has no attribute 'flatten'
  10. h5是什么 www.php.cn,html5是什么?html5有什么用?