지금까지 회원가입과 로그인 기능을 구현했는데요

 

이제 사용자의 비밀번호를 변경하는 기능을 구현해보도록 하겠습니다.

 

1. userMapper

 

<?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>
   
   <select id="login" resultType="UserVO">
   		select identification, name, password
   		from user
   		where identification = #{identification} and password = #{password}
   </select>
   
   <update id="modify">
   		update user
   		set password = #{password}
   		where identification = #{identification}
   </update>
    	
</mapper>

 

비밀번호를 변경하는 조건으로 아이디를 사용했습니다.

 

2. UserDAO 작성

 

package kr.co.web.persistence;

import kr.co.web.domain.UserVO;

public interface UserDAO {

	public void register(UserVO vo) throws Exception;
	public UserVO login(UserVO vo) throws Exception;
	public void modify(UserVO vo) throws Exception;
}

 

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";
	private static final String LOGIN = NS + ".login";
	private static final String MODIFY = NS + ".modify";
	
	@Override
	public void register(UserVO vo) throws Exception {
		session.insert(REGISTER, vo);
	}
	
	@Override
	public UserVO login(UserVO vo) throws Exception {
		return session.selectOne(LOGIN, vo);
	}
	
	@Override
	public void modify(UserVO vo) throws Exception {
		session.update(MODIFY, vo);
	}

}

 

 

3. SERVICE 작성

 

package kr.co.web.service;

import kr.co.web.domain.UserVO;

public interface UserService {

	public void register(UserVO vo) throws Exception;
	public UserVO login(UserVO vo) throws Exception;
	public void modify(UserVO vo) throws Exception;
}

 

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);
	}
	
	@Override
	public UserVO login(UserVO vo) throws Exception {
		return user.login(vo);
	}
	
	@Override
	public void modify(UserVO vo) throws Exception {
		user.modify(vo);
	}
	
}

 

 

4. Controller 작성

 

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:/";
	}
	
	@RequestMapping(value = "/login", method = RequestMethod.POST)
	public String loginPOST(UserVO vo, HttpServletRequest req, RedirectAttributes ra) throws Exception {
		logger.info("post login");
		
		// HttpServletRequest를 사용하면 값을 받아 올수 있다.
		HttpSession session = req.getSession();
		
		UserVO login = service.login(vo);
		
		if(login == null) {
			session.setAttribute("user", null);
			ra.addFlashAttribute("result", "loginFalse");
		} else {
			session.setAttribute("user", login);
			String id = req.getParameter("identification"); // 확인용
			ra.addFlashAttribute("result", "loginOK");
		}
		return "redirect:/";
	}
	
	@RequestMapping(value ="/logout", method = RequestMethod.GET)
	public String logout(HttpSession session) throws Exception {
		logger.info("logout");
		session.invalidate();
		return "redirect:/";
	}
	
	@RequestMapping(value ="/modify", method = RequestMethod.GET)
	public void modifyGET() throws Exception {
		logger.info("modifyGET");
	}
	
	@RequestMapping(value ="/modify", method = RequestMethod.POST)
	public String modifyPOST(HttpSession session, UserVO vo, RedirectAttributes ra) throws Exception {
		logger.info("modifyPOST");		
		service.modify(vo);
		session.invalidate();
		ra.addFlashAttribute("result", "updateOK");
		return "redirect:/";
	}
	
}

 

5. modify.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" value="${user.identification}" readonly/>
 	</div>
 	
 	<div>
 		<label for="password">새 비밀번호</label>
 		<input type="password" id="password" name="password" />
 	</div>
 	
 	<div>
 		<button type="submit">회원정보 수정</button>
 	</div>
 	
</form>

	<div>
		<button onclick ="location.href='/'">처음</button>
	</div>
</body>
</html>

 

뭔가 익숙하지 않나요?

회원가입할 때 작성했던 코드와 비슷한데요.

저희는 회원변경을 할것이기 때문에 

아이디부분에 아까 세션 "user"로 보낸것을 

아이디부분에 넣어주고 변경할 수 없도록 readonly를 적어주었습니다.

 

이제 home.jsp로 돌아가서 로그인을 했을 때 회원정보 수정이 있어야 하기에

추가해주도록 합니다.

 

<button type="button" onclick="location.href='/user/modify'">회원정보 수정</button>

 

 

 

비밀번호를 aaas 로 변경하겠습니다.

 

 

 

 

정상적으로 변경되었습니다.

'JAVA > blog' 카테고리의 다른 글

아이디 중복검사 기능  (0) 2020.08.04
회원(4) - 회원탈퇴  (0) 2020.07.31
회원 (2) - 로그인, 로그아웃 기능  (0) 2020.07.31
회원 (1) - 가입 기능  (0) 2020.07.31
댓글 구현(3) - 게시판 댓글 수정, 삭제  (0) 2020.07.29

저번장에서는 회원가입을 하는 기능을 구현하였는데요

이번장에서는 로그인하는 기능을 구현해보도록 하겠습니다.

로그인 기능은 게시물의 상세보기(조회)와 같다고 생각하시면 됩니다.

 

일단 DB 쿼리로 데이터를 알맞게 잘 가져오는지 확인부터 해야겠죠?

테스트로 확인해보겠습니다

 

select identification, name, password
from user
where identification = "test" and password = "aaaa";

 

 

다음과 같이 조회가 되는데요

password를 추가한 이유는 회원탈퇴할 때 사용되기 때문에 추가했습니다.

 

이제 해당 쿼리를 mapper로 작성하겠습니다.

 

1. UserMapper 수정

 

<?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>
   
   <select id="login" resultType="UserVO">
   		select identification, name, password
   		from user
   		where identification = #{identification} and password = #{password}
   </select>
   
</mapper>

 

resultType은 해당쿼리로 조회된 결과를 UserVO로 반환한다는 뜻입니다.

 

2. UserDAO 수정

 

package kr.co.web.persistence;

import kr.co.web.domain.UserVO;

public interface UserDAO {

	public void register(UserVO vo) throws Exception;
	public UserVO login(UserVO vo) throws Exception;

}

 

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";
	private static final String LOGIN = NS + ".login";
	
	@Override
	public void register(UserVO vo) throws Exception {
		session.insert(REGISTER, vo);
	}
	
	@Override
	public UserVO login(UserVO vo) throws Exception {
		return session.selectOne(LOGIN, vo);
	}
	
}

 

3. UserService 수정

 

package kr.co.web.service;

import kr.co.web.domain.UserVO;

public interface UserService {

	public void register(UserVO vo) throws Exception;
	public UserVO login(UserVO vo) throws Exception;

}

 

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);
	}
	
	@Override
	public UserVO login(UserVO vo) throws Exception {
		return user.login(vo);
	}

}

 

4. 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:/";
	}
	
	@RequestMapping(value = "/login", method = RequestMethod.POST)
	public String loginPOST(UserVO vo, HttpServletRequest req, RedirectAttributes ra) throws Exception {
		logger.info("post login");
		
		// HttpServletRequest를 사용하면 값을 받아 올수 있다.
		HttpSession session = req.getSession();
		
		UserVO login = service.login(vo);
		
		if(login == null) {
			session.setAttribute("user", null);
			ra.addFlashAttribute("result", "loginFalse");
		} else {
			session.setAttribute("user", login);
			String id = req.getParameter("identification"); // 확인용
			ra.addFlashAttribute("result", "loginOK");
		}
		return "redirect:/";
	}
	
	
	
}

 

사용자가 로그인창에서 아이디와 패스워드를 입력합니다.

아이디와 패스워드를 입력 후 로그인 버튼을 누르면 

위의 loginPOST 메서드가 실행이 되는데요!

아까 위에서 진행했던 쿼리에서 아이디와 비밀번호로 ID 와 PW, NAME을 조회했죠?

사용자가 아이디와 비밀번호 입력폼에 본인의 아이디와 패스워드를 입력했을 때

UserVO login = service.login(vo);

테스트 id와 password로 설명드리겠습니다.

<!-- test info -->

identification : test
password : aaaa

 

위의 정보는 아이디가 test이고, 비밀번호가 aaaa인데

사용자가 오타로 비밀번호를 ssss라고 작성하면

UserVO login = service.login(vo);   부분에 

test 와 ssss가 들어가겠죠?

하지만 아까 login 쿼리에서

DB에 있는 identification과 password와 일치한것을 조회하는데

DB에 있는 비밀번호는 aaaa니까 조회결과가 나오지 않습니다.

 

그렇기 때문에 login에는 nulll값이 들어가게 됩니다.

if문으로 login이 null이면 세션에 null값을 보내고

null이 아니면 로그인 정보가 맞는거겠죠?

로그인 정보가 일치하면 

session.setAttribute로 login을 "user"에 담아 세션에 보냅니다. (model과 비슷)

 

5. 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 === "loginFalse") {
 		alert("로그인에 실패했습니다.");
 	} else if(result === "updateOK") {
 		alert("회원정보가 변경되었습니다.");
 	} else if(result === "loginOK") {
 		alert("로그인에 성공하였습니다.");
 	} else if(result === "removeOK") {
 		alert("회원 탈퇴를 성공하였습니다.");
 	} else if(result === "registerOK") {
 		alert("회원가입에 성공하였습니다.");
 	}
 	
 	</script>
</head>
<a href="/board/listPage">게시판</a><br />

<body>
	
	<c:if test="${user == null}">
	<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>
	</c:if>
	
	<c:if test="${user == null}">
	<button type="button" onclick="location.href='/user/register'">회원가입</button>
	</c:if>
	
	<c:if test="${user != null}">
	<div>
	<button type="button" onclick="location.href='/user/logout'">로그아웃</button>
	<button type="button" onclick="location.href='/user/modify'">회원정보 수정</button>
	<button type="button" onclick="location.href='/user/remove'">회원탈퇴</button>
	</div>
	</c:if>
	
	<c:if test="${user != null }">
	<div>
		${user.name} 님 환영합니다.
	</div>
	</c:if>
</body>
</html>

 

form을 보시면 action 속성으로 post되는 주소를 정해줬기 때문에 

버튼의 속성을 submit으로 설정해주면 action에 맞는 주소로 이동하게 됩니다.

 

아까 컨트롤러에서 로그인 정보를 "user"로 보냈죠?

 

저희는 로그인을 하고 해당 사용자의 이름을 출력하고 싶은데

로그인을 하지 않으면 이름이 출력되지 않겠죠?

 

그렇기 때문에 c:if 문과 아까 세션값인 "user"을 이용하여 확인 해볼겁니다.

 

user가 null이 아니면 

 

test님 환영합니다.

 

를 보여주고 user가 null이라면 보여지지 않게 하는 코드입니다.

 

 

그리고 로그인에 실패했으면 경고창으로 로그인에 실패했다고 알려주고

성공했다면 성공했다는 알림을 발생하게 하는 기능은

아래 코드를 보시면 이해가 가실겁니다!!

 

<!-- loginPOST 메서드 -->

if(login == null) {
			session.setAttribute("user", null);
			ra.addFlashAttribute("result", "loginFalse");
		} else {
			session.setAttribute("user", login);
			String id = req.getParameter("identification"); // 확인용
			ra.addFlashAttribute("result", "loginOK");
		}
        


<!-- home.jsp -->

var result = '${result}'; // 쌍따음표 말고 따음표로 해야 데이터를 가져옴
 	
 	if(result === "loginFalse") {
 		alert("로그인에 실패했습니다.");
 	} else if(result === "loginOK") {
 		alert("로그인에 성공하였습니다.");
 	} 

 

해당 부분은 어렵지 않기 때문에 이후에 나오는 것들은 생략하겠습니다!!!!

궁금하신 분들은 

https://github.com/jinyeanseok/blog

 

jinyeanseok/blog

blog project. Contribute to jinyeanseok/blog development by creating an account on GitHub.

github.com

 

저의 깃허브 사이트에 가셔서 궁금한점을 찾아보시면 좋을 것 같습니다.

 

 

 

로그아웃 기능 

 

로그아웃 기능은 간단합니다.

로그인을 했을 때 로그아웃 버튼이 있어야 하기에

home.jsp에 다음과 같은 코드를 추가합니다. 

<button type="button" onclick="location.href='/user/logout'">로그아웃</button>

 

이제 UserController에 로그아웃 메서드를 만들겠습니다.

 

<!-- UserController -->

@RequestMapping(value ="/logout", method = RequestMethod.GET)
	public String logout(HttpSession session) throws Exception {
		logger.info("logout");
		session.invalidate();
		return "redirect:/";
	}

 

위 코드는 파라미터에 HttpSession을 이용하여 세션값을 가져옵니다.

 

위에서 로그아웃 버튼을 만들었죠?

 

로그아웃 버튼을 클릭하면 logout 메서드가 실행되어

session.invalidate(); 로 

로그아웃이 되게 하는데요?

사실 invalidate는 세션을 삭제하는것이 아닌 세션을 무효화시키는 것입니다.

 

'JAVA > blog' 카테고리의 다른 글

회원(4) - 회원탈퇴  (0) 2020.07.31
회원(3) - 비밀번호 변경  (0) 2020.07.31
회원 (1) - 가입 기능  (0) 2020.07.31
댓글 구현(3) - 게시판 댓글 수정, 삭제  (0) 2020.07.29
댓글 구현(2) - 게시판 댓글 작성  (0) 2020.07.27

이번장에서는 회원 기능을 작성하도록 할텐데요.

회원기능에 적용해야 할 기능들은 크게 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라고 출력이되지만

회원기능을 마치고 스프링 시큐리티를 이용해 암호화를 진행 할 예정입니다.

+ Recent posts