• servlet请求转发于重定向


    请求的转发与重定向是Servlet控制页面跳转的主要方法,在Web应用中使用非常广泛。
    一. 请求的转发

    1. Servlet接收到浏览器端请求后,进行一定的处理,先不进行响应,而是在服务器端内部“转发”给其他Servlet程序继续处理。在这种情况下浏览器端只发出了一次请求,浏览器地址栏不会发生变化,用户也感知不到请求被转发了。
    2. 转发请求的Servlet和目标Servlet共享同一个request对象。
    3. 实现转发的API
     protected void doGet(HttpServletRequest request,
    			HttpServletResponse response) throws ServletException, IOException {
    		//1.使用RequestDispatcher对象封装目标资源的虚拟路径
    		RequestDispatcher dispatcher = request
    				.getRequestDispatcher("/index.html");
     		//2.调用RequestDispatcher对象的forward()方法“前往”目标资源
     		//[注意:传入的参数必须是传递给当前Servlet的service方法的
    		//那两个ServletRequest和ServletResponse对象]
     		dispatcher.forward(request, response);
     	}
    

    二. 请求的重定向

    1. Servlet接收到浏览器端请求并处理完成后,给浏览器端一个特殊的响应,这个特殊的响应要求浏览器去请求一个新的资源,整个过程中浏览器端会发出两次请求,且浏览器地址栏会改变为新资源的地址。
    2. 重定向的情况下,原Servlet和目标资源之间就不能共享请求域数据了。
    3. 实现重定向的API
    protected void doGet(HttpServletRequest request,
    			HttpServletResponse response) throws ServletException, IOException {
    		//1.调用HttpServletResponse对象的sendRedirect()方法
    		//2.传入的参数是目标资源的虚拟路径
    		response.sendRedirect("index.html");
    	}
    
    protected void doGet(HttpServletRequest request,
    			HttpServletResponse response) throws ServletException, IOException {
    		//1.调用HttpServletResponse对象的sendRedirect()方法
    		//2.传入的参数是目标资源的虚拟路径
    		response.sendRedirect("index.html");
    	}
    

    对比请求的转发和重定向

    # 转发 重定向
    浏览器地址栏 不改变 改变
    请求次数 1 2
    能否共享request对象数据
    是否共享数据 转发一次请求,共享数据 重定向两次请求,不共享数据(在request级别使用信息共享,使用重定向必然出错)
    发生行为不同 服务器 客户端
    目标资源:WEB-INF下的资源 能访问 不能访问
  • 相关阅读:
    [转] RISC-V架构介绍
    SiP封装成超越摩尔定律的要塞,日月光/安靠/长电科技谁将赢取IC封装的未来
    OLED中的Demura
    第四次工业革命:人工智能(AI)入门
    星座图的原理与应用
    示波器基本原理之七:示波器的基本测量
    示波器基本原理之六:示波器的基本控制
    示波器基本原理之五:采集模式
    示波器基本原理之四:波形捕获率
    png的故事:隔行扫描算法
  • 原文地址:https://www.cnblogs.com/zk2020/p/13871264.html
Copyright © 2020-2023  润新知