so im trying to get my web app to redirect the user depending on what role they have from objects in a database. i have a basic login page that redirects you to a servlet where i then want to connect to said db select all the data i have in it (i only have 3 rows in it for testing purposes) and match the username/password fields and then having 3 if statements for each of the roles that a user can have (Client, Seller, Admin). I've managed to get the connection working but oddly enough when i try to redirect them something doesn't work. i added some debugging System.out.println();
lines to check if the servlet goes into the loop and if statements but i noticed it doesnt enter it at all.
package com.mainpackage.servlets;import java.io.IOException;import java.io.PrintWriter;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.ResultSet;import java.sql.Statement;import jakarta.servlet.RequestDispatcher;import jakarta.servlet.ServletException;import jakarta.servlet.annotation.WebServlet;import jakarta.servlet.http.HttpServlet;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;@WebServlet("/LoginServlet")public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); response.setContentType("text/html"); PrintWriter pw =response.getWriter(); //initializing connections Connection con=null; Statement stmt=null; ResultSet rs=null; try { Class.forName("com.mysql.cj.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/ergasia2","root","root"); stmt = con.createStatement(); rs = stmt.executeQuery("select * from user"); while (rs.next()) { System.out.println("<br>"+rs.getString("username")+", "+rs.getString("password")+", "+rs.getString("role")); if (username == rs.getString("username") && password == rs.getString("password")) { System.out.println("entered main if"); //debug if(rs.getString("role") == "Client") { System.out.println("entered first role check");//debug RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/clientDashboard.jsp"); dispatcher.forward(request, response); break; }else if(rs.getString("role") == "Seller") { System.out.println("entered second role check");//debug RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/salesmanDashboard.jsp"); dispatcher.forward(request, response); break; }else if(rs.getString("role") == "Admin") { System.out.println("entered third role check");//debug RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/adminDashboard.jsp"); dispatcher.forward(request, response); break; } } } }// End of try block catch(Exception e) {e.printStackTrace();} } protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { response.sendRedirect(request.getContextPath() +"/LoginServlet"); }}
this is my servlet. with the connection to the db etc
So i was thinking that this would check every object in the db with the username password then after finding one that matched with the values given in the login page it would the just check what role the user had and show the corresponding dashboard after.
i've done some basic tests to see if the jsp would be shown at all without the db checking and it was displayed just fine through
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/salesmanDashboard.jsp"); dispatcher.forward(request, response);//and response.sendRedirect(request.getContextPath() +"/LoginServlet");
Is there any way i can take this code and somehow make it go through an "if()" and then redirect to different options?
I'll also post my web.xml pom.xml and index.xml in case it's something in them that's the problem
<!DOCTYPE html><html lang="en"><head><title>Login Page</title></head><body><h2>Login Form</h2><form action="LoginServlet" method="post"><label for="username">Username:</label><br><input type="text" id="username" name="username"><br><label for="password">Password:</label><br><input type="password" id="password" name="password"><br><input type="submit" value="Submit"></form></body></html>
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://jakarta.ee/xml/ns/jakartaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd" version="6.0"><display-name>Ergasia 2</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list></web-app>
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>Ergasia2</artifactId><version>1.0-SNAPSHOT</version><name>Ergasia 2</name><packaging>war</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.target>11</maven.compiler.target><maven.compiler.source>11</maven.compiler.source><junit.version>5.10.0</junit.version></properties><dependencies><dependency><groupId>jakarta.platform</groupId><artifactId>jakarta.jakartaee-api</artifactId><version>9.0.0</version><scope>provided</scope></dependency><dependency><groupId>org.glassfish.jersey.containers</groupId><artifactId>jersey-container-servlet</artifactId><version>3.1.3</version></dependency><dependency><groupId>org.glassfish.jersey.media</groupId><artifactId>jersey-media-json-jackson</artifactId><version>3.1.3</version></dependency><dependency><groupId>org.glassfish.jersey.inject</groupId><artifactId>jersey-cdi2-se</artifactId><version>3.1.3</version></dependency><dependency><groupId>org.jboss.weld.se</groupId><artifactId>weld-se-core</artifactId><version>5.1.2.Final</version></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>${junit.version}</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.4.0</version></plugin></plugins></build></project>
so after being an idiot i changed the code to this
try { Class.forName("com.mysql.cj.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/YOUR_DATABASE","root","root"); stmt = con.createStatement(); rs = stmt.executeQuery("SELECT * FROM user WHERE username='" + username +"' AND password='" + password +"'"); if (rs.next()) { String userRole = rs.getString("role"); if ("admin".equalsIgnoreCase(userRole)) { RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/adminDashboard.jsp"); dispatcher.forward(request, response); } else if ("salesman".equalsIgnoreCase(userRole)) { RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/salesmanDashboard.jsp"); dispatcher.forward(request, response); } else if ("client".equalsIgnoreCase(userRole)){ RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/clientDashboard.jsp"); dispatcher.forward(request, response); } } } catch(Exception e) {e.printStackTrace();}
which seemed like the appropriate changes to the code but it still doesn't work meaning i'm still missing something
SOLVED
@WebServlet("/LoginServlet")public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); response.setContentType("text/html"); PrintWriter pw =response.getWriter(); //initializing connections Connection con=null; Statement stmt=null; ResultSet rs=null; try { Class.forName("com.mysql.cj.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/ergasia2","root","root"); String sql = "SELECT * FROM user WHERE username=? AND password=?"; PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setString(1, username); // Set the first placeholder to 'username' pstmt.setString(2, password); // Set the second placeholder to 'password' rs = pstmt.executeQuery(); if(rs.next()){ System.out.println(rs.getString("role")); } if ("Admin".equals(rs.getString("role"))) { RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/adminDashboard.jsp"); dispatcher.forward(request, response); } else if ("Seller".equals(rs.getString("role"))) { RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/salesmanDashboard.jsp"); dispatcher.forward(request, response); } else if ("Client".equals(rs.getString("role"))){ RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/clientDashboard.jsp"); dispatcher.forward(request, response); } } catch(Exception e) {e.printStackTrace();} } protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { response.sendRedirect(request.getContextPath() +"/LoginServlet"); }}