DeseoDeSeo
[Spring] 회원 가입 기능 마무리 및 로그인 기능 본문
⛧ MySQL.sal연결 하려면 console 옆의 Data Source Explorer > Database connections > com > 파란 원통 모양의 com 클릭
Membercontroller.java
○ 회원가입 시, 프로필은 일단 빈칸으로 넣어둔다.
○ 새로 배운 것: 유효성 검사!
@RequestMapping("/join.do")
public String join(Member m, RedirectAttributes rttr, HttpSession session) {
System.out.println("회원가입 기능요청");
//유효성 검사
if(m.getMemID() ==null || m.getMemID().equals("")|| m.getMemPassword()==null || m.getMemPassword().equals("")||
m.getMemName()==null || m.getMemName().equals("")|| m.getMemAge() ==0 || m.getMemEmail() == null ||
m.getMemEmail().equals("")) {
//회원 가입을 할 수 없다 하나라도 누락되어 있기 때문에
//실패시 joinForm.do로 msgType과 msg내용을 보내야함.
rttr.addFlashAttribute("msgType", "실패메세지");
rttr.addFlashAttribute("msg", "모든 내용을 입력하세요.");
return "redirect:/joinForm.do";
//redirect방식에서는 model에 데이터 저장 불가.
//forward방식에서만 model에 데이터저장 가능.
//RedirectAttributes - 리다이렉트 방식으로 이동할 때 보낼 데이터를 저장하는 객체
}else {
//회원 가입 가능
//null값 대신 넣으려구.
m.setMemProfile("");
int cnt = mapper.join(m);
//회원가입 후 index.jsp로 이동시키시오.
if(cnt==1) {
System.out.println("회원가입 성공");
rttr.addFlashAttribute("msgType", "성공메세지");
rttr.addFlashAttribute("msg", "회원가입에 성공했습니다.");
//회원가입 성공 시 로그인 처리까지 시키기
session.setAttribute("mvo", m);
//mvo라는 이름으로 m을 넣겠다.
//성공시 main으로 이동함,
return "redirect:/";
}else {
System.out.println("회원가입 실패.");
rttr.addFlashAttribute("msgType", "실패메세지");
rttr.addFlashAttribute("msg", "회원가입에 실패했습니다.");
return "redirect:/joinForm.do" ;
}
}
}
@RequestMapping("/logout.do")
public String logout(HttpSession session) {
//session을 사용하고 싶으면 매개변수에 적으면 된다.
session.invalidate();
//로그아웃 기능
return "redirect:/";
}
@RequestMapping("/loginForm.do")
public String loginForm() {
return "member/loginForm";
}
@RequestMapping("/Login.do")
public String login(RedirectAttributes rttr, Member m, HttpSession session) {
//문제
// mapper에 login이라는 메소드 이름으로 로그인 기능을 수행하시오.
// 로그인 성공 시 -> index.jsp 이동 후, 로그인에 성공했습니다 modal창 띄우기
// 로그인 실패 시 -> login.jsp 이동 후, 로그인에 실패했습니다 modal 창 띄우기
Member mvo =mapper.login(m);
//mvo는 실패하면 null이 들어감.
//mvo가 실패하지 않는다면
if(mvo != null ) {
rttr.addFlashAttribute("msgType", "성공메세지");
rttr.addFlashAttribute("msg", "로그인에 성공했습니다.");
session.setAttribute("mvo", mvo);
return "redirect:/";
}else {
rttr.addFlashAttribute("msgType", "실패메세지");
rttr.addFlashAttribute("msg", "로그인에 실패했습니다.");
return "redirect:/loginForm.do";
}
}
joinForm.jsp
<!-- Modal, 회원 가입 실패시 출력 됨. -->
<div class="modal fade" id="myMessage" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div id="messageType" class="modal-content">
<div class="modal-header panel-heading">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">${msgType}</h4>
</div>
<div class="modal-body">
<p id="">${msg}</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<script type="text/javascript">
function registerCheck(){
var memID = $("#memID").val();
$.ajax({
url:"${contextPath}/registerCheck.do",
type:"get",
data:{"memID":memID},
success:function(data){
// 중복여부 확인( data:1 -> 사용 가능, data:0 -> 사용 불가능)
if(data==1){
$("#checkMessage").text("사용할 수 있는 아이디 입니다.");
$("#checkType").attr("class","modal-content panel-success");
}else{
$("#checkMessage").text("사용할 수 없는 아이디 입니다.");
$("#checkType").attr("class","modal-content panel-warning");
}
$("#myModal").modal("show");
},
error: function(){
alert("error");
}
});
}
function passwordCheck(){
var memPassword1 = $("#memPassword1").val();
var memPassword2 = $("#memPassword2").val();
if(memPassword1 != memPassword2){
$("#passMessage").html("비밀번호가 서로 일치하지 않습니다.");
} else{
/* pw1과 pw2의 값이 같을 때만 pw가 넘어감. */
$("#memPassword").val(memPassword1);
$("#passMessage").html(" ");
}
}
//html을 다 로딩할때 까지 기다리겠다.
$(document).ready(function(){
if(${not empty msgType}){
if(${msgType eq "실패메세지"}){
$("#messageType").attr("class","modal-content panel-warning");
}
$("#myMessage").modal("show");
}
});
</script>
MemberMapper.java
package kr.spring.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import kr.spring.entity.Board;
import kr.spring.entity.Member;
@Mapper // MyBatis가 interFace를 찾기 위해 달아주는 부분.
public interface MemberMapper {
//sql session factory가 이걸 이용해서 사용함.
public Member registerCheck(String memID);
public int join(Member m);
public int login(String memID, String memPassword);
public Member login(Member m);
}
MemberMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.spring.mapper.MemberMapper">
<!-- membermapper.java가 찾아오려면 namespace이름이랑 같아야한다. -->
<select id="registerCheck" parameterType="String" resultType="kr.spring.entity.Member">
SELECT * FROM MEMBER WHERE MEMID = #{memID}
</select>
<insert id ="join" parameterType="kr.spring.entity.Member">
INSERT INTO MEMBER(MEMID, MEMPASSWORD,MEMNAME,MEMAGE,MEMGENDER,MEMEMAIL,MEMPROFILE) VALUES(#{memID},#{memPassword},#{memName},#{memAge},#{memGender},#{memEmail},#{memProfile})
</insert>
<select id ="login" parameterType ="kr.spring.entity.Member" resultType="kr.spring.entity.Member" >
SElECT * FROM MEMBER WHERE MEMID=#{memID} AND MEMPASSWORD =#{memPassword}
</select>
</mapper>
header.jsp
<!-- mvo가 비어있을 때만 보여줌.-->
<c:if test="${empty mvo}">
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a class ="dropdown-toggle" data-toggle="dropdown" href="#">접속하기 <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="${contextPath}/loginForm.do"> 로그인 </a></li>
<li><a href="${contextPath}/joinForm.do"> 회원가입 </a></li>
</ul>
</li>
</ul>
</c:if>
<c:if test="${not empty mvo}">
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a class ="dropdown-toggle" data-toggle="dropdown" href="#">접속하기 <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#"> 회원정보수정 </a></li>
<li><a href="#"> 프로필 사진 등록 </a></li>
<li><a href="${contextPath}/logout.do"> 로그아웃 </a></li>
</ul>
</li>
</ul>
</c:if>
index.jsp
<!-- Modal, 회원 가입 실패시 출력 됨. -->
<div class="modal fade" id="myMessage" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div id="messageType" class="modal-content">
<div class="modal-header panel-heading">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">${msgType}</h4>
</div>
<div class="modal-body">
<p id="">${msg}</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){
if(${not empty msgType}){
if(${msgType eq "성공메세지"}){
$("#messageType").attr("class","modal-content panel-warning");
}
$("#myMessage").modal("show");
}
});
</script>
</body>
loginForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix ="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix ="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<c:set var="contextPath" value ="${pageContext.request.contextPath}" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<jsp:include page="../common/header.jsp"></jsp:include>
<h2>Spring MVC03</h2>
<div class="panel panel-default">
<div class="panel-heading">Board</div>
<div class="panel-body">
<form action="${contextPath}/Login.do" method="post">
<table style ="text-align:center; border: 1px solid #dddddd " class="table table-borded">
<tr>
<td style="width:110px; vertical-align:middle;">아이디</td>
<td><input type="text" name ="memID" id="memID" class="form-control" maxlength="20" placeholder="아이디를 입력하세요."></td>
</tr>
<tr>
<td style="width:110px; vertical-align:middle;">비밀번호</td>
<td><input type="password" name ="memPassword" id="memPassword" class="form-control" maxlength="20" placeholder="비밀번호를 입력하세요."></td>
</tr>
<tr>
<td colspan ="2">
<span id="passMessage" style="color:red;"></span>
<input type="submit" class="btn btn-primary btn-sm pull-right" value="로그인">
<input type="reset" class="btn btn-warning btn-sm pull-right" value="취소">
</td>
</tr>
</table>
</form>
</div>
<div class="panel-footer">스프링게시판-뇽뇽이</div>
</div>
</div>
<!-- Modal, 아이디 중복체크용 모달 -->
<div class="modal fade" id="myModal" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div id="checkType" class="modal-content">
<div class="modal-header panel-heading">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title"> 메세지 확인 </h4>
</div>
<div class="modal-body">
<p id="checkMessage"> </p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<!-- Modal, 회원 가입 실패시 출력 됨. -->
<div class="modal fade" id="myMessage" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div id="messageType" class="modal-content">
<div class="modal-header panel-heading">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">${msgType}</h4>
</div>
<div class="modal-body">
<p id="">${msg}</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<script type="text/javascript">
//html을 다 로딩할때 까지 기다리겠다.
$(document).ready(function(){
if(${not empty msgType}){
if(${msgType eq "실패메세지"}){
$("#messageType").attr("class","modal-content panel-warning");
}
$("#myMessage").modal("show");
}
});
</script>
</body>
</html>
➤ RedirectAttributes?
: 리디렉션을 수행할 때 한 컨트롤러 메서드에서 다른 컨트롤러 메서드로 Attributes를 전달하는데 이용되는 스프링 프레임워크의 인터페이스이다.
'spring' 카테고리의 다른 글
[Spring] 파일 업로드 및 프로필 사진 출력하기 (0) | 2023.09.20 |
---|---|
[Spring] 회원정보 수정 및 메인 페이지에 탭 추가 (2) | 2023.09.19 |
[Spring] SpringMVC03_회원가입 폼, 아이디 중복 여부, 비밀번호 일치여부 (0) | 2023.09.15 |
[Spring] springMVC03 실습 (0) | 2023.09.15 |
[Spring] SpringMVC02_비동기방식_BoardRestController생성 (0) | 2023.09.14 |