• 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下的资源 能访问 不能访问
  • 相关阅读:
    【20220714】连岳摘抄
    【20220708】连岳摘抄
    【20220710】蓝天白云
    【20220715】连岳摘抄
    【20220716】连岳摘抄
    【20220711】连岳摘抄
    python用request实现curl u 基于httpBasicuthentication认证
    :shell expect实战实例
    【impala】取消impala失败的任务
    presto安装集成kerberos
  • 原文地址:https://www.cnblogs.com/zk2020/p/13871264.html
Copyright © 2020-2023  润新知