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/

  • 相关阅读:
    请朋友做事,须以名誉为限,为朋友做事,亦须以名誉为限
    这世上总有一些人记得你,关注着你,牵挂着你
    杏花春雨已不再,牧童遥指已不再,剑门细雨渭城轻尘也都已不再
    如果要你做鲁滨逊,你会选第三型还是第二型的朋友做“礼拜五”呢
    人类最不能伤害的就是自尊
    单靠理论和教训是无济于事的
    交真朋友已是件比较奢侈的事儿
    他一定是一个懂生活、懂人生,爱自己、爱别人的人
    国子监,就是从前的大学
    只有把理想和现实有机结合起来,才有可能成为一个成功之人
  • 原文地址:https://www.cnblogs.com/-beyond/p/10092164.html
Copyright © 2011-2022 走看看