2022. 10. 7. 16:36ㆍDev.Program/Java & Spring
======== MemberFrontController.java 만들기
package controller; import java.io.IOException; 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 action.Action; import sun.rmi.server.Dispatcher; import vo.ActionForward; @WebServlet("*.me") public class MemberFrontController extends HttpServlet { protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String command = request.getServletPath(); System.out.println(command); Action action = null; ActionForward forward = null; if(forward != null) { if(forward.isRedirect()) { response.sendRedirect(forward.getPath()); } else { RequestDispatcher dispatcher = request.getRequestDispatcher(forward.getPath()); dispatcher.forward(request, response); } } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doProcess(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doProcess(request, response); } } |
- 처음에 FrontController 설정하는 거!
======== WebContent 안에 member 폴더 만들기
======== login_form.jsp / join_form.jsp 만들기
< index.jsp >
<body>
<div style="float: right;"> <a href="MemberLoginForm.me">로그인</a>|<a href="MemberJoinForm.me">회원가입</a> </div> <h1>메인 페이지</h1> <h2><a href="BoardWriteForm.bo">글쓰기 페이지</a></h2> <h2><a href="BoardList.bo">글목록 페이지</a></h2> </body> |
- 로그인 회원가입 태그 추가해주기
< MemberFrontController.java >
if(command.equals("/MemberLoginForm.me")) { forward = new ActionForward(); forward.setPath("/member/login_form.jsp"); } else if(command.equals("/MemberJoinForm.me")) { forward = new ActionForward(); forward.setPath("/member/join_form.jsp"); } |
- 로그인 버튼 눌렀을 때
- 회원가입 버튼 눌렀을 때
656
< login_form.jsp >
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <style> #loginFormArea{ margin : auto; width : 400px; height : 200px; border : 2px double purple; border-radius : 10px; text-align: center; } fieldset{ text-align: center; border : none; } #selectButton{ margin-top : 10px; } table{ width : 380px; margin : auto; } .td_left{ width : 180px } .td_right{ width : 200px } </style> </head> <body> <section id="loginFormArea"> <h1>로그인</h1> <form action="MemberLoginPro.me" method="POST"> <fieldset> <table> <tr> <td class="td_left"> <label for="id">아이디 : </label> </td> <td class="td_right"> <input type="text" name="id" id="id"/> </td> </tr> <tr> <td class="td_left"> <label for="passwd">비밀번호 : </label> </td> <td class="td_right"> <input type="password" name="passwd" id="passwd"/> </td> </tr> </table> <input type="submit" value="로그인" id="selectButton"/> <input type="button" value="회원가입" onclick="location.href='MemberJoinForm.me'"> </fieldset> </form> </section> </body> </html> |
652
======== cmd 창에서 member 테이블 만들기
use jsp_model2 create table member( name varchar(12), id varchar(12) primary key, passwd varchar(12), age int, email varchar(30) unique, gender char(1) ); insert into member values(‘관리자’, ‘admin’, ‘1234’, 20, ‘admin@admin.com’, ‘여’); |
- varchar 는 variable character로 공간할당이 자유로움!
======== vo 패키지에 MemberBean.java 만들기
package vo; public class MemberBean { /* * 회원 한 명의 정보를 저장하는 DTO 객체 = 자바빈(JavaBean) * * DB 및 테이블 생성 * --------------------------------- * USE jsp_model2 // 이미 만든 DATABASE * CREATE TABLE member( name VARCHAR(12), id VARCHAR(12) PRIMARY KEY, passwd VARCHAR(12), age INT, email VARCHAR(30) UNIQUE, gender CHAR(1) ); * --------------------------------- */ private String name; private String id; private String passwd; private int age; private String email; private char gender; public MemberBean() {} public MemberBean(String name, String id, String passwd, int age, String email, char gender) { this.name = name; this.id = id; this.passwd = passwd; this.age = age; this.email = email; this.gender = gender; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPasswd() { return passwd; } public void setPasswd(String passwd) { this.passwd = passwd; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public char getGender() { return gender; } public void setGender(char gender) { this.gender = gender; } } |
- 생성자랑 getter/setter 만들어주기
======== action 패키지에 MemberLoginProAction.java 만들기
public class MemberLoginProAction implements Action { @Override public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("MemberLoginProAction"); ActionForward forward = null; return forward; } } |
- 확인용으로 sys 적기!
< MemberFrontController.java >
else if(command.equals("/MemberLoginPro.me")) { action = new MemberLoginProAction(); try { forward = action.execute(request, response); } catch (Exception e) { e.printStackTrace(); } } |
- 추가해주기
- 로그인 화면에서 로그인 버튼 눌렀을 때
- 콘솔창에 뜨면 됨!
< MemberFrontController.java >
// 로그인 처리를 위해 입력받은 아이디, 패스워드 가져오기 String id = request.getParameter("id"); String passwd = request.getParameter("passwd"); System.out.println("아이디 : " + id + ", 패스워드 : " + passwd); |
- 추가해서 아이디/패스워드 확인해보기
- 입력한 값이 콘솔창에 뜬다!
======== svc 패키지에 MemberLoginProService.java 만들기
< MemberFrontController.java >
// MemberLoginProService 클래스 인스턴스 생성 후 // 로그인 요청을 위한 isLoginMember() 메서드 호출 // => 파라미터 : 아이디, 패스워드 리턴타입 : boolean(isMember) MemberLoginProService memberLoginProService = new MemberLoginProService(); boolean isMember = memberLoginProService.isLoginMember(id, passwd); |
- 컨트롤러에 추가 후 isLoginMember()메서드 자동완성
< MemberLoginProService.java >
public boolean isLoginMember(String id, String passwd) { System.out.println("MemberLoginProService - isLoginMember()"); boolean isMember = false; System.out.println(id + "," + passwd); return isMember; } |
- 확인을 위해 껍데기만 만들어두기
- 로그인 시 콘솔창 확인!
< MemberLoginProAction.java >
// isMember 가 false 일 경우 // 자바스크립트를 활용하여 "로그인 실패!" 출력 후 이전페이지로 이동 // 아니면 index.jsp 페이지로 이동 if(!isMember) { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<script>"); out.println("alert('로그인 실패!')"); out.println("history.back()"); out.println("</script>"); } else { System.out.println("로그인 성공"); forward = new ActionForward(); forward.setPath("index.jsp"); } |
- 추가
> false 일 경우
- alert 창 띄운 후
- 다시 로그인창으로 이동
> true 일 경우 메인으로 이동함
======== dao 패키지에 MemberDAO.java 만들기
package dao; import java.sql.Connection; public class MemberDAO { private MemberDAO() {} private static MemberDAO instance; public static MemberDAO getInstance() { // Getter 자동생성 if(instance == null) { instance = new MemberDAO(); } return instance; } Connection con; public void setConnection(Connection con) { this.con = con; } } |
- 기본 세팅하기~
< MemberLoginProService.java >
package svc; import static db.jdbcUtil.*; import java.sql.Connection; import dao.MemberDAO; public class MemberLoginProService { public boolean isLoginMember(String id, String passwd) { System.out.println("MemberLoginProService - isLoginMember()"); boolean isMember = false; Connection con = getConnection(); MemberDAO memberDAO = MemberDAO.getInstance(); memberDAO.setConnection(con); close(con); return isMember; } } |
- 기본 세팅
// MemberDAO 클래스의 selectLoginMember() 메서드를 호출하여 로그인 수행 // => 파라미터 : 아이디, 패스워드 리턴타입 boolean isMember = memberDAO.selectLoginMember(id, passwd); |
- 추가하고 selectLoginMember() 메서드 자동완성하기
< MemberDAO.java >
public boolean selectLoginMember(String id, String passwd) { boolean loginResult = false; PreparedStatement pstmt = null; ResultSet rs = null; try { // 아이디와 패스워드가 일치하는 레코드 검색 String sql = "SELECT id FROM member WHERE id=? AND passwd=?"; pstmt = con.prepareStatement(sql); pstmt.setString(1, id); pstmt.setString(1, passwd); rs = pstmt.executeQuery(); if(rs.next()) { loginResult = true; } } catch (SQLException e) { // e.printStackTrace(); System.out.println("MemberDAO - selectLoginMember() 실패! : " + e.getMessage()); } finally { close(pstmt); close(rs); } return loginResult; } |
- 간단하게 하는 방법! (이렇게 만들면 아이디 / 패스워드 중에 뭐가 틀린지는 모르게됨)
// 2. 아이디에 해당하는 패스워드를 검색 // => 조회가 성공했을 경우 존재하는 아이디이므로, 패스워드 판별 가능 // => 조회가 실패했을 경우 존재하지 않는 아이디 |
- 로그인이 되는 상황은 괜찮지만 그 외에는 우리가 원하지 않는 상황!
- throw 를 통해 예외처리!
- 예외처리를 안해줘서 빨간줄! 여기서 예외처리하면 안되기 때문에 바깥으로 예외발생을 던져줄 거!(바깥에서 예외처리를 하기위해) throws!
- 여기 throws 적어줌
- 그럼 오류 사라진다!
******** 근데 이렇게 만들면 Exception 이기 때문에 SQLException 도 예외를 던져버림! 사용자 예외 처리 클래스를 따로 만들어야한다
======== vo 패키지 class 만들기 → LoginException.java
package vo; public class LoginException extends Exception { public LoginException(String message) { super(message); } } |
- Exception 상속받고 생성자 만들기
< MemberDAO.java >
- 다 고쳐주기!
- 그럼 LoginException 만 throws 한다! (SQL이랑 구분됨)
<MemberLoginProService.java>
- throws 해주기
- 그럼 action 이 해야함!
< MemberLoginProAction.java>
package action; import java.io.PrintWriter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import svc.MemberLoginProService; import vo.ActionForward; import vo.LoginException; public class MemberLoginProAction implements Action { @Override public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("MemberLoginProAction"); ActionForward forward = null; // 로그인 처리를 위해 입력받은 아이디, 패스워드 가져오기 String id = request.getParameter("id"); String passwd = request.getParameter("passwd"); // System.out.println("아이디 : " + id + ", 패스워드 : " + passwd); // MemberLoginProService 클래스 인스턴스 생성 후 // 로그인 요청을 위한 isLoginMember() 메서드 호출 // => 파라미터 : 아이디, 패스워드 리턴타입 : boolean(isMember) MemberLoginProService memberLoginProService = new MemberLoginProService(); try { boolean isMember = memberLoginProService.isLoginMember(id, passwd); // LoginException 예외가 발생하지 않으면 로그인 성공 처리 if(isMember) { System.out.println("로그인 성공"); forward = new ActionForward(); forward.setRedirect(true); forward.setPath("./"); } } catch (LoginException e) { // LoginException 예외가 발생하여 전달되면 catch 구문 실행됨 // => 전달받은 예외 객체의 메세지를 자바스크립트로 출력하면 // 로그인 실패에 대한 결과 메세지 출력 구분 가능 e.printStackTrace(); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<script>"); out.println("alert('로그인 실패! - " + e.getMessage() + "')"); out.println("history.back()"); out.println("</script>"); } // isMember 가 false 일 경우 // 자바스크립트를 활용하여 "로그인 실패!" 출력 후 이전페이지로 이동 // 아니면 index.jsp 페이지로 이동 // if(!isMember) { // response.setContentType("text/html;charset=UTF-8"); // PrintWriter out = response.getWriter(); // out.println("<script>"); // out.println("alert('로그인 실패!')"); // out.println("history.back()"); // out.println("</script>"); // } else { // System.out.println("로그인 성공"); // forward = new ActionForward(); // forward.setPath("index.jsp"); // } return forward; } } |
- 고쳐주기
> 서버 재시작 후 로그인해보기
- 없는 아이디 일 경우
- 아이디는 있는데 패스워드 틀리는 경우
- 로그인 될 경우 정상적으로 메인으로 이동!
> 세션
- 리퀘스트에 세션객체가 담겨있다
< MemberLoginProAction.java >
// 세션 객체를 사용하여 로그인에 성공한 아이디를 저장 // => request 객체로부터 HttpSession 객체 가져오기 HttpSession session = request.getSession(); session.setAttribute("id", id); |
- session 에 id 저장해주기
< index.jsp >
- String 형변환 안해서 오류남!
<% String id = null; if(session.getAttribute("id") != null) { id = (String)session.getAttribute("id"); } out.println(id); %> |
- out.println 으로 찍어보기
- admin 으로 로그인했을 때 왼쪽 위에 admin 이 되는 걸 볼 수 있다!
< index.jsp >
<body> <% String id = null; if(session.getAttribute("id") != null) { id = (String)session.getAttribute("id"); } // out.println(id); %> <div style="float: right;"> <!-- 세션에 저장된 ID 가 있을 경우 "로그아웃"(MemberLogout.me) 페이지 링크 --> <!-- 세션에 저장된 ID 가 없을 경우 "로그인"(MemberLoginForm.me) 페이지 링크 --> <% if(id == null) {%> <a href="MemberLoginForm.me">로그인</a>|<a href="MemberJoinForm.me">회원가입</a> <% } else {%> <a href="#"><%=id %></a>님|<a href="MemberLogout.me">로그아웃</a> <% }%> </div> <h1>메인 페이지</h1> <h2><a href="BoardWriteForm.bo">글쓰기 페이지</a></h2> <h2><a href="BoardList.bo">글목록 페이지</a></h2> </body> |
- 추가하기
< MemberFrontController.java >
} else if(command.equals("/MemberLogout.me")) { action = new MemberLogoutAction(); try { forward = action.execute(request, response); } catch (Exception e) { e.printStackTrace(); } } |
- 추가하기
======== action 클래스에 MemberLogoutAction.java 만들기
package action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import vo.ActionForward; public class MemberLogoutAction implements Action { @Override public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("MemberLogoutAction"); ActionForward forward = null; // HttpSession 객체 가져와서 세션 초기화 HttpSession session = request.getSession(); session.invalidate(); // 메인페이지로 포워딩 forward = new ActionForward(); forward.setRedirect(true); forward.setPath("./"); return forward; } } |
- 세션 삭제
** 다음시간 TestCast 시험
developer.android.com
- 클릭해서 동의 후 다운로드받기!
pdf 페이지 19~(책페이지 5p~) 22(8p)
26p~(12p~) 요구사항분석(기능적/비기능적)
< join_form.jsp >
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <title>회원관리 시스템 회원가입 페이지</title> <style> table{ margin : auto; width : 400px; border : 1px solid gray; text-align: center; } .td_title{ font-weight: bold; font-size: x-large; } </style> </head> <body> <form name="joinform" action="MemberJoinPro.me" method="post"> <table border=1> <tr> <td colspan="2" class = "td_title"> 회원가입 페이지 </td> </tr> <tr> <td><label for ="id">아이디 : </label></td> <td><input type="text" name="id" id = "id"/></td> </tr> <tr> <td><label for ="passwd">비밀번호 : </label></td> <td><input type="password" name="passwd" id="passwd"/></td> </tr> <tr> <td><label for ="name">이름 : </label></td> <td><input type="text" name="name" id="name"/></td> </tr> <tr> <td><label for ="age">나이 : </label></td> <td><input type="text" name="age" id="age"/> </td> </tr> <tr> <td><label for ="gender1"></label>성별 : </td> <td> <input type="radio" name="gender" value="남" checked id = "gender1"/>남자 <input type="radio" name="gender" value="여" id = "gender2"/>여자 </td> </tr> <tr> <td><label for ="email">이메일 주소 : </label></td> <td><input type="text" name="email" id ="email"/></td> </tr> <tr> <td colspan="2"> <input type="submit" value="회원가입"> <input type="reset" value="다시작성"> </td> </tr> </table> </form> </body> </html> |
< MemberFrontController.java >
} else if(command.equals("/MemberJoinPro.me")) { action = new MemberJoinProAction(); try { forward = action.execute(request, response); } catch (Exception e) { e.printStackTrace(); } } |
- 추가
======== action 패키지에 MemberJoinProAction.java 만들기
package action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import vo.ActionForward; public class MemberJoinProAction implements Action { @Override public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("MemberJoinProAction"); ActionForward forward = null; return forward; } } |
- 틀만 만들어두기
> 회원가입 페이지에서 회원가입 클릭했을 때
- 콘솔창에 뜨는지 확인하기
< MemberJoinProAction.java>
package action; import java.io.PrintWriter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import svc.MemberJoinProService; import vo.ActionForward; import vo.MemberBean; public class MemberJoinProAction implements Action { @Override public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("MemberJoinProAction"); // System.out.println(request.getParameter("gender")); ActionForward forward = null; // 전달받은 회원가입 정보를 저장할 MemberBean 객체를 생성하여 데이터 저장 MemberBean memberBean = new MemberBean(); memberBean.setName(request.getParameter("name")); memberBean.setId(request.getParameter("id")); memberBean.setPasswd(request.getParameter("passwd")); memberBean.setAge(Integer.parseInt(request.getParameter("age"))); memberBean.setGender(request.getParameter("gender")); memberBean.setEmail(request.getParameter("email")); // MemberJoinProService 클래스의 인스턴스 생성하여 registMember() 메서드 호출 // 파라미터 : MemberBean 리턴타입 : boolean(isJoinSuccess) MemberJoinProService memberJoinProService = new MemberJoinProService(); boolean isJoinSuccess = memberJoinProService.registMember(memberBean); // isJoinSuccess 가 false 이면 자바스크립트를 사용하여 // "회원가입 실패!" 출력 후 이전페이지로 돌아가기 // 아니면, 메인페이지로 이동 if(!isJoinSuccess) { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<script>"); out.println("alert('회원가입 실패!')"); out.println("history.back();"); out.println("</script>"); } else { System.out.println("회원가입 성공"); forward = new ActionForward(); forward.setRedirect(true); forward.setPath("./"); } return forward; } } |
- 완성하기 (registMember() 메서드 자동완성!)
======== svc 패키지에 MemberJoinProService.java 만들기
package svc; import static db.jdbcUtil.*; import java.sql.Connection; import dao.MemberDAO; import vo.MemberBean; public class MemberJoinProService { public boolean registMember(MemberBean memberBean) { System.out.println("MemberJoinProService - registMember()"); boolean isJoinSuccess = false; Connection con = getConnection(); // static import 로 지정된 메서드 호출 MemberDAO memberDAO = MemberDAO.getInstance(); memberDAO.setConnection(con); int insertCount = memberDAO.insertMember(memberBean); if(insertCount > 0) { commit(con); isJoinSuccess = true; } else { rollback(con); } close(con); return isJoinSuccess; } } |
- 완성시키기(insertMember() 메서드 자동완성하기)
< MemberDAO.java >
public int insertMember(MemberBean memberBean) { int insertCount = 0; PreparedStatement pstmt = null; try { String sql = "INSERT INTO member VALUES(?,?,?,?,?,?)"; pstmt = con.prepareStatement(sql); pstmt.setString(1, memberBean.getName()); pstmt.setString(2, memberBean.getId()); pstmt.setString(3, memberBean.getPasswd()); pstmt.setInt(4, memberBean.getAge()); pstmt.setString(5, memberBean.getEmail()); pstmt.setString(6, memberBean.getGender()+""); insertCount = pstmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); System.out.println("MemberDAO - insertMember() 실패! : " + e.getMessage()); } finally { close(pstmt); } return insertCount; } |
- 완성시키기
>>>>>>>> 시험관련
LibreOffice_6.4.4 버전 다운받기(구글에 리브레오피스 쳐서 들어가기)
- 버전 6.4.4을 내려받기 누르면 자동으로 다운받아짐!
> 서버 충돌날 때
- 내가 쓰는 프로젝트 빼고 일단 다 지우기! (같은 서블릿 주소를 가질 경우 충돌남)
< join_form.jsp >
<script type="text/javascript"> // 4 ~ 12 자리 영문, 숫자 조합의 ID 값을 전달받아 유효성 검사 function checkId() { // 정규표현식을 사용하여 검사할 규칙 설정(다음 두 가지 문법 중 하나 택) // var regex = new RegExp("정규표현식문자열"); // 또는 // var regex = 정규 표현식 문자열 // ID 에 대한 정규표현식 설정 // => 첫글자 영문자, 두번째부터 영문자, 숫자 조합 3 ~ 11자리(총합 4 ~ 12자리) var regex = /^[A-Za-z][A-Za-z0-9]{3,11}$/g; // 자바스크립트에서 정규표현식 판별을 위해서는 // 정규표현식문자열.exec(검사데이터) (변수명.실행(검사데이터)) // => 판별 결과가 true 또는 false 로 리턴됨 if(regex.exec(document.joinform.id.value)) { // 유효성 검사 결과가 true 일 경우 alert('사용 가능한 ID'); return true; } else { // 유효성 검사 결과가 false 일 경우 alert('ID 는 4 ~ 12 자리 영문, 숫자 조합 필수!'); return false; } } </script> |
- 스크립트 추가
- 폼액션에 onsubmit=”” 넣기
> 실행했을 때
- 이렇게 alert 창이 떠야함!
// 4 ~ 12 자리 영문 대문자, 소문자, 숫자, 특수문자 조합의 Passwd 값을 전달받아 유효성 검사 function checkPasswd() { var passwd = document.joinform.passwd.value; // 패스워드 체크 // 1. 길이 체크 : 영문, 숫자, 특수문자(!@#$%) 조합 4~12 자리 // 2. 대문자 포함 체크 : // 3. 소문자 포함 체크 : // 4. 숫자 포함 체크 : // 5. 특수문자 포함 체크 : var lengthRegex = /[A-Za-z0-9!@#$%]{4,12}/; var upperCaseRegex = /[A-Z]/; var lowerCaseRegex = /[a-z]/; var digitRegex = /[0-9]/; var specRegex = /[!@#$%]/; // 1 ~ 5번까지의 모든 조건이 만족하면 통과, 아니면 실패 if(lengthRegex.exec(passwd)&&upperCaseRegex.exec(passwd) &&lowerCaseRegex.exec(passwd)&&digitRegex.exec(passwd) &&specRegex.exec(passwd)) { // 유효성 검사 결과가 true 일 경우 alert('사용 가능한 패스워드'); return true; } else { // 유효성 검사 결과가 false 일 경우 alert('pw는 4 ~ 12 자리 영문 대문자, 소문자, 숫자, 특수문자 조합 필수!'); return false; } } |
- 이렇게 alert 창 뜸
### tip
- this 를 넘겨주면 joinform 자체가 넘어감!
// 아이디와 패스워드를 모두 체크하여 정상이면 true 리턴, 아니면 false 리턴 function check() { if(checkId() && checkPasswd()) { return true; } else { return false; } } |
- check() 로 변경
- onkeyup=”” / div 태그 추가
// 4 ~ 12 자리 영문, 숫자 조합의 ID 값을 전달받아 유효성 검사 function checkId(idForm) { var id = idForm.value; // id 가져오기 // ID 입력 항목에 대한 해당 태그 element 가져오기(checkIdResult) var element = document.getElementById('checkIdResult'); // ID 에 대한 정규표현식 설정 // => 첫글자 영문자, 두번째부터 영문자, 숫자 조합 3 ~ 11자리(총합 4 ~ 12자리) var regex = /^[A-Za-z][A-Za-z0-9]{3,11}$/g; // 자바스크립트에서 정규표현식 판별을 위해서는 // 정규표현식문자열.exec(검사데이터) (변수명.실행(검사데이터)) if(regex.exec(id)) { // 유효성 검사 결과가 true 일 경우 element.innerHTML = "사용 가능"; } else { element.innerHTML = "사용 불가"; } } |
- 사용가능 / 사용불가
- 패스워드도 똑같이 onkeyup=”” 과 div 태그 추가
// 4 ~ 12 자리 영문 대문자, 소문자, 숫자, 특수문자 조합의 Passwd 값을 전달받아 유효성 검사 function checkPasswd(passwdForm) { var passwd = passwdForm.value; // 패스워드 가져오기 // Passwd 입력 항목에 대한 해당 태그 element 가져오기(checkPasswdResult) var element = document.getElementById('checkPasswdResult'); // 패스워드 체크 // 1. 길이 체크 : 영문, 숫자, 특수문자(!@#$%) 조합 4~12 자리 // 2. 대문자 포함 체크 : // 3. 소문자 포함 체크 : // 4. 숫자 포함 체크 : // 5. 특수문자 포함 체크 : var lengthRegex = /[A-Za-z0-9!@#$%]{4,12}/; var upperCaseRegex = /[A-Z]/; var lowerCaseRegex = /[a-z]/; var digitRegex = /[0-9]/; var specRegex = /[!@#$%]/; // 1 ~ 5번까지의 모든 조건이 만족하면 통과, 아니면 실패 if(lengthRegex.exec(passwd)&&upperCaseRegex.exec(passwd) &&lowerCaseRegex.exec(passwd)&&digitRegex.exec(passwd) &&specRegex.exec(passwd)) { // 유효성 검사 결과가 true 일 경우 element.innerHTML = "사용 가능"; } else { element.innerHTML = "사용 불가"; } } |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <title>회원가입 페이지</title> <script type="text/javascript"> /* // 4 ~ 12 자리 영문, 숫자 조합의 ID 값을 전달받아 유효성 검사 function checkId() { // 정규표현식을 사용하여 검사할 규칙 설정(다음 두 가지 문법 중 하나 택) // var regex = new RegExp("정규표현식문자열"); // 또는 // var regex = 정규 표현식 문자열 // ID 에 대한 정규표현식 설정 // => 첫글자 영문자, 두번째부터 영문자, 숫자 조합 3 ~ 11자리(총합 4 ~ 12자리) var regex = /^[A-Za-z][A-Za-z0-9]{3,11}$/g; // 자바스크립트에서 정규표현식 판별을 위해서는 // 정규표현식문자열.exec(검사데이터) (변수명.실행(검사데이터)) // => 판별 결과가 true 또는 false 로 리턴됨 if(regex.exec(document.joinform.id.value)) { // 유효성 검사 결과가 true 일 경우 alert('사용 가능한 ID'); return true; } else { // 유효성 검사 결과가 false 일 경우 alert('ID 는 4 ~ 12 자리 영문, 숫자 조합 필수!'); return false; } } // 4 ~ 12 자리 영문 대문자, 소문자, 숫자, 특수문자 조합의 Passwd 값을 전달받아 유효성 검사 function checkPasswd() { var passwd = document.joinform.passwd.value; // 패스워드 체크 // 1. 길이 체크 : 영문, 숫자, 특수문자(!@#$%) 조합 4~12 자리 // 2. 대문자 포함 체크 : // 3. 소문자 포함 체크 : // 4. 숫자 포함 체크 : // 5. 특수문자 포함 체크 : var lengthRegex = /[A-Za-z0-9!@#$%]{4,12}/; var upperCaseRegex = /[A-Z]/; var lowerCaseRegex = /[a-z]/; var digitRegex = /[0-9]/; var specRegex = /[!@#$%]/; // 1 ~ 5번까지의 모든 조건이 만족하면 통과, 아니면 실패 if(lengthRegex.exec(passwd)&&upperCaseRegex.exec(passwd) &&lowerCaseRegex.exec(passwd)&&digitRegex.exec(passwd) &&specRegex.exec(passwd)) { // 유효성 검사 결과가 true 일 경우 alert('사용 가능한 패스워드'); return true; } else { // 유효성 검사 결과가 false 일 경우 alert('pw는 4 ~ 12 자리 영문 대문자, 소문자, 숫자, 특수문자 조합 필수!'); return false; } } // 아이디와 패스워드를 모두 체크하여 정상이면 true 리턴, 아니면 false 리턴 function check() { if(checkId() && checkPasswd()) { return true; } else { return false; } } */ // ================================================================================ // submit 전 최종 상태 체크를 위한 전역변수 설정 var checkIdResult = false; var checkPasswdResult = false; // 4 ~ 12 자리 영문, 숫자 조합의 ID 값을 전달받아 유효성 검사 function checkId(idForm) { var id = idForm.value; // id 가져오기 // ID 입력 항목에 대한 해당 태그 element 가져오기(checkIdResult) var element = document.getElementById('checkIdResult'); // ID 에 대한 정규표현식 설정 // => 첫글자 영문자, 두번째부터 영문자, 숫자 조합 3 ~ 11자리(총합 4 ~ 12자리) var regex = /^[A-Za-z][A-Za-z0-9]{3,11}$/g; // 자바스크립트에서 정규표현식 판별을 위해서는 // 정규표현식문자열.exec(검사데이터) (변수명.실행(검사데이터)) if(regex.exec(id)) { // 유효성 검사 결과가 true 일 경우 element.innerHTML = "사용 가능"; checkIdResult = true; } else { element.innerHTML = "사용 불가"; checkIdResult = false; } } // 4 ~ 12 자리 영문 대문자, 소문자, 숫자, 특수문자 조합의 Passwd 값을 전달받아 유효성 검사 function checkPasswd(passwdForm) { var passwd = passwdForm.value; // 패스워드 가져오기 // Passwd 입력 항목에 대한 해당 태그 element 가져오기(checkPasswdResult) var element = document.getElementById('checkPasswdResult'); // 패스워드 체크 // 1. 길이 체크 : 영문, 숫자, 특수문자(!@#$%) 조합 4~12 자리 // 2. 대문자 포함 체크 : // 3. 소문자 포함 체크 : // 4. 숫자 포함 체크 : // 5. 특수문자 포함 체크 : var lengthRegex = /[A-Za-z0-9!@#$%]{4,12}/; var upperCaseRegex = /[A-Z]/; var lowerCaseRegex = /[a-z]/; var digitRegex = /[0-9]/; var specRegex = /[!@#$%]/; // 1 ~ 5번까지의 모든 조건이 만족하면 통과, 아니면 실패 if(lengthRegex.exec(passwd)&&upperCaseRegex.exec(passwd) &&lowerCaseRegex.exec(passwd)&&digitRegex.exec(passwd) &&specRegex.exec(passwd)) { // 유효성 검사 결과가 true 일 경우 element.innerHTML = "사용 가능"; checkPasswdResult = true; } else { element.innerHTML = "사용 불가"; checkPasswdResult = false; } } // 아이디와 패스워드를 모두 체크하여 정상이면 true 리턴, 아니면 false 리턴 function check() { if(checkIdResult && checkPasswdResult) { return true; } else { alert('아이디 또는 패스워드 규칙 확인 필수!'); return false; } } </script> <style type="text/css"> h1 { text-align: center; } table { border: 1px solid black; width : 400px; margin: auto; text-align: left; } </style> </head> <body> <h1>회원가입</h1> <form action="MemberJoinPro.me" method="post" name="joinForm" onsubmit="return check()"> <table> <tr> <td>아이디</td> <td> <input type="text" name="id" required="required" size="15" placeholder="4-12자리 영문,숫자 조합" onkeyup="checkId(this)"> <div id="checkIdResult"><!-- 자바스크립트에서 메세지 표시할 공간 --></div> </td> </tr> <tr> <td>패스워드</td> <td> <input type="password" name="passwd" required="required" size="15" placeholder="4-12자리 영문,숫자,특수문자 조합" onkeyup="checkPasswd(this)"> <div id="checkPasswdResult"><!-- 자바스크립트에서 메세지 표시할 공간 --></div> </td> </tr> <tr> <td>이름</td> <td><input type="text" name="name" required="required" size="15"></td> </tr> <tr> <td>나이</td> <td><input type="text" name="age" required="required" size="15"></td> </tr> <tr> <td>E-Mail</td> <td><input type="text" name="email" required="required" size="15"></td> </tr> <tr> <td>성별</td> <td> <input type="radio" name="gender" value="남" checked="checked" size="15">남 <input type="radio" name="gender" value="여" size="15">여 </td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" value="회원가입"> <input type="button" value="돌아가기" onclick="history.back()"> </td> </tr> </table> </form> </body> </html> |
-------- MVC2 끝
'Dev.Program > Java & Spring' 카테고리의 다른 글
InetAddress 클래스 (0) | 2022.10.07 |
---|---|
데이터 입출력 : IO(Input/Output) (0) | 2022.10.07 |
MVC2 - (4) (0) | 2022.10.07 |
MVC2 - (3) (0) | 2022.10.07 |
MVC2 - (2) Service 클래스 (0) | 2022.10.07 |