zoukankan      html  css  js  c++  java
  • 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下的资源 能访问 不能访问
  • 相关阅读:
    9天C#转Java学习过程,自己记录一下
    【分享】我们用了不到200行代码实现的文件日志系统,极佳的IO性能和高并发支持,附压力测试数据
    微信公众号第三方平台开发坑
    分享我们团队最近开发的微信公众号运营助手,可以在手机上回复粉丝留言
    分享一波会眨眼的壁纸
    idea连接服务器上传jar并运行
    ngnix简单使用
    IntelliJ IDEA简介及简单操作
    eclipse开发创建web项目
    myeclipse/eclipse 配置SSM框架错误之一解决方法
  • 原文地址:https://www.cnblogs.com/zk2020/p/13871264.html
Copyright © 2011-2022 走看看