jnk1m
Foliage IT
jnk1m
전체 방문자
오늘
어제
  • 분류 전체보기 (209)
    • Today I Learned (34)
    • Java (47)
    • Database (15)
    • [NHN Academy] (27)
    • Spring (47)
    • HTML + CSS + JavaScript (11)
    • JSP (3)
    • Node.js (10)
    • React Native (2)
    • 기타 (8)
    • 스크랩 (5)

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
글쓰기 / 관리자
jnk1m

Foliage IT

Spring

[Spring] Day07 (Code)

2022. 3. 24. 21:56

1. memberController

package com.member.controller;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import com.member.domain.MemberVO;
import com.member.service.MemberService;

@Controller
@RequestMapping("/member/")
public class memberController {
	@Autowired
	private MemberService memberService;
	
	
	//회원가입 폼
	@GetMapping("signup")
	public void signup() {
		System.out.println("signup 폼 요청!");
	}
	
	//회원가입 처리
	@PostMapping("signup")
	public String signupPro(@ModelAttribute("member") MemberVO member, Model model) { //model 통해서 자료 넘겨주기
		System.out.println("signup 처리 요청!");
		
		//넘어온 MemberVO의 회원정보 DB 저장 -> 서비스야 회원가입처리 진행해~(위에 서비스 주입받음)
		int result =memberService.addMember(member); //위에 멤버VO 던질테니 처리해~ 처리결과 1이 넘어옴
		//처리 결과 화면까지 보내줘
		model.addAttribute("result", result); //signPro.jsp까지 모델을 들고가라 
		return "member/signupPro";
	}
	
	//메인페이지
	@GetMapping("main")
	public void main() {
		System.out.println("main 요청");
		
	}
	
	//로그인 폼
	@GetMapping("login")
	public void login() {
		System.out.println("로그인 폼 요청!");
	}
	
	//로그인 처리
	@PostMapping("login")
	/*
	//#1.세션 꺼내기 방법
	  컨트롤러에서 매개변수로 받아, 서비스에 전달해주기.
		public String loginPro(MemberVO member,Model model,HttpSession session) { //session 얻어오기. 
			System.out.println("로그인 처리 요청!");
			
			//서비스야 로그인 처리 해
			int result = memberService.idPwCheck(member,session); //멤버 던져줄테니 아이디랑 비번 체크해~
			//loginPro jsp페이지에 결과 전달
			model.addAttribute("result", result);
			return "member/loginPro";
		}*/

	//#2. 세션 바로 꺼내기
	public String loginPro(MemberVO member,Model model) { //session 얻어오기. 
		System.out.println("로그인 처리 요청!");		int result = memberService.idPwCheck(member);
		model.addAttribute("result", result);
		return "member/loginPro";
	}
	
	@GetMapping("logout")
	public String logout(HttpSession session) {
		//서비스 구현은 생략
		//session.invalidate(); //session에 들어있는 속성 모두 삭제
		session.removeAttribute("memId"); //memId 속성만 삭제
		return "redirect:/member/main"; //메인으로 바로 이동
	}
	
}

 

2. MemberService (Interface)

package com.member.service;

import javax.servlet.http.HttpSession;

import com.member.domain.MemberVO;

//서비스 인터페이스: 비즈니스 로직 처리
public interface MemberService {
	
	//회원 추가(가입처리)
	public int addMember(MemberVO member);//레코드가 추가 됐으면 1, 아니면 0 리턴. 분기 처리해주기 위해 인트로 받음
	
	//로그인 처리
	//#1.세션꺼내기 public int idPwCheck(MemberVO member,HttpSession session);
	//#2. 세션 바로 꺼내기
	public int idPwCheck(MemberVO member);
}

 

3. MemberServiceImpl

package com.member.service;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import com.member.domain.MemberVO;
import com.member.mapper.MemberMapper;

//서비스 구현 클래스: 기능 구현

@Service
public class MemberServiceImpl implements MemberService{
	
	@Autowired
	private MemberMapper memberMapper;

	//회원 추가(가입 처리) 구현
	@Override
	public int addMember(MemberVO member) {
		
		//DB 접근해서 추가
		int result = memberMapper.addMember(member);
		return result; //실행하고 난 결과를 result에 담아서 리턴. 1이 리턴됨.
	}

	//로그인 처리
	@Override
	/* 
	#1. 세션 컨트롤러에서 받아 꺼내는 방법 
	public int idPwCheck(MemberVO member, HttpSession session) {
		int result = memberMapper.idPwCheck(member);
		
		//result 결과를 확인하고 1= 로그인 = session에 속성을 추가
		// 0 = 로그인 실패. 끝. 
		if(result==1) {
			//session에 memID라는 이름으로 사용자 id 추가 -> 로그인 확인 용으로 사용할 것임. 
			session.setAttribute("memID", member.getId()); //사용자의 값이 어떻게 되던 이름은 다 memID
		}
		return result; //값을 리턴해서 이제 컨트롤러로 가져가야 함. 
	}
	 */
	
	//#2. 세션 바로 꺼내는 방법 
	public int idPwCheck(MemberVO member) {
		int result = memberMapper.idPwCheck(member);
		//두줄로 풀어쓰기
//		ServletRequestAttributes sra=(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
//		HttpServletRequest request = sra.getRequest(); //request 객체 (요청 관련 정보 담은 거)
	
		//한줄로 줄이기
		HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();//request 객체 (요청 관련 정보 담은 거)
		HttpSession session= request.getSession();

		if(result==1) {
			session.setAttribute("memId", member.getId()); }
		return result;
	}


}

 

4. MemberMapper (Interface)

package com.member.mapper;

import com.member.domain.MemberVO;

//회원 가입 mapper
public interface MemberMapper {

	//회원 추가
	public int addMember(MemberVO member);//결과 들어왔는지 int로 리턴

	//로그인 처리 (id, pw 확인)
	public int idPwCheck(MemberVO member);
}

 

5. 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="com.member.mapper.MemberMapper"> 
  
  <!-- 회원 추가 -->
 <insert id="addMember">
 	insert into springMember values(#{id},#{pw},#{name},#{email},#{gender},#{age},sysdate)
 </insert>
  
  
  <!-- 로그인 처리 카운트해서 받은 결과1이면 로그인 성공, 0이면 실패-->
  <select id="idPwCheck" resultType="int">
  	select count(*) from springMember where id=#{id} and pw=#{pw}
  </select>
  
  </mapper>

 

 

MemberVO

package com.member.domain;

import java.sql.Timestamp;

import lombok.Data;

@Data
public class MemberVO {

	private String id;
	private String pw;
	private String name;
	private String email;
	private String gender;
	private Integer age;
	private Timestamp reg;
}

 

 

테이블 생성 SQL문

create table springMember(
    id varchar2(50) primary key,
    pw varchar2(50) not null,
    name varchar2(20) not null,
    email varchar2(100),
    gender varchar2(20),
    age number default 1,
    reg date default sysdate
);

desc springMember;
select * from springMember;

 

6.  login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>login</title>
<link href="/resources/css/style.css" rel="stylesheet" type="text/css"> 
</head>
<body>
	<br/>
	<h1 align="center"> 로그인</h1>
	<form action="/member/login" method="POST">
		<table>
			<tr>
				<td>아이디</td>
				<td><input type="text" name="id"></td>
			</tr>
			<tr>
				<td>비밀번호</td>
				<td><input type="password" name="pw"></td>
			</tr>
			<tr>
				<td colspan="2">
					<input type="submit"value="로그인"/>
					<input type="button" value="회원가입" onclick="window.location='/member/signup/'"/>
					<input type="button" value="메인" onclick="window.location='/member/main/'"/>
					</td>
			</tr>
		</table>
	</form>
</body>
</html>

 

7. loginPro.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>login Pro</title>
<link href="/resources/css/style.css" rel="stylesheet" type="text/css"> 
</head>
<body>
<br/>
	<h2 align="center">loginPro Page</h2>
	<h3>memID ${sessionScope.memId}</h3>
	<c:if test="${sessionScope.memId != null}">
		<script>
			alert("로그인 성공")
			window.location.href="/member/main";
		</script>
	</c:if>
	<c:if test="${sessionScope.memId == null}">
		<script>
			alert("로그인 실패... 다시 시도해주세요")
			history.go(-1);
		</script>
	</c:if>
	<!-- 
	<c:if test="${result==1 }">
		<script>
			alert("로그인 성공!");
			window.location.href="/member/main";
		</script>
	</c:if>
	<c:if test="${result==0 }">
		<script>
			alert("로그인 실패... 다시 시도해주세요")
			history.go(-1);
		</script>
	</c:if>
	 -->
	
</body>
</html>

 

8. main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Main</title>
<link href="/resources/css/style.css" rel="stylesheet" type="text/css"> 

</head>
<body>
	<br/>
	<h1 align="center">메인 페이지</h1>
	
	<%--로그아웃 상태 --%>
	<c:if test="${sessionScope.memId == null }">
	<table>
		<tr>
			<td>
				로그인을 원하시면 버튼을 누르세요. <br/>
				<button onclick="window.location='/member/login'">로그인</button>
			</td>
		</tr>
		<tr>
			<td>
				<a href="/member/signup">회원가입</a>
			</td>
		</tr>
	</table>
	</c:if>
	
	<%--로그인 상태 --%>
	<c:if test="${sessionScope.memId != null }">
	<table>
		<tr>
			<td>
				<button onclick="window.location='/member/mypage'">마이 페이지</button>
			</td>
		</tr>
		<tr>
			<td>
				<button onclick="window.location='/member/logout'">로그아웃</button>
			</td>
		</tr>
	</table>
	</c:if>
	
	<br/><br/><br/><br/>
	<div align="center">
		<img src="/resources/imgs/profileImage.png" width="400px"/>
	</div>

</body>
</html>

 

9. signup.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>회원 가입</title>
	<link href="/resources/css/style.css" rel="stylesheet" type="text/css"> 
	<!-- servlet보면 resources매핑이 되어 있음. 주소가 /리소시스/로 이어지는 파일들은 이미 저 안에서 찾겠다고 매핑이 되어있기에 resources로 주소 시작 
	이미지, js 파일은 WEB-INF 폴더에 들어가 있으면 절대!! 안됨!! 주소 요청을 못함 무조건 리소스 폴더 안에 넣기-->
</head>
<body>
	<h1 align="center">회원 가입</h1>
	<form action="/member/signup" method="POST">
	<!-- 같은 주소로 get/ post 나뉘어서 쓸 수 있음.  -->
		<table>
			<tr>
				<td>아이디 *</td>
				<td><input type="text" name="id"/></td>
			</tr>
			<tr>
				<td>비밀번호 *</td>
				<td><input type="password" name="pw"/></td>
			</tr>
			<tr>
				<td>비밀번호 확인*</td>
				<td><input type="password" name="pwch"/></td>
			</tr>
			<tr>
				<td>이름*</td>
				<td><input type="text" name="name"/></td>
			</tr>
			<tr>
				<td>이메일</td>
				<td><input type="text" name="email"/></td>
			</tr>
			<tr>
				<td>성별</td>
				<td>
					<input type="radio" name="gender" value="female" checked/>여자
					<input type="radio" name="gender" value="male"/>남자
				</td>
			</tr>
			<tr>
				<td>연령대</td>
				<td><input type="text" name="age"/></td>
			</tr>
			<tr>
				<td colspan="2">
					<input type="submit" value="가입"/>
					<input type="reset" value="reset"/>
					<input type="button" value="취소" onclick="window.location='/member/main'"/>
				</td>
			</tr>
		</table>
	</form>
</body>
</html>

 

10. signupPro.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>signupPro</title>
</head>
<body>
	<h2>signup Pro</h2>
	
	<c:if test="${result==1}">
		<h2>회원 가입 성공 ${member.id}님 환영합니다.</h2>
		<button onclick="window.location='/member/main'">메인으로</button>
		<!-- 3초 후 메인으로 이동 -->
		<meta http-equiv="refresh" content="3;url=http://localhost:8080/member/main">
	</c:if>
	
	<c:if test="${result==0}">
		<h2>회원 가입 실패... 다시 시도해주세요.</h2>
		<button onclick="window.location='/member/main'">메인으로</button>
		<button onclick="window.location='/member/signup'">회원가입</button>
	</c:if>
	
	
	
</body>
</html>
    'Spring' 카테고리의 다른 글
    • [Spring] Day08 (Code): 마이페이지, 회원정보 수정 및 삭제
    • [Spring] Day08 (Note): 쿠키
    • [Spring] Day07_2 (Note+Code): MyBatis까지 완료한 최종 파일 생성법 정리!
    • [Spring] Day07_1 (Note): 회원 가입 만들기, 세션

    티스토리툴바