请求转发和重定向的路径选择

来源:2-4 请求转发与响应重定向的原理

哆丶哆

2019-07-28 15:45:35

老师,本节讲了请求转发和重定向的原理,我想知道为什么两者在转到同一URL的时候,填写的路径是不一样的啊?如视频讲解中,从CheckLoginServlet 跳转到IndexServlet,代码如下:

CheckLoginServlet.java:

package com.imooc.servlet.direct;

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;

/**
 * Servlet implementation class CheckLoginServlet
 */
@WebServlet("/direct/check")
public class CheckLoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public CheckLoginServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("用户登录成功");
		request.setAttribute("username", "admin");
		//实现了请求转发的功能
		//request.getRequestDispatcher("/direct/index").forward(request, response);
		//响应重定向需要增加contextPath
		response.sendRedirect("/servlet_advanced/direct/index");
	}

}

IndexServlet .java:

package com.imooc.servlet.direct;

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;

/**
 * Servlet implementation class IndexServlet
 */
@WebServlet("/direct/index")
public class IndexServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public IndexServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String username = (String)request.getAttribute("username");
		response.getWriter().println("This is index page!current username is " + username);
	}

}

其中,请求转发和重定向的路径是不一样的,为什么?

		//实现了请求转发的功能
		//request.getRequestDispatcher("/direct/index").forward(request, response);
		//响应重定向需要增加contextPath
		response.sendRedirect("/servlet_advanced/direct/index");


写回答

1回答

好帮手慕珊

2019-07-28

你好!重定向和转发前的/的含义是不一样的。

重定向路径前的/表示的是服务器根目录,不包括项目名称,所以它要加上项目名。

而转发是服务器内部进行,只是在项目内部进行转发,所以它的路径前的/表示的是当前的项目,也就是表示项目根目录。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

0

0 学习 · 9666 问题

查看课程