이번장에서는 회원 기능을 작성하도록 할텐데요.
회원기능에 적용해야 할 기능들은 크게 4가지로 나뉘어 집니다.
회원 가입, 로그인, 비밀번호 변경, 회원 탈퇴
게시판의 C R U D 와 다를게 없습니다.
이제 한번해보도록 하겠습니다.
먼저 프로젝트를 실행하면 처음 열리는 home.jsp에 로그인 기능을 하는 코드를 추가합니다.
이는 나중에 변경합니다!
<!-- home.jsp -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<html>
<head>
<title>Home</title>
<script>
var result = '${result}'; // 쌍따음표 말고 따음표로 해야 데이터를 가져옴
if(result === "registerOK") {
alert("회원가입에 성공하였습니다.");
}
</script>
</head>
<a href="/board/listPage">게시판</a><br />
<body>
<form method ="post" autocomplete="off" action="/user/login">
<div>
<label for="identification">아이디</label>
<input type="text" id="identification" name="identification" />
</div>
<div>
<label for="password">비밀번호</label>
<input type="password" id="password" name="password" />
</div>
<div>
<button type="submit">로그인</button>
</div>
</form>
<button type="button" onclick="location.href='/user/register'">회원가입</button>
</body>
</html>
1. USER 테이블 생성
create table user(
identification varchar(50) NOT NULL PRIMARY KEY,
password varchar(3000) not null,
name varchar(50) not null,
create_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
unique(name)
);
테이블을 생성했으니 VO를 작성해야 합니다.
2. UserVO 생성
package kr.co.web.domain;
import java.util.Date;
public class UserVO {
private String identification;
private String password;
private String name;
private Date create_date;
public String getIdentification() {
return identification;
}
public void setIdentification(String identification) {
this.identification = identification;
}
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 Date getCreate_date() {
return create_date;
}
public void setCreate_date(Date create_date) {
this.create_date = create_date;
}
}
3. userMapper.xml 작성
<?xml version="1.0" encoding="UTF-8"?>
<!-- DTD 선언 -->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="userMapper">
<insert id="register">
insert into user(identification, password, name)
values( #{identification}, #{password}, #{name})
</insert>
</mapper>
4. UserDAO 작성
<!-- UserDAO -->
package kr.co.web.persistence;
import kr.co.web.domain.UserVO;
public interface UserDAO {
public void register(UserVO vo) throws Exception;
}
<!-- UserDAOImpl -->
package kr.co.web.persistence;
import javax.inject.Inject;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;
import kr.co.web.domain.UserVO;
@Repository
public class UserDAOImpl implements UserDAO{
@Inject
private SqlSession session;
private static final String NS = "userMapper";
private static final String REGISTER = NS + ".register";
@Override
public void register(UserVO vo) throws Exception {
session.insert(REGISTER, vo);
}
}
5. UserService 작성
<!-- UserService -->
package kr.co.web.service;
import kr.co.web.domain.UserVO;
public interface UserService {
public void register(UserVO vo) throws Exception;
}
<!-- UserServiceImpl -->
package kr.co.web.service;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import kr.co.web.domain.UserVO;
import kr.co.web.persistence.UserDAO;
@Service
public class UserServiceImpl implements UserService {
@Inject
private UserDAO user;
@Override
public void register(UserVO vo) throws Exception {
user.register(vo);
}
}
6. UserController 작성
<!-- UserController -->
package kr.co.web.controller;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import kr.co.web.domain.UserVO;
import kr.co.web.service.UserService;
@Controller
@RequestMapping("/user/*")
public class UserController {
@Inject
private UserService service;
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
@RequestMapping(value = "/register", method = RequestMethod.GET)
public void registerGET() throws Exception {
logger.info("registerGET");
}
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String registerPOST(UserVO vo, RedirectAttributes ra) throws Exception {
logger.info("registerPOST");
service.register(vo);
ra.addFlashAttribute("result", "registerOK");
return "redirect:/";
}
}
/register인 경로가 2개가 있는데요~
자세히 보시면 GET과 POST로 구분이 되는것을 볼 수 있습니다.
예를 들어
회원가입을 할 때 보이는 페이지를 GET 방식
회원가입 페이지에서 입력 폼에 입력을하고 회원가입을 누를 때 동작하는 방식을 POST라고
이해하시면 됩니다.
ra.addFlashAttribute("result", "registerOK");
return "redirect:/";
해당 코드는 사용자가 회원가입을 하고 리다이렉트로 로그인페이지로 넘겨주는데
경고창으로 '회원가입에 성공하였습니다' 라고 알려주기 위해 jsp로 model값을 보내는 것 입니다.
7. register.jsp 작성
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<title>게시판</title>
</head>
<body>
<form method="post" autocomplete="off">
<div>
<label for="identification">아이디</label>
<input type="text" id="identification" name="identification" />
</div>
<div>
<label for="password">비밀번호</label>
<input type="password" id="password" name="password" />
</div>
<div>
<label for="name">이름</label>
<input type="text" id="name" name="name" />
</div>
<div>
<button type="submit">가입</button>
</div>
</form>
<div>
<button onclick ="location.href='/'">처음</button>
</div>
</body>
</html>
지금까지 게시판 프로젝트를 진행하면서 설명을 했지만
기억이 사라지신 분들을 위해 부가설명을 하도록 하겠습니다.
<label> 태그의 for속성이 "identification" 이고
<input> 태그의 id와 name이 "identification" 입니다.
이는 label과 input이 같은것이다~ 라고 알려주는 것이고
여러분들이 무조건 알아야 할 것은 "name" 속성입니다
이 name속성은 DB에 있는 컬럼과 동일하게 작성해야합니다. ( DB == VO == name 속성)
회원 가입 버튼을 클릭합니다.
가입버튼을 누르면 register post 메서드가 실행이 되어
controller -> service -> dao -> mapper -> db
같은 방향으로 흘러가 정상적으로
아이디가 test인 회원이 회원가입을 할 수 있습니다.
회원가입을 했으니 한번 DB를 확인 해볼까요?
정상적으로 회원가입이 되었습니다!
지금은 password가 aaaa라고 출력이되지만
회원기능을 마치고 스프링 시큐리티를 이용해 암호화를 진행 할 예정입니다.
'JAVA > blog' 카테고리의 다른 글
회원(3) - 비밀번호 변경 (0) | 2020.07.31 |
---|---|
회원 (2) - 로그인, 로그아웃 기능 (0) | 2020.07.31 |
댓글 구현(3) - 게시판 댓글 수정, 삭제 (0) | 2020.07.29 |
댓글 구현(2) - 게시판 댓글 작성 (0) | 2020.07.27 |
댓글 구현(1) - 게시판 댓글 목록 구현 (0) | 2020.07.27 |