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