I have simple application and at home page I created form to make login
<form action="login" method="post">
<input type="hidden" name="ReturnUrl" value='${requestScope["javax.servlet.forward.request_uri"]}' />
<input type="text" name="login" />
<input type="password" name="password" />
<input type="checkbox" name="RememberMe" checked/>
<input type="submit" value="Make login" />
<form/>
Idea is quite simple. After I make login I want to redirect to home page (value for ReturnUrl from home page I tested "/" and "/home" - result is the same)
Login servlet consists overidden doPost
@WebServlet("/login")
public class Login extends HttpServlet
{
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String name = request.getParameter("login");
String password = request.getParameter("password");
// get value of remember me checkbox
String rm = request.getParameter("RememberMe");
boolean rememberMe = !(rm == null || rm.isEmpty());
// get return url
String ReturnUrl = request.getParameter("ReturnUrl");
// make login here
/*.....*/
RequestDispatcher dispatcher = request.getRequestDispatcher(ReturnUrl);
dispatcher.forward(request, response);
}
}
I expect that this code will call my home servlet what will show corresponding jsp.
@WebServlet("/home")
public class Home extends HttpServlet
{
private static final long serialVersionUID = 1L;
private final String page = "/WEB-INF/jsp/homePage.jsp";
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
RequestDispatcher dispatcher = request.getRequestDispatcher(page);
dispatcher.forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
RequestDispatcher dispatcher = request.getRequestDispatcher(page);
dispatcher.forward(request, response);
}
}
And home page is displayed but url is still contains "/login". I expect that it should be "/home" because I forwarded request from one servlet to other. Why url did not changed? Does forward change url?
You need user to redirect to returnURL
not forward
response.sendRedirect(returnURL);