Spring/연습코드

20210613 홈페이지 기능만들기 연습(스프링 mvc)

김판다 2021. 6. 13. 23:57

[구성]

MemberController.java

@Controller
public class MemberController {
	@Autowired
	MemberService ms;

	@GetMapping("index")
	public String index() {
		return "member/index";
	}

	@GetMapping("insert")
	public String getInsert() {
		return "member/insert";
	}

	@PostMapping("insert")
	public String postInsert(MemberDTO dto) {
		ms.insert(dto);
		return "member/index";
	}

	@GetMapping("list")
	public String list(Model model) {
		ms.list(model);
		return "member/list";
	}

	@GetMapping("login")
	public String getLogin() {
		return "member/login";
	}

	@PostMapping("login")
	public String postLogin(HttpSession session, MemberDTO dto) {
		ms.login(session, dto);
		return "member/index";
	}

	@GetMapping("logout")
	public String getLogout(HttpSession session) {
		session.invalidate();
		return "member/logout";
	}

	@GetMapping("delete")
	public String getDelete() {
		return "member/delete";
	}

	@PostMapping("delete")
	public String postDelete(HttpSession session, 
			@RequestParam(value = "pw")String pw,
			@RequestParam(value = "confirmPw")String confirmPw) {
		boolean check = ms.delete((String)session.getAttribute("id"), pw, confirmPw);
		if (check) {
			return "redirect:logout";
		} else {
			return "redirect:delete";
		}
	}
	@GetMapping("update")
	public String getUpdate() {
		return "member/update";
	}
	@PostMapping("update")
	public String postUpdate(HttpSession session,
			@RequestParam(value="pw")String pw,
			@RequestParam(value="name")String name) {
		ms.update((String)session.getAttribute("id"),pw, name);
		return "redirect:logout";
	}

}

MemberService.java

@Service
public class MemberService {
	@Autowired MemberDAO dao;
	
	public void insert(MemberDTO dto) {
		dao.insert(dto);
	}

	public void list(Model model) {
		model.addAttribute("list", dao.list());
	}

	public void login(HttpSession session, MemberDTO dto) {
		MemberDTO memberdto = dao.login(dto);
		if(memberdto != null) {
			session.setAttribute("id", memberdto.getId());
			session.setAttribute("pw", memberdto.getPw());
			session.setAttribute("name", memberdto.getName());
		}
		
	}

	public boolean delete(String id, String pw, String confirmPw) {
		if(pw != null && pw.equals(confirmPw)) {
			return dao.delete(id,pw);
		}
		return false;
	}

	public void update(String id, String pw, String name) {
		dao.update(id, pw, name);		
	}
}

MemberDAO.java

@Repository
public class MemberDAO {
	private ArrayList<MemberDTO> list;
	
	public MemberDAO() {
		list = new ArrayList<MemberDTO>();
	}
	public void insert(MemberDTO dto) {
		list.add(dto);		
	}
	public ArrayList<MemberDTO> list() {
		return list;		
	}
	public MemberDTO selectId(String id) {
		for(MemberDTO tmp: list) {
			if(tmp.getId().equals(id)) {
				return tmp;
			}
		}return null;
	}
	public MemberDTO login(MemberDTO dto) {
		MemberDTO memberdto = selectId(dto.getId());
		if(memberdto != null && memberdto.getPw().equals(dto.getPw())) {
			return memberdto;
		}
		return null;
	}
	public boolean delete(String id, String pw) {
		MemberDTO dto = selectId(id);
		if(dto.getPw().equals(pw)) {
			return list.remove(dto);
		}
		return false;
	}
	public void update(String id, String pw, String name) {
		MemberDTO dto = selectId(id);
		int index = list.indexOf(dto);
		dto.setPw(pw);
		dto.setName(name);
		list.set(index,dto);
	}

}

MemberDTO.java

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

View

lndex.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>
	<h2>20210613 연습</h2>
	<a href="login">로그인</a>
	<a href="logout">로그아웃</a>
	<a href="insert">회원가입</a>
	<a href="list">회원목록</a>
	<a href="update">회원수정</a>
	<a href="delete">회원탈퇴</a>
</body>
</html>

list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>list</title>
</head>
<body>
	<h2>회원목록</h2>
	<table border="1">
		<tr>
			<th>아이디</th>
			<th>패스워드</th>
			<th>이름</th>
		</tr>
		<c:choose>
			<c:when test="${list.size() != 0}">
				<c:forEach var="member" items="${list}">
					<tr>
						<td>${member.id }</td>
						<td>${member.pw }</td>
						<td>${member.name }</td>
					</tr>
				</c:forEach>
			</c:when>
			<c:otherwise>
				<tr><td colspan="3">데이터 없음</td></tr>
			</c:otherwise>
		</c:choose>
		<tr><td colspan="3"><a href="index">메인 페이지로 이동</a></td></tr>
	</table>
	
</body>
</html>
jstl 조건문 <c:if>
test : 조건
var: 결과를 저장할 변수
scope: 범위

<c:choose> <c:when> <c:otherwise>
자바로 치자면 when은 if, otherwise는 else if 라는 느낌이다.


설명 참조: https://intel199.tistory.com/35

insert.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>insert</title>
</head>
<body>
	<h2>회원가입 </h2>
	<form action="insert" method="post">
	<input type="text" name = "id" placeholder="id"><br>
	<input type="password" name = "pw" placeholder="password"><br>
	<input type="text" name = "name" placeholder="name"><br>
	<input type="submit" value = "확인">
	<input type="button"value="취소" onclick="javascript:location.href='index';">
	</form>
</body>
</html>

delete.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>delete</title>
</head>
<body>
<c:choose>
	<c:when test="${empty id }">
		<script>
			alert('로그인 후 이용해주세요')
			location.href="login";
		</script>
	</c:when>
</c:choose>
	<h2>회원 탈퇴</h2>
	<form action="delete" method="post">
		아이디:${id }<br> 비밀번호: <input type="password" name="pw"
			placeholder="password"><br> 비밀번호 확인: <input
			type="password" name="confirmPw" placeholder="confirmPw"><br>
		<input type="submit" value="확인"> <input type="button"
			value="취소" onclick="javascript:location.href='index';">
	</form>
</body>
</html>

login.jsp

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

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 페이지</title>
</head>
<body>
	<h2>로그인</h2>
	<c:choose>
		<c:when test="${empty id }">
			<form action="login" method="post">
				<input type="text" name="id" placeholder="id"><br> <input
					type="passwd" name=pw " placeholder="password"><br> <input
					type="submit" value="로그인"> <input type="button" value="취소"
					onclick="javascript:location.href='index';">
			</form>
		</c:when>
		<c:otherwise>
			${id }님은 로그인 되었습니다.<br>
			<a href="index">메인 페이지로 이동하기</a>
		</c:otherwise>
	</c:choose>
</body>
</html>

logout.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<script>
	alert('로그아웃');
	location.href="index";
</script>

update.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>update</title>
</head>
<body>
<c:choose>
	<c:when test="${empty id }">
		<script>
			alert('로그인 후 이용해주세요')
			location.href="login";
		</script>
	</c:when>
</c:choose>
	<h2>회원 탈퇴</h2>
	<form action="update" method="post">
		아이디:${id }<br> 
		비밀번호: <input type="password" name="pw" placeholder="password"><br> 
		이름: <input type="test" name="name" placeholder="name"><br>
		<input type="submit" value="확인"> 
		<input type="button"value="취소" onclick="javascript:location.href='index';">
	</form>
</body>
</html>

후기

알고있는 방법이여도 또 다시 할때마다 아직 버퍼링이 걸린다.

익숙하지만 몇번 더 스스로 만들어보고 내것으로 만드는 과정이 필요하다.

앞으로 이렇게 연습해볼것이다.