【发布时间】:2015-10-28 09:17:11
【问题描述】:
我正在使用 Head First Servlets 和 JSP 中的 RequestDispatcher。我不清楚以下几点
- 我们什么时候应该在请求调度器中使用正斜杠(/)?
- 我们什么时候不应该在请求调度程序中使用正斜杠(/)?
- 相对路径是否应该始终以正斜杠开头?
- 以正斜杠 (/) 开头和没有正斜杠 (/) 的相对路径之间的区别。例如 index.html 和 /index.html 之间的区别?
这是我的 Servlet 代码
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
String userId = request.getParameter("userId");
String password = request.getParameter("password");
LoginService loginService = new LoginService();
boolean result = loginService.authenticate(userId, password);
if(result){
User userDetails = loginService.getUserDetails(userId);
request.setAttribute("user", userDetails);
//response.sendRedirect("success.jsp");
RequestDispatcher requestDispatcher = request.getRequestDispatcher("success.jsp");
requestDispatcher.forward(request, response);
return;
}else{
response.sendRedirect("/login.jsp");
return;
}
}
我的登录页面如下
我的成功页面如下
我正在验证登录用户,如果该用户是有效用户,我会将其转发到成功页面。
这里按照我说的代码
RequestDispatcher requestDispatcher = request.getRequestDispatcher("success.jsp");
requestDispatcher.forward(request, response);
或
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/success.jsp");
requestDispatcher.forward(request, response);
我的控制权都交给 Success.jsp。在读取请求调度程序时,在 Head First JSP 和 Servlets 中,我无法理解以下行,它是这样的
RequestDispatcher requestDispatcher = request.getRequestDispatcher("result.jsp");
这是一个相对路径,因为没有初始正斜杠(“/”)。所以在这种情况下,容器在请求所在的同一逻辑位置查找“result.jsp”。
如果路径以正斜杠('/") 开头,则容器将其视为“从该 webapp 的根目录开始”。如果路径不以正斜杠开头,则认为它相对于原始请求。
以下内容取自 Head First JSP 和 Servlets。
以上几行是什么意思。我无法清楚地了解“它被认为是相对于原始请求”有人可以举个例子来解释一下吗?
【问题讨论】:
标签: jsp servlets requestdispatcher