Servlet基础-5
问题:服务器在接收到浏览器的请求后,仅仅使用一个 Servlet进行请求处理,会造成不同的Servlet逻辑代码冗余,Servlet的职责不明确。
解决:使用请求转发。
特点:一次请求地址栏信息不改变。
请求转发
- 作用:实现多个servlet联动操作处理请求,这样避免代码冗余,让servlet的职责更加明确。
- 使用
- req.getRequestDispatcher(“要转发的地址”).forward(req, resp);
- 地址:相对路径,直接书写servlet的别名即可。
- req.getRequestDispatcher(“要转发的地址”).forward(req, resp);
- 特点:一次请求,浏览器地址栏信息不改变。
- 注意:请求转发后直接return结束即可。
Request对象作用域
问题:使用请求转发后,不同的 Servlet 之间怎么进行数据的共享呢?或者说数据怎么从一个servlet流转给另外一个 Servlet 呢?
解决:使用request对象的作用域
使用:request.setAttribute(objectname,Objectvalue);request.getAttribute(Objectobj)
作用:解决了一次请求内的不同 Servlet 的数据(请求数据+其他数据)共享问题。
作用域:基于请求转发,一次请求中的所有 Servlet 共享。
注意:使用 Request 对象进行数据流转,数据只在一次请求内有效。
- 特点:
- 服务器创建
- 每次请求都会创建
- 生命周期一次请求
问题:如果当前的请求,Servlet 无法进行处理怎么办?如果使用请求转发,造成表单数据重复提交怎么办?
解决:使用重定向
使用:response.sendRedirect(“路径”).本地路径为:uri 网络路径为:定向资源的 URL 信息
特点:两次请求,浏览器地址栏信息改变,避免表单重复提交
重定向
解决了表单重复提交的问题,以及当前servlet无法处理的请求的问题。
- 使用:resp.sendRedirect(String uri);
- 示例:resp.sendRedirect(“/login/main”);
- 特点:
- 两次请求,两个request对象。
- 浏览器地址栏信息改变
- 时机:
- 如果请求中有表单数据,而数据又比较重要,不能重复提交,建议使用重定向。
- 如果请求被Servlet接收后,无法进行处理,建议使用重定向定位到可以处理的资源。
- 注意:两次请求,第一个请求里面的数据则不能被第二次请求获取,则需要使用到session,学习session,则又要先学cookie
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Kylin!
评论