Skip to content

Instantly share code, notes, and snippets.

@veesa
Created September 8, 2015 22:40
Show Gist options
  • Save veesa/904de55de663b9f82b09 to your computer and use it in GitHub Desktop.
Save veesa/904de55de663b9f82b09 to your computer and use it in GitHub Desktop.
Java Registration Servlet
package controllers;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
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 modules.Member;
@WebServlet(name = "RegistrationServlet", urlPatterns = {"/RegistrationServlet"})
public class RegistrationServlet extends HttpServlet {
private boolean fieldsAreValid(HttpServletRequest request) {
boolean valid = true;
String titleFault = "";
if (request.getParameter("title") == null || request.getParameter("title").trim().isEmpty()) {
titleFault = "* Title name is empty.";
valid = false;
} else if (!request.getParameter("title").matches("^[a-zA-Z]*$")) {
titleFault = "* Please choose a title";
valid = false;
}
request.setAttribute("titleFault", titleFault);
String firstNameFault = "";
if (request.getParameter("forename") == null || request.getParameter("forename").trim().isEmpty()) {
firstNameFault = "First name is empty.";
valid = false;
} else if (!request.getParameter("forename").matches("^[a-zA-Z]*$")) {
firstNameFault = "First name is invalid, must only contain letters e.g. Adam";
valid = false;
}
request.setAttribute("firstNameFault", firstNameFault);
String lastNameFault = "";
if (request.getParameter("surname") == null || request.getParameter("surname").trim().isEmpty()) {
lastNameFault = "Last name is empty.";
valid = false;
} else if (!request.getParameter("surname").matches("^[a-zA-Z]*$")) {
lastNameFault = "Last name is invalid, must only contain letters e.g. Gates";
valid = false;
}
request.setAttribute("lastNameFault", lastNameFault);
String monthFault = "";
if (request.getParameter("month") == null || request.getParameter("month").trim().isEmpty()) {
monthFault = "* Month is empty.";
valid = false;
} else if (!request.getParameter("month").matches("0[1-9]|1[0-2]")) {
monthFault = "* Invalid month";
valid = false;
}
request.setAttribute("monthFault", monthFault);
//("/^01|02|03|04|05|06|07|08|09|10|11|12$/")
String dayFault = "";
if (request.getParameter("day") == null || request.getParameter("day").trim().isEmpty()) {
dayFault = "* Day is empty.";
valid = false;
} else if (!request.getParameter("day").matches("[0-2]\\d|3[01]")) {
dayFault = "* Invalid day";
valid = false;
}
request.setAttribute("dayFault", dayFault);
String yearFault = "";
if (request.getParameter("year") == null || request.getParameter("year").trim().isEmpty()) {
yearFault = "* Year is empty.";
valid = false;
} else if (!request.getParameter("year").matches("(19|2[0-1])\\d{2}$")) {
yearFault = "* Invalid year";
valid = false;
}
request.setAttribute("yearFault", yearFault);
String streetFault = "";
if (request.getParameter("street") == null || request.getParameter("street").trim().isEmpty()) {
streetFault = "* Street is empty.";
valid = false;
} else if (!request.getParameter("street").matches("\\d{1,3}.?\\d{0,3}\\s[a-zA-Z]{2,30}\\s[a-zA-Z]{2,15}")) {
streetFault = "* Enter street name";
valid = false;
}
request.setAttribute("streetFault", streetFault);
String cityFault = "";
if (request.getParameter("city") == null || request.getParameter("city").trim().isEmpty()) {
cityFault = "* City is empty.";
valid = false;
} else if (!request.getParameter("city").matches("^[a-zA-Z]+(?:[\\s-][a-zA-Z]+)*$")) {
cityFault = "* Enter city";
valid = false;
}
request.setAttribute("cityFault", cityFault);
String countyFault = "";
if (request.getParameter("county") == null || request.getParameter("county").trim().isEmpty()) {
countyFault = "* County is empty.";
valid = false;
} else if (!request.getParameter("county").matches("^[a-zA-Z]+(?:[\\s-][a-zA-Z]+)*$")) {
countyFault = "* Enter county";
valid = false;
}
request.setAttribute("countyFault", countyFault);
String postcodeFault = "";
if (request.getParameter("postcode") == null || request.getParameter("postcode").trim().isEmpty()) {
postcodeFault = "* Postcode is empty.";
valid = false;
} else if (!request.getParameter("postcode").toUpperCase().matches("(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX]][0-9][A-HJKSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY])))) [0-9][A-Z-[CIKMOV]]{2})")) {
postcodeFault = "* Postcode is invalid.";
valid = false;
}
request.setAttribute("postcodeFault", postcodeFault);
String emailFault = "";
if (request.getParameter("email") == null || request.getParameter("email").trim().isEmpty()) {
emailFault = "* Email Address is empty.";
valid = false;
} else if (!request.getParameter("email").matches("^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z]){2,4}+$")) {
emailFault = "* Email Address is invalid.";
valid = false;
}
request.setAttribute("emailFault", emailFault);
String usernameFault = "";
if (request.getParameter("username") == null || request.getParameter("username").trim().isEmpty()) {
usernameFault = "* Username is empty.";
valid = false;
} else {
if (!request.getParameter("username").matches("^[a-zA-Z0-9]{6,12}")) {
usernameFault = "\n* Username can only be alphanumeric and between 6-12 characters e.g.userName3";
valid = false;
} else {
try {
DatabaseAccess ac = new DatabaseAccess();
Connection c = ac.getConnection();
Statement stmt = c.createStatement();
String sqlCheck = "SELECT username FROM member WHERE username='" + request.getParameter("username").trim() + "';";
ResultSet rs = stmt.executeQuery(sqlCheck);
//if there is an existing username
while (rs.next()) {
//this means there is a username match
usernameFault = "* This username is taken. Please choose another.";
valid = false;
}
c.close();
} catch (ServletException | SQLException ex) {
Logger.getLogger(RegistrationServlet.class.getName()).log(Level.SEVERE, null, ex);
//Logger.getLogger(RegistrationServlet.class.getName()).log(Level.SEVERE, null, sqle);
}
}
}
request.setAttribute("usernameFault", usernameFault);
String passFault = "";
String password1 = request.getParameter("password");
if (password1 == null || password1.trim().isEmpty()) {
passFault = "* Password is empty.";
valid = false;
} else if (!password1.matches("^[a-zA-Z0-9]{6,12}$")) {
passFault = "* Password only only alphanumeric and between 6-12 characters e.g. passWord2";
valid = false;
}
request.setAttribute("passFault", passFault);
String passConfFault = "";
String password2 = request.getParameter("password2");
if (password2 == null || password2.trim().isEmpty()) {
passConfFault = "* Password is empty.";
valid = false;
} else if (!password2.matches("^[a-zA-Z0-9]{6,12}$")) {
passConfFault = "* Password only only alphanumeric and between 6-12 characters e.g. passWord4";
valid = false;
}
request.setAttribute("passConfFault", passConfFault);
String matchFault = "";
if (password1 != null && password2 != null) {
if (!password2.equals(password1)) {
matchFault = "* Passwords do not match.";
valid = false;
}
}
request.setAttribute("matchFault", matchFault);
String roleFault = "";
if (request.getParameter("role") == null || request.getParameter("role").trim().isEmpty()) {
roleFault = "* Role is empty.";
valid = false;
} else if (!request.getParameter("role").matches("^[a-zA-Z]*$")) {
roleFault = "* Role isInsurer";
valid = false;
}
request.setAttribute("roleFault", roleFault);
String privacyFault = "";
if (request.getParameter("privacy") == null || request.getParameter("privacy").trim().isEmpty()) {
privacyFault = "* Privacy is empty.";
valid = false;
} else if (!request.getParameter("role").matches("^[a-zA-Z]*$")) {
privacyFault = "* Privacy isPublic";
valid = false;
}
request.setAttribute("privacyFault", privacyFault);
return valid;
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, SQLException, ParseException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
String title = request.getParameter("title").trim();
String forename = request.getParameter("forename").trim();
String surname = request.getParameter("surname").trim();
String monthStr = request.getParameter("month").trim();
String dayStr = request.getParameter("day").trim();
String yearStr = request.getParameter("year").trim();
int month = Integer.valueOf(monthStr);
int day = Integer.valueOf(dayStr);
int year = Integer.valueOf(yearStr);
Date dob = new Date(year, month, day);
String street = request.getParameter("street").trim();
String city = request.getParameter("city").trim();
String county = request.getParameter("county").trim();
String postcode = request.getParameter("postcode").trim();
String email = request.getParameter("email").trim();
String password = request.getParameter("password");
String password2 = request.getParameter("password2");
String username = request.getParameter("username").trim();
String pw_hash = BCrypt.hashpw(request.getParameter("password"), BCrypt.gensalt());
String isInsurerStr = request.getParameter("role").trim();
String isPublicStr = request.getParameter("privacy").trim();
boolean isInsurer, isPublic;
if (fieldsAreValid(request)) {
ResultSet uNameCheck = testAccess.runSelectQuery("SELECT title"+title+"forname" + forname+"surname"
+surname+"street" + street+ "city" + city +"county" +county + "dob" + dob +"postcode"+postcode+"email"+
email+"password"+password+"username"+ username + " FROM member WHERE username='" + username + "';", testConn);
out.println(uNameCheck);
// Send it on to a different View
request.getRequestDispatcher("Register").forward(request, response);
testConn.close();
Member activeMember = new Member();
//checks it is not a duplicate username
//ResultSet uNameCheck = ac.runSelectQuery("SELECT * FROM member WHERE username='" + username + "';", c);
//if username exit go back to sign up page
// while (uNameCheck.next()) {
// request.getRequestDispatcher("registration.jsp").forward(request, response);
// }
//else add new user to database table "owner"
if (isInsurerStr.equals("true")) {
isInsurer = true;
} else {
isInsurer = false;
}
if (isPublicStr.equals("true")) {
isPublic = true;
} else {
isPublic = false;
}
activeMember = new Member(title, surname, forename, username, pw_hash, dob, street, city, county, postcode, email, isInsurer, isPublic);//creates owner object
if (isInsurer) {
activeMember.CreateInsurer();
} else {
activeMember.CreateInsured();
}
HttpSession session = request.getSession();
session.setAttribute("activeMember", activeMember);
request.setAttribute("activeMember", activeMember);
//send to Confirmation view
if (isInsurer) {
request.getRequestDispatcher("add_plan.jsp").forward(request, response);
} else {
request.getRequestDispatcher("add_policy.jsp").forward(request, response);
}
} else {
request.setAttribute("title", title);
request.setAttribute("forename", forename);
request.setAttribute("surname", surname);
request.setAttribute("month", month);
request.setAttribute("day", day);
request.setAttribute("year", year);
request.setAttribute("street", street);
request.setAttribute("city", city);
request.setAttribute("county", county);
request.setAttribute("postcode", postcode);
request.setAttribute("email", email);
request.setAttribute("username", username);
request.setAttribute("role", isInsurerStr);
request.setAttribute("privacy", isPublicStr);
request.getRequestDispatcher("registration.jsp").forward(request, response);
}
} finally {
out.close();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
try {
processRequest(request, response);
} catch (ParseException ex) {
Logger.getLogger(RegistrationServlet.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (SQLException ex) {
Logger.getLogger(RegistrationServlet.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
try {
processRequest(request, response);
} catch (ParseException ex) {
Logger.getLogger(RegistrationServlet.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (SQLException ex) {
Logger.getLogger(RegistrationServlet.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment