MVC2 - (5)

2022. 10. 7. 16:36Dev.Program/Java & Spring

728x90

======== 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="회원가입">&nbsp;&nbsp;
<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">남&nbsp;&nbsp;
<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 끝



728x90

'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