0

After much trial and error, I was finally able to complete a job portal using Maven project on Eclipse and have integrated MySQL. I am stuck on one more issue that I would appreciate any guidance on (this is my first time working on a project like this).

There are two views, a student view and a recruiter view. Once the user signs up and logs in, they will see their respected view. The part where I am now stuck on is I am not sure how to add a constraint so that when a user signs up, they must enter an email ending in .edu. I know this will probably utilize the String.endsWith() method, but I am unsure of where to place it.

Here is my RegisterServlet.java file:

package com.servlet;

import java.io.IOException;

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;

import com.DB.DBConnect;
import com.dao.UserDAO;
import com.entity.User;

@WebServlet("/add_user")
public class RegisterServlet extends HttpServlet{

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        try {
            String name = req.getParameter("name");
            String qua = req.getParameter("qua");
            String email = req.getParameter("email");
            String ps = req.getParameter("ps");
            
            UserDAO dao = new UserDAO(DBConnect.getConn());
            
            User u = new User(name, email, ps, qua, "User");
            boolean f = dao.addUser(u);
            HttpSession session = req.getSession();
            
            if(f) {
                session.setAttribute("succMsg", "Registeration Complete!");
                resp.sendRedirect("signup.jsp");
            } else {
                session.setAttribute("succMsg", "Registeration Not Complete");
                resp.sendRedirect("signup.jsp");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    } 
}

and here is my signup.jsp file:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
        <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page isELIgnored="false" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<%@include file="all_component/all_css.jsp"%>
</head>
<body style="background-color: #f7f7f7;">
<%@include file="all_component/navbar.jsp"%>
<div class="container-fluid">
<div class="row p-4">
<div class="col-md-4 offset-md-4">
<div class="card">
<div class="card-body">
<div class="text-center">
<i class="fa fa-user-plus fa-2x" aria-hidden="true"></i>
<h5>Register Now</h5>
</div>

<c:if test="${not empty succMsg }">
<h4 class="text-center text-success">${succMsg }</h4>
<c:remove var="succMsg" />
</c:if>

<form action="add_user" method="post">
<div class="form-group">
<label>Enter Full Name</label> <input type="text" required="required" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" name="name">
</div>

<div class="form-group">
<label>Student or Recruiter?</label> <input type="text" required="required" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" name="qua">
</div>

<div class="form-group">
<label>Enter Email</label> <input type="text" required="required" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" name="email">
</div>

<div class="form-group">
<label for="exampleInputPassword1">Enter Password</label> <input type="password" required="required" class="form-control" id="exampleInputPassword1" name="ps">
</div>

<button type="submit" class="btn btn-primary badge-pill btn-block">Register</button>
</form>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

And this is my UserDAO.java code:

package com.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import com.entity.User;

public class UserDAO {
    
    private Connection conn;

    public UserDAO(Connection conn) {
        super();
        this.conn = conn;
    }
    
    public boolean addUser(User u) {
        boolean f = false;
        
        try {
            String sql = "insert into user(name, qualification, email, password, role) values(?,?,?,?,?)";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, u.getName());
            ps.setString(2, u.getQualification());
            ps.setString(3, u.getEmail());
            ps.setString(4, u.getPassword());
            ps.setString(5, "user");
            
            int i = ps.executeUpdate();
            if(i == 1) {
                f = true;
            }
            
        } catch (Exception  e) {
            e.printStackTrace();
        }
        return f;
    }
    
    public User login(String em, String psw) {
        User u = null;
        try {
            String sql = "select * from user where email=? and password=?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, em);
            ps.setString(2, psw);
            
            ResultSet rs = ps.executeQuery();
            while(rs.next()) {
                u = new User();
                u.setId(rs.getInt(1));
                u.setName(rs.getString(2));
                u.setQualification(rs.getString(3));
                u.setEmail(rs.getString(4));
                u.setPassword(rs.getString(5));
                u.setRole(rs.getString(6));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return u;
    }
}

I believe in RegisterServlet, I can do something like:

if(f && email.endsWith(".edu") {
    session.setAttribute("succMsg", "Registeration Complete!");
    resp.sendRedirect("signup.jsp");
} else {
    session.setAttribute("succMsg", "Registeration Not Complete");
    resp.sendRedirect("signup.jsp");
}

But although I get a "registration not complete" alert, the user still goes into the database.

Mark Rotteveel
  • 100,966
  • 191
  • 140
  • 197
  • Obviously, you should validate *before* you save, and make sure the save code doesn't run when validation failed (e.g. by only doing it in the `if`, or by returning from the `else` after the redirect). Please show what you tried as a [mre], because displaying the code *without* validation and then only a fragment of what you did try is not helpful. – Mark Rotteveel Dec 08 '22 at 16:06

0 Answers0