Ich habe eine Java-Servlet-Webanwendung, alles funktioniert gut. Es gibt jedoch eine kleine Sache, die mich stört.Java-Servlets - Weiterleiten an URL anstelle von ServletName.do
Wenn sich eine Person anmeldet, wird das Formular an das LoginServlet weitergeleitet, das die Informationen überprüft. Wenn die Informationen verifiziert wurden, wird der Benutzer zu Dashboard.jsp weitergeleitet. Die Sache, die mich stört ist, dass die URL im Browser "http://localhost:8080/LoginServlet.do" anstelle von "http://localhost:8080/dashboard.jsp" sagt. Ich übergebe die Anfrage- und Antwortobjekte, also muss ich einen RequestDispatcher verwenden, richtig?
Wie kann ich sicherstellen, dass die URL 'dashboard.jsp' anstelle von 'LoginServlet.do' lautet?
Anmeldung Servlets:
public class LoginServlet extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*
* Information that has arrived here, has been checked by the login filter.
* This servlet takes the parameters from the form, calls the UserService and tries to login.
* If it succeeds: put the User object in the session scope, and redirect to welcome.jsp with a message 'login successful'
* If it fails: redirect back to index.jsp with a message 'Login failed'
*/
RequestDispatcher rd;
String email = req.getParameter("loginEmail");
String password = req.getParameter("loginPassword");
UserService us = ServiceProvider.getUserService();
User u = us.loginUser(email, password);
if(u != null) {
// User information was correct, login successful.
req.getSession().removeAttribute("loggedUser");
req.getSession().setAttribute("loggedUser", u);
req.setAttribute("message", "Login successful");
u.getAllPomodoros();
rd = req.getRequestDispatcher("dashboard.jsp");
rd.forward(req, resp);
} else {
// Login failed. Redirect to index.jsp
req.setAttribute("message", "Login failed");
rd = req.getRequestDispatcher("index.jsp");
rd.forward(req, resp);
}
}
}
Mein Web.xml (nicht sicher, ob es relevant ist):
--SNIP--
<servlet>
<servlet-name>Login Servlet</servlet-name>
<servlet-class>controller.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Login Servlet</servlet-name>
<url-pattern>/LoginServlet.do</url-pattern>
</servlet-mapping>
--SNIP--
Vielen Dank für Ihre Antwort. Können Sie mir sagen, was die Verwendung von 'request.getContextPath()' ist? – Cake
getContextPath() gibt den Namen der App wie in Ihrem URl angezeigt zurück. Wenn Ihre URL etwa "http: // localhost: 8080/App/index.jsp" lautet, lautet Ihr Kontextpfad App –
. Empfehlen Sie das auf jedem Link zu verwenden? Danke für die Antwort. – Cake