I am currently learning Java Servlets and JSP at university. As a little practice I created a project where I want to be able to login into a protected area. Now, I got it working by using a RequestDispatcher. However, after I have been forwarded to the protected area, the URL in the browser shows http://localhost:8080/jspractice02/FrontController
. I think it would make more sense to be http://localhost:8080/jspractice02/protected/dashboard.jsp
. Should I use sendRedirect
instead of a Dispatcher?
Another thing is that I don't know if my code structure is somewhat senseful, especially how I handle the login. I would love to get some feedback on that.
Directory Structure
+-- src
| +-- main
| +-- java
| | +-- de.practice.PresentationLayer
| | +-- FrontController.java
| +-- webapp
| | +-- home.jsp
| | +-- protected
| | +-- dashboard.jsp
| | +-- add-student.jsp
FrontController.java
package de.practice.Presentation;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class FrontController
*/
@WebServlet("/FrontController")
public class FrontController extends HttpServlet {
private static final long serialVersionUID = 1L;
private static String username = "";
private static String password = "";
private static String queryString = "";
/**
* Constructor
*/
public FrontController() {
super();
}
/**
* doGet
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String jsp = "";
queryString = request.getParameter("action");
if(queryString != null) {
switch(queryString) {
case "addStudent":
jsp = "protected/student.jsp";
}
RequestDispatcher rd = request.getRequestDispatcher(jsp);
rd.forward(request, response);
}
}
/**
* doPost
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
login(request, response);
}
/**
* validPassword
* @param request
* @param response
* @param password
* @return
*/
private boolean validPassword(HttpServletRequest request, HttpServletResponse response, String password) {
if(password.length() >= 3) {
return true;
}
return false;
}
/**
* validUsername
* @param request
* @param response
* @param username
* @return
*/
private boolean validUsername(HttpServletRequest request, HttpServletResponse response, String username) {
if(username.length() >= 3) {
return true;
}
return false;
}
/**
*
* @param request
* @param response
* @param password
* @param username
* @throws IOException
* @throws ServletException
*/
private void login(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
// Get username and password
username = request.getParameter("username");
password = request.getParameter("password");
// check if they are valid
if(validUsername(request, response, username) && validPassword(request, response, password)) {
// If valid create session
HttpSession session = request.getSession();
session.setAttribute("username", username);
// and redirect to protected area
RequestDispatcher rd = request.getRequestDispatcher("protected/dashboard.jsp");
rd.forward(request, response);
} else {
// Code for invalid login
RequestDispatcher rd = request.getRequestDispatcher("login-failed.jsp");
rd.forward(request, response);
}
}
}
<%@ include file="partials/header.jsp"%>
<section id="start" class="panel">
<div class="container">
<h1>Home</h1>
<form class="form" method="post" action="FrontController">
<div class="form-group">
<label for="username">Username</label>
<input type="text" name="username" class="form-control">
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" name="password" class="form-control">
</div>
<input type="submit" name="submitBtn" class="btn btn-primary">
</form>
</div>
</section>
<%@ include file="partials/footer.jsp"%>