3층 1구역 - 개발의 장/Spring

Spring - Member관련 모든 코드 (2022-10-17)

상이태상 2022. 10. 17. 23:51

 

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
	<!-- http://localhost:8085/cf/index -->
	<h3>${msg }</h3>
	<a href="index">인덱스</a> |
	<a href="login">로그인</a> |
	<a href="register">회원 가입</a> |
	<a href="list">회원 목록</a>
</body>
</html>

 

list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>List</title>
</head>
<body>
<h2 style="text-align: center;">회원 목록</h2>
<c:choose>
<c:when test="${mebers.isEmpty() }">
	<h3>등록된 데이터가 없지 아니하지 않는 것을 윤허하지 않습니다.</h3>
</c:when>
<c:otherwise>
<table border="1">
	<tr>
		<th>아이디</th>
		<th>비밀번호</th>
		<th>이름</th>
	</tr>
	<c:forEach items="${mebers }" var="member">
	<tr>
		<td>${member.getId() }</td>
		<td>${member.getPw() }</td>
		<td>${member.getName() }</td>
	</tr>
	</c:forEach>
</table>
</c:otherwise>
</c:choose>
<a href="index">인덱스 페이지로 이동</a>
</body>
</html>

 

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>

<c:if test="${not empty msg }">
<script type="text/javascript">alert('${msg}');</script>
</c:if>

</head>
<body>
<h3>${msg }</h3>
<form action="login" method="post">
	<input type="text" name="id" placeholder="아이디" /> <br>
	<input type="password" name="pw" placeholder="비밀번호" /><br>
	<input type="submit" value="로그인" />
	<input type="button" value="취소" onclick="location.href='index'" />
</form>
</body>
</html>

 

register.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Register</title>
<!-- javascript:location.href='index'" >> 이게 원형임. -->
<c:if test="${not empty msg }">
<script type="text/javascript">alert('${msg}');</script>
</c:if>

</head>
<body>
<h3>${msg }</h3>
<form action="register" method="post">
	<input type="text" name="id" placeholder="아이디" /> <br>
	<input type="password" name="pw" placeholder="비밀번호" /><br>
	<input type="text" name="name" placeholder="이름" /> <br>
	<input type="submit" value="회원 가입" />
	<input type="button" value="회원 취소" onclick="javascript:location.href='index'" />
</form>
</body>
</html>

 

 

 

MemberController.java

package com.care.cf.member;

import java.util.ArrayList;

import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;

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.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.care.cf.member.dto.MemberDTO;
import com.care.cf.member.service.MemberService;

@Controller
public class MemberController {
	//http://localhost:8085/cf/index
	
	@RequestMapping("index")
	public void index() {
//		System.out.println("인덱스 다이렉트 어태끄!");
	}
	
	/*
	 * @RequestMapping("index")//메서드를 지정하지 않을 경우 get, post를 다 받음.
	 * public void index() {}
	 * ==============================
	 * @RequestMapping("index")
	 * public void index() {
	 * 	return "index"; // @RequestMapping value의 값이 return값과 동일하면 생략 가능
	 * } 
	 * */
	
	//RequestMapping에 메서드를 지정할 경우
	//코드가 길어지기 때문에 어노테이션을 이용해서 get과 post맵핑을 따로 나눌 수 있다.
	@GetMapping("login") //리퀘스트맵핑만 login이라면 , 
	public void login() {
		System.out.println("로그인 페이지 처리");
	} //클래스의 이름은 아무거나 해도 상관이 없음
	
	@PostMapping("login")
	public String login(String id, String pw, Model model, RedirectAttributes ra) {
		System.out.println("로그인 페이지에서 입력한 데이터를 ");
		System.out.println("받아서 처리");
		System.out.println("아이디 : " + id);
		System.out.println("비밀번호 : " + pw);
		
		/*
		 * return
		 *  - 로그인 성공 : index
		 *  - 로그인 실패 : login
		 *  이걸 받아서 어떻게 줄 건가?(조건문을 이용하자.)*/
		
//		================== 절취선(22.10.17) =======================
		
		if("admin".equals(id) && "1234".equals(pw)) {
			
			model.addAttribute("msg", "로그인 성공");
			return "index"; //Model를 사용하는 경우
//			return "forward:index"; //Model를 사용하는 경우
			
//			ra.addFlashAttribute("msg", "login success"); //redirect는 따로 속성을 만들어야 사용 가능
//			return "redirect:index"; //얘를 해줘야 url이 그 페이지에 맞게끔 바뀐다.
		}
		model.addAttribute("msg", "로그인 실패");
		return "login";
		
		/*
		 * return "index";
		 * viewResolver에게 전달하여 jsp파일을 찾아 실행 후 결과를 클라이언트에게 전달
		 * Model을 사용 가능한 경우
		*/
		
		/* return "redirect:index";
		 * 요청 경로를 클라이언트에게 응답
		 * 요청 경로를 받은 클라이언트가 서버로 재요청함.(url의 갱신을 위해서 사용.)
		 * RedirectAttributes를 써야하는 경우 근데 드물긴 함.
		 */
		
		/* return "forward:index";
		 * 요청 경로를 서버 내부에서 요청함.
		 * 서버 내부에서 Mapping을 찾아 메소드를 실행
		 * Model을 사용 가능한 경우
		 */
//		데이터에 따라 모델을 사용할 건지, 리다이렉트 어트리뷰트를 사용할 건지 선택을 해줘야 한다.
	}
	


	//==========데이터의 출력의 경우의 수==========================
	@RequestMapping(value = "register", method = RequestMethod.GET)
	public String register() {
		System.out.println("회원가입 페이지 처리");
		return "register";
	}
	
//	@RequestMapping(value = "register", method = RequestMethod.POST)

//	public String register(String id, String pw, String name) {
//	System.out.println("아이디 : " + id);
//	System.out.println("비밀번호 : " + pw);
//	System.out.println("이름 : " + name);
//	return "register";
//	}
	//	데이터의 양이 적을 경우 주로 쓰지 않을까???
	
//	public String register
//	(@RequestParam(value = "id")String i, 
//	@RequestParam(value = "pw")String p, 
//	@RequestParam(value = "name")String n) {
//		System.out.println("아이디 : " + i);
//		System.out.println("비밀번호 : " + p);
//		System.out.println("이름 : " + n);
//	return "register";
//	}
		
//	public String register(HttpServletRequest req) {
//	System.out.println("아이디 : " + req.getParameter("id"));
//	System.out.println("비밀번호 : " + req.getParameter("pw"));
//	System.out.println("이름 : " + req.getParameter("name"));
//	return "register";
//	}
	
//	public String register(MemberDTO member) {
//	System.out.println("아이디 : " + member.getId());
//	System.out.println("비밀번호 : " + member.getPw());
//	System.out.println("이름 : " + member.getName());
//	return "register";
//	}
	//데이터의 양이 많을 경우 주로 쓰지 않을까? 근데 보통 이걸 많이 쓸 걸??
	
//	================DAO와 Service의 관계
//	MemberService service = new MemberService();
	@Autowired private MemberService service;
	
	@RequestMapping(value = "register", method = RequestMethod.POST)
	public String register(MemberDTO member, Model model) {
		System.out.println("아이디 : " + member.getId());
		System.out.println("비밀번호 : " + member.getPw());
		System.out.println("이름 : " + member.getName());
		String result = service.register(member);
		if(result.equals("회원 가입 성공")) {
			model.addAttribute("msg", result);
			return "index";
		}
		
		model.addAttribute("msg", result);
		return "register";
	}
	
	@GetMapping("list")
	public void list(Model model) {
		model.addAttribute("mebers", service.list());
	}
}

 

MemberDTO.java

package com.care.cf.member.dto;

public class MemberDTO {
	private String id;
	private String pw;
	private String name;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPw() {
		return pw;
	}
	public void setPw(String pw) {
		this.pw = pw;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

 

MemberDAO.java

package com.care.cf.member.repository;

import java.util.ArrayList;

import org.springframework.stereotype.Repository;

import com.care.cf.member.dto.MemberDTO;

//@Repository는 DAO 클래스를 정의하는 하나의 규약
@Repository
public class MemberDAO {
	private ArrayList<MemberDTO> list;
	 
	public MemberDAO() {
		list = new ArrayList<>();
	}
	
	public void register(MemberDTO member) {
		list.add(member);
	}
	
	public ArrayList<MemberDTO> list() {
		return list;
	}
}

 

MemberService.java

 

package com.care.cf.member.service;

import java.util.ArrayList;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.care.cf.member.dto.MemberDTO;
import com.care.cf.member.repository.MemberDAO;

@Service
public class MemberService {
//	MemberDAO memberDao = new MemberDAO();
	@Autowired private MemberDAO memberDao;
	
	public String register(MemberDTO member) {
		if(member.getId().isEmpty() || member.getPw().isEmpty()) {
			return "필수 정보를 입력하세요.";
		} 
		
		memberDao.register(member);
		return "회원 가입 성공";
	}
	
	public ArrayList<MemberDTO> list() {
		return memberDao.list();
	}
}