请求转发:
问题:
服务器在接收到浏览器的请求后,仅仅使用一个 Servlet进行请求处理,会造成不同的Servlet逻辑代码 冗余,Servlet的职责不明确。
解决:
使用请求转发。
特点:
一次请求
地址栏信息不改变。
Request 对象作用域
问题:
使用请求转发后,不同的 Servlet 之间怎么进行数据的共享呢?或者说数据怎么从一个 servlet 流转给另外一个 Servlet 呢?
解决:
使用 request 对象的作用域
使用:
request.setAttribute(objectname,Objectvalue);
request.getAttribute(Objectobj)
作用:
解决了一次请求内的不同 Servlet 的数据(请求数据+其他数据)共享问题。
作用域:基于请求转发,一次请求中的所有 Servlet 共享。
注意:
使用 Request 对象进行数据流转,数据只在一次请求内有效。
特点:
服务器创建
每次请求都会创建
生命周期一次请求
重定向
问题:
如果当前的请求,Servlet 无法进行处理怎么办?
如果使用请求转发,造成表单数据重复提交怎么办?
解决:
使用重定向
使用:
response.sendRedirect(“路径”).
本地路径为:uri
网络路径为:定向资源的 URL 信息
特点:
两次请求
浏览器地址栏信息改变
避免表单重复提交
Servlet流程总结: * 浏览器发起请求到服务器(请求) * 服务器接受浏览器的请求,进行解析,创建request对象存储请求数据 * 服务器调用对应的servlet进行请求处理,并将request对象作为实参传递给servlet的方法 * servlet的方法执行进行请求处理 * //设置请求编码格式 * //设置响应编码格式 * //获取请求信息 * //处理请求信息 * //创建业务层对象 * //调用业务层对象的方法 * //响应处理结果 *请求转发学习: * 作用:实现多个servlet联动操作处理请求,这样避免代码冗余,让servlet的职责更加明确。 * 使用: * req.getRequestDispatcher("要转发的地址").forward(req, resp); * 地址:相对路径,直接书写servlet的别名即可。 * 特点: * 一次请求,浏览器地址栏信息不改变。 * 注意: * 请求转发后直接return结束即可。 *reuqet作用域: * 解决了一次请求内的servlet的数据共享问题 *重定向: * 解决了表单重复提交的问题,以及当前servlet无法处理的请求的问题。 * 使用: * resp.sendRedirect(String uri); * 示例: * resp.sendRedirect("/login/main"); * 特点: * 两次请求,两个request对象。 * 浏览器地址栏信息改变 * 时机: * 如果请求中有表单数据,而数据又比较重要,不能重复提交,建议使用重定向。 * 如果请求被Servlet接收后,无法进行处理,建议使用重定向定位到可以处理的资源。 *
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)