Link Search Menu Expand Document

Application EX Member

Table of contents

  1. 회원 관련 주요 기능
  2. 회원 관련 기능
    1. 데이터베이스 만들기
    2. Dynamic Web Project 생성
    3. Member.dto
    4. 드라이버 로딩
    5. web.xml 초기화 파라미터 지정
    6. server.xml 파일 경로 지정
    7. index.jsp Form
    8. 회원가입 로직

회원 관련 주요 기능

회원제 게시판은 크게 회원 관련 기능과 게시판 기능으로 구성됨

  • 회원 관련 기능

    • 회원 가입

    • 회원 정보 수정하기

      • 로그인/로그아웃

      • 로그인 한 사람만 특정 기능 수행하기

  • 게시판기능


회원 관련 기능

데이터베이스 만들기

  1. mariaDB에 board 데이터베이스 생성

     create database board;
    
  2. board 데이터베이스에 member 테이블 생성

     DROP TABLE IF EXISTS `member_copy1`;
     CREATE TABLE `member_copy1`  (
       `ID` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
       `NAME` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
       `PASSWORD` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
       `REGNUMBER` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
       `MILEAGE` int(10) NULL DEFAULT 0,
       `REGDATE` datetime NOT NULL DEFAULT curdate,
       PRIMARY KEY (`ID`) USING BTREE
     ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
    

Dynamic Web Project 생성

jsp08_member로 생성

라이브러리는 connection pool 라이브러리 3개와, DB커넥터, JSTL을 가져옴(총 5개)

Member.dto

Member 데이터베이스에서 가져올 값들을 저장하거나, 가져오거나, 비교할 객체 생성

Member.java

package com.lec.member.dto;

import java.util.Date;

public class Member {
	
	//Member 데이터베이스에서 가져올 값들을 저장할 변수 필드
	private String id;
	private String password;
	private String name;
	private String regNumber;
	private int mileage;
	private Date regDate;
	
	//생성자
	public Member(String id, String password, String name, String regNumber, int mileage) {
		this.id = id;
		this.password = password;
		this.name = name;
		this.regNumber = regNumber;
		this.mileage = mileage;
	}

	//GETTER, SETTER
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getRegNumber() {
		return regNumber;
	}

	public void setRegNumber(String regNumber) {
		this.regNumber = regNumber;
	}

	public int getMileage() {
		return mileage;
	}

	public void setMileage(int mileage) {
		this.mileage = mileage;
	}

	public Date getRegDate() {
		return regDate;
	}

	public void setRegDate(Date regDate) {
		this.regDate = regDate;
	}

	//toString() 재정의
	@Override
	public String toString() {
		return "Member [id=" + id + ", password=" + password + ", name=" + name + "]";
	}
	
	//동등비교를 할 함수 재정의
	@Override
	public boolean equals(Object obj) {
		if(this == obj) return true;
		if(obj == null) return false;
		if(getClass() != obj.getClass()) return false;	//객체를 비교해서 다르면 다른 객체
	
		Member other = (Member) obj;
	
		if(id == null) {
			if(other.id != null) return false;
		}else if(!id.equals(other.id)) {
			return false;
		}
		
		if(name == null) {
			if(other.name != null) return false;
		}else if(!name.equals(other.name)) {
			return false;
		}
			
		if(password == null) {
			if(other.password != null) return false;
		}else if(!password.equals(other.password)) {
			return false;
		}
		
		if(regNumber == null) {
			if(other.regNumber != null) return false;
		}else if(!regNumber.equals(other.regNumber)) {
			return false;
		}
		
		if(regDate == null) {
			if(other.regDate != null) return false;
		}else if(!regDate.equals(other.regDate)) {
			return false;
		}
		
		if(mileage != other.mileage) {
			return false;
		}
		
		//위 조건을 다 통과해야 true
		return true;
	}
	
	@Override
	public int hashCode() {
		final int seed = 42;
		int result = 1;
		result = seed * result + ((id==null) ? 0 : id.hashCode());
		result = seed * result + ((name==null) ? 0 : name.hashCode());
		result = seed * result + ((password==null) ? 0 : password.hashCode());
		result = seed * result + ((regNumber==null) ? 0 : regNumber.hashCode());
		result = seed * result + ((regDate==null) ? 0 : regDate.hashCode());
		result = seed * result + mileage;
		return result;
	}
}

드라이버 로딩

DB와 연동을 하기 위해서 커넥션 관련 코드를 작성해야 함

DBConnectListener.java

package com.lec.member.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class DBConnectListener implements ServletContextListener{

	public DBConnectListener() {}
	
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		// web.xml의 Context 읽기
		ServletContext context = sce.getServletContext();
		// context의 매개변수 driverClass가져오기 = org.mariadb.jdbc.Driver
		String driverClass= context.getInitParameter("driverClass");		
		// Driver 로딩하는 try/catch문
		try {
			Class.forName(driverClass);
		} catch (ClassNotFoundException e) {
			System.out.println("DB 로딩 실패!");
			e.printStackTrace();
		}
	}
	
	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		ServletContextListener.super.contextDestroyed(sce);
	}
	
}

web.xml 초기화 파라미터 지정

위 서블릿 컨텍스트 리스너를 등록하기 위해 web.xml에 등록해야 함

DBConnectListener는 컨텍스트 초기화 파라미터를 이용해서 커넥션 풀 설정정보를 생성하므로 초기화 파라미터 값을 설정함

web.xml

<listener>
    <listener-class>com.lec.member.listener.DBConnectListener</listener-class>
</listener>

<context-param>
    <param-name>driverClass</param-name>
    <param-value>org.mariadb.jdbc.Driver</param-value>
</context-param>  

<context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mariadb://localhost:3306/board</param-value>
</context-param>

<context-param>
    <param-name>user</param-name>
    <param-value>root</param-value>
</context-param>

<context-param>
    <param-name>pass</param-name>
    <param-value>12345</param-value>
</context-param>

server.xml 파일 경로 지정

서버에 있는 다른 dynamic web project 지우고 jsp08_member만 등록

server.xml 에서 Context docBase=”jsp08_member” path=”/” 로 변경하면 폴더명을 지정하지 않고 바로 index.jsp를 찾음

index.jsp Form

index.jsp

다른 폼으로 들어가는 가장 큰 jsp 폼을 생성

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head> 
</head>
<body>
<h3>회원관리</h3>
    <!--회원가입-->
    <input type="button" value="회원가입" onclick="location.href='/register_form.jsp'"/>
    <!--로그인-->
    <input type="button" value="로그인" onclick="location.href='/login_form.jsp'"/>
    <!--회원조회-->
    <input type="button" value="회원조회" onclick="location.href='/list_member.jsp'"/>
</body>
</html>

회원가입 로직

index에서 회원가입을 누르면 register_form.jsp로 들어옴


이 웹사이트는 jekyll로 제작되었습니다. Patrick Marsceill, Distributed by an MIT license.