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();
}
}