zoukankan      html  css  js  c++  java
  • Servlet 转发请求与重定向,以及路径问题

     

    转发请求

      当一个servlet接收到请求后,如果需要将请求转发给另外一个servlet或者jsp文件,可使用下面这种方法:

    package cn.ganlixin.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet("/one")
    public class ServletOne extends HttpServlet {
    	
    	@Override
    	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		RequestDispatcher requestDispatcher = request.getRequestDispatcher("two");
    		requestDispatcher.forward(request, response);
    	}
    	
    }
    

      其实最主要的代码就一行:

    request.getRequestDispatcher("two").forward(request, response);
    

      首先通过request.getRequestDispatcher(),调用它,是为了获得RequestDispatcher(请求的分发器)。该方法接收一个字符串,该字符串可以是一个@WebServlet中的值,也可以是一个jsp文件,表示要转发到那个servlet或者jsp。

      调用RequestDispatcher的forward()方法,接收两个参数,分别是request和response,可以理解为会将这两个参数request和response传递给要转发的servlet的service方法。如果是转发到jsp,就会将request、response传递给_jspService方法。

      注意,传递给forward()方法的request和response可能在这个servlet中已经进行过一些处理(对数据进行了一些操作),这些操作转发给下一个servlet后,下一个servlet是可以获取上一个servlet中添加的数据的。

    重定向

      转发请求将请求的携带的数据交给另外的一个servlet来处理(jsp在一定意义上也是servlet)。

      重定向是将当前的请求路径更改为其他路径,将该路径返回给客户端,客户端再对该路径发起一次请求。

    package cn.ganlixin.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet("/two")
    public class ServletTwo extends HttpServlet {
    	
    	@Override
    	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		response.sendRedirect("three");
    	}
    }
    

      

    请求转发和重定向的区别

      1、如果是使用转发请求,那么客户端在请求之前和获得相应之后,浏览器的URL路径都是不会变的。

      2、如果是使用重定向,那么客户端在获得响应后的,重定向的页面的URL和原来的URL不一样(也就是说,重定向时,URL会改变)。

      3、重定向的话,相当于用户浏览器发起了两次请求,一次是原始URL,第二次是重定向的URL,而请求转发的方式只发起一次请求,所以一般说来,请求转发的方式比重定向要高效一些。

    请求路径的问题

      假设/project/WebContent/

  • 相关阅读:
    Java对象的生命周期与作用域的讨论(转)
    [置顶] Oracle学习路线与方法
    Java实现 蓝桥杯 算法训练 未名湖边的烦恼
    Java实现 蓝桥杯 算法训练 未名湖边的烦恼
    Java实现 蓝桥杯 算法训练 未名湖边的烦恼
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
  • 原文地址:https://www.cnblogs.com/-beyond/p/10092164.html
Copyright © 2011-2022 走看看