I am just starting with Servlets/JSP/JSTL and I have something like this:
<html>
<body>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<jsp:directive.page contentType="text/html; charset=UTF-8" />
<c:choose>
<c:when test='${!empty login}'>
zalogowany
</c:when>
<c:otherwise>
<c:if test='${showWarning == "yes"}'>
<b>Wrong user/password</b>
</c:if>
<form action="Hai" method="post">
login<br/>
<input type="text" name="login"/><br/>
password<br/>
<input type="password" name="password"/>
<input type="submit"/>
</form>
</c:otherwise>
</c:choose>
</body>
</html>
and in my doPost method
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
HttpSession session=request.getSession();
try
{
logUser(request);
}
catch(EmptyFieldException e)
{
session.setAttribute("showWarning", "yes");
} catch (WrongUserException e)
{
session.setAttribute("showWarning", "yes");
}
RequestDispatcher d=request.getRequestDispatcher("/index.jsp");
System.out.println("z");
d.forward(request, response);
}
but something is not working, because I wanted something like this:
- if user had active session and was logged to system “zalogowany” should show
- otherwise logging form
the problem is whatever I do, those forwards don’t put me to index.jsp, which is in root folder of my Project, I still have in my address bar Projekt/Hai.
If that is really your only problem
then I have to disappoint you: that’s fully by specification. A forward basically tells the server to use the given JSP to present the results. It does not tell the client to send a new HTTP request on the given JSP. If you expect a change in the address bar of the client, then you have to tell the client to send a new HTTP request. You can do that by sending a redirect instead of a forward.
So, instead of
do
An alternative is to get rid of the
/index.jspURL altogether and use/HaiURL all the time. You can achieve this by hiding the JSP away in/WEB-INFfolder (so that the enduser can never open it directly and is forced to use the servlet’s URL for this) and implement thedoGet()of the servlet as well to display the JSP:This way, you can just open http://localhost:8080/Project/Hai and see the output of the JSP page and the form will just submit to the very same URL, so the URL in browser address bar will basically not change. I would maybe only change the
/Haito something more sensible, such as/login.See also: