Ein forward-ändert nicht die URL in der browser-Adressleiste
Ich bin gerade erst mit Servlets/JSP/JSTL und ich habe so etwas wie dieses:
<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>
und in meine doPost Methode
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);
}
aber etwas ist nicht in Ordnung, denn ich wollte so etwas wie dieses:
- wenn Benutzer aktive Sitzung und protokolliert wurde, um das system "zalogowany" sollte zeigen,
- sonst Protokollierung form
das problem ist, was ich Tue, diese leitet setz mich nicht auf index.jsp-Datei, die im root-Ordner von meinem Projekt, ich habe noch in meiner Adressleiste Projekt/Hai.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn das wirklich dein nur problem
dann muss ich Sie enttäuschen: das ist vollständig von der Spezifikation. Ein forward im Grunde weist den server an, die angegebene JSP zur Präsentation der Ergebnisse. Es wird Ihnen nicht sagen, den client zu senden, eine neue HTTP-Anforderung an die angegebene JSP. Wenn Sie erwarten, dass eine änderung in der Adresse-Leiste des Clients, dann muss man dem client mitteilen, so senden Sie eine neue HTTP-Anforderung. Sie können dies durch das senden einer Umleitung statt eine nach vorne.
So, statt
tun
Alternative ist, um loszuwerden, das
/index.jsp
URL zusammen und verwenden/Hai
URL die ganze Zeit. Sie können dies erreichen, indem er den JSP entfernt in/WEB-INF
Ordner (so, dass der enduser kann, öffnen Sie es nie direkt und ist gezwungen, zu verwenden, die servlet-URL) und implementieren diedoGet()
von der servlet-als auch zur Anzeige der JSP:Diese Weise können Sie nur öffnen http://localhost:8080/Project/Hai und sehen Sie die Ausgabe der JSP-Seite und das Formular wird nur Einreichen, um die gleiche URL, also die URL in der browser-Adressleiste wird grundsätzlich nicht ändern. Würde ich vielleicht ändern Sie nur die
/Hai
etwas mehr sinnvoll, wie/login
.Siehe auch:
User
in der Sitzung. In der filter, die Sie nur überprüfen Sie Ihre Präsenz und dann weiter oder leitet die Anfrage entsprechend.getServletContext().getRequestDispatcher("/message.jsp").forward(request, response);
umleiten von servlet zu jsp. Aber das funktioniert nicht im server. Ich verwendetresponse.sendRedirect(request.getContextPath() + "/message.jsp");
aber dann jsp zeigt nicht die Nachricht senden, die ich vom servlet. wie es zu lösen ?