Javaweb | 转发、重定向

简介: Javaweb | 转发、重定向


转发

转发与页面跳转

转发

  • 转发的作用在服务器端,将请求发送给服务器上的其他资源,以共同完成一次请求的处理

页面跳转

  • 使用forward跳转时,是在服务器内部跳转,地址栏不发生变化,属于同一次请求

调用业务逻辑的Servlet中,编写代码:

request.getRequestDispatcher("/目标URL-pattern").forward(request,response);
//跳转转发到login.jsp
req.getRequestDispatcher("login.jsp").forward(req,resp);

数据传递

request作用域

  • 拥有存数据的空间,作用范围是一次请求有效(一次请求可以经过多次转发)
  • 可以将数据存入request后,在一次请求过程中的任何位置进行获取
  • 可以传递数据(基本数据类型,对象,数组,集合等)

存数据

  • 以键值对的形式存储在request作用域中,key为String类型,value为Object类型
  • JSP内置对象session和request都有这个方法
request.setAttribute(key,value);

取数据

  • 通过String类型的key访问Object类型的value
request.getAttribute(key)

存取数据

//request作用域存储数据
req.setAttribute("admins",adminList);
//request作用取数据
request.getAttribute("admins");

重定向

重定向作用在客户端,客户端请求发送给服务器后,服务器响应给客户端一个新的请求地址,客户端重新发送新的请求

重定向与页面跳转

调用业务逻辑的Servlet中,编写代码:

// response.sendRedirect("目标URL");
resp.sendRedirect("index.jsp");   //重定向跳转到index.jsp页面

数据传递

sendRedirect跳转时,地址栏发生改变,代表客户端重新发送请求,属于两次请求

  • response没有作用域,两次request请求中的数据无法共享

传递数据

  • resp.sendRedirect(“URL”);
  • 通过URl的拼接进行数据传递 “网页地址?username=tom”;
  • response传递数据只能是String类型

获取数据

  • request.getParameter(“username”);
//传递数据
resp.sendRedirect("/WebProject_war_exploded/b?username=tom");   //传递数据为String类型,明文传递
//获取数据
String username = req.getParameter("username");

转发与重定向的区别

转发 重定向
转发使用的是getRequestDispatcher()方法 重定向使用的是sendRedirect()方法
浏览器URL的地址栏不变 浏览器URL的地址栏改变
转发是服务器行为 重定向是客户端行为
转发是浏览器只做了一次访问请求 重定向是浏览器做了至少两次的访问请求
转发2次跳转之间传输的信息不会丢失 重定向2次跳转之间传输的信息会丢失(request范围)
重定向的第二个请求一定是GET

转发和重定向总结:

  • 当两个Servlet需要传递数据时,选择forward转发,不建议使用sendRedirect转发,因为sendRedirect是明文传递不安全

Servlet生命周期(四阶段)

Servlet 生命周期

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:

  • Servlet 初始化后调用 init () 方法
  • Servlet 调用 service() 方法来处理客户端的请求
  • Servlet 销毁前调用 destroy() 方法
  • 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的

  • 实例化

用户第一次访问Servlet是,由容器调用Servlet的构造器创建具体的Servlet对象,也可以启动容器后立刻创建实例,使用如下代码可以设置Servlet是否在服务器启动时就创建

  • 只执行一次
  • 初始化

初始化阶段,init()方法会被调用,这个方法在javax.servlet.Servlet接口中定义,其中,方法以一个ServletConfig类型的对象作为参数

  • init方法只被执行一次
  • 服务

客户端有一个请求时,容器会将请求ServletRequest与响应ServletRequest对象转给Servlet,以参数的形式传给service方法

  • 此方法会执行多次
  • 销毁

Servlet容器(Tomcat)停止或者重新启动(Tomcat)都会引起销毁Servlet对象并调用destroy方法

  • destroy方法执行一次

实例:

package com.woniu.servlet2;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet(value = "/ls")
public class LifeServlet implements Servlet {
    public LifeServlet(){
        System.out.println("1.实例化");
    }
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2.初始化");
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("3.提供服务,接受请求,响应结果");
    }
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void destroy() {
        System.out.println("4.销毁");
    }
}
  • 重启或停止Tomcat即会输出销毁


🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请——点赞👍收藏⭐️评论📝


目录
相关文章
|
3月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
494 37
|
2月前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
39 2
|
2月前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
76 5
|
3月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
|
3月前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
129 2
|
3月前
|
SQL JSON JavaScript
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
Vue 指令、生命周期、this和$、vue脚手架进行模块化开发/ElementUI框架、综合案例,element商品列表展示增删改查
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
|
5月前
|
存储 程序员
JavaWeb之Listener监听器
JavaWeb之Listener监听器
93 0
|
6月前
|
前端开发 JavaScript 算法
javaweb(四)——过滤器与监听器
javaweb(四)——过滤器与监听器
|
6月前
|
存储 JSON 前端开发
JavaWeb中用来定义统一的响应结果的result类
JavaWeb中用来定义统一的响应结果的result类
219 0
|
6月前
分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤
分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤
42 0