请求转发和重定向的路径选择
来源: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回答
你好!重定向和转发前的/的含义是不一样的。
重定向路径前的/表示的是服务器根目录,不包括项目名称,所以它要加上项目名。
而转发是服务器内部进行,只是在项目内部进行转发,所以它的路径前的/表示的是当前的项目,也就是表示项目根目录。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
相似问题