본문 바로가기

IT&코딩/Spring

Spring - 6일차 (mvc_quiz)

728x90
반응형

■  springController

 

□ com.quiz.mvc - HomeController.java (홈컨트롤러)

 

package com.quiz.mvc;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;


@Controller
public class HomeController {
	
	@RequestMapping("/")
	public String home() {
		return "member/index";
	}
	
	@RequestMapping("header")
	public String header() {
		return "default/header";
	}
	
	@RequestMapping("main")
	public String main() {
		return "default/main";
	}
	
	@RequestMapping("footer")
	public String footer() {
		return "default/footer";
	}
	
}

 

□ com.quiz.mvc.controller - MemberController.java (컨트롤러)

 

package com.quiz.mvc.controller;

import javax.servlet.http.HttpServletRequest;
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.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import com.quiz.mvc.dto.MemberDTO;
import com.quiz.mvc.service.MemberService;

@Controller
public class MemberController {
	@Autowired
	private MemberService service;

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

	@PostMapping("register")
	public String register(MemberDTO member, Model model) {
		String msg = service.register(member);
		model.addAttribute("msg", msg);
		if (msg.equals(member.getId() + "님 가입 완료"))
			return "member/index";

		return "member/register";
	}

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

	@PostMapping("login")
	public String login(String id, String pw, Model model) {
		String msg = service.login(id, pw);
		model.addAttribute("msg", msg);
		if (msg.equals("로그인 성공"))
			return "member/index";
		return "member/login";
	}

	@GetMapping("memberInfo")
	public String memberInfo(Model model) {
		model.addAttribute("members", service.memberInfo());
		return "member/memberInfo";
	}

	@RequestMapping("userInfo")
	public String userInfo(HttpServletRequest request, Model model) {
		String id = request.getParameter("id");

		MemberDTO member = service.userInfo(id);
		if (member != null) {
			model.addAttribute("member", member);
			return "member/userInfo";
		}

		return "forward:memberInfo";
	}

	@Autowired
	private HttpSession session;

	@RequestMapping("logout")
	public String logout() {
		session.invalidate();
		return "member/index";
	}

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

	
	 @PostMapping("update") 
	 public String update(MemberDTO member) {
		 
		 String msg = service.update(member);
		 
		 if(msg.equals("회원 수정 완료")) {
			 session.invalidate();
			 return "redirect:memberInfo";
		 }
		 return "member/update"; 
	}
	 

	@GetMapping("delete")
	public String delete(String id) {
		String sessionId = (String)session.getAttribute("id");
		if(id == null || id == "" || sessionId == null || sessionId == "")
			return "redirect:memberInfo";
	
		if(id.equals(sessionId) == false)
			return "redirect:memberInfo";
		
		return "member/delete";
	}
	
	@PostMapping("delete")
	public String delete(MemberDTO member, Model model) {
		String msg = service.delete(member);
		
		if(msg.equals("회원 삭제 완료")) {
			session.invalidate();
			return "redirec:/";
		}
		
		model.addAttribute("msg", msg);
		return "member/delete";
		
	}
	
}

 

□ com.quiz.mvc.dto - MemberDTO.java (DTO)

 

package com.quiz.mvc.dto;
/*
 * 아래의 필드 정보와 동일한
 * mvc_quiz 테이블을 만들어주세요
 * 각 컬럼의 사이즈는 자유롭게 구성해주세요
 */

public class MemberDTO {
	
	private String id;
	private String pw;
	private String confirm;
	private String username;
	private String address;
	private String mobile;
	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 getConfirm() {
		return confirm;
	}
	public void setConfirm(String confirm) {
		this.confirm = confirm;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getMobile() {
		return mobile;
	}
	public void setMobile(String mobile) {
		this.mobile = mobile;
	}
	
}

 

□ com.quiz.mvc.repository - MemberDAO.java (DAO)

 

package com.quiz.mvc.repository;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import org.springframework.stereotype.Repository;

import com.quiz.mvc.dto.MemberDTO;

@Repository
public class MemberDAO {
	private Connection con;
	
	public MemberDAO() {
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "spring1212";
		String password = "oracle";
		
		try {
			Class.forName("oracle.jdbc.OracleDriver");
			con = DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void register(MemberDTO member) {
		PreparedStatement ps = null;
		String sql = "INSERT INTO mvc_quiz VALUES(?,?,?,?,?)";
		try {
			ps = con.prepareStatement(sql);
			ps.setString(1, member.getId());
			ps.setString(2, member.getPw());
			ps.setString(3, member.getUsername());
			ps.setString(4, member.getAddress());
			ps.setString(5, member.getMobile());
	
			ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if(ps != null) ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
	}
	
	public MemberDTO login(String id) {
		PreparedStatement ps = null;
		ResultSet rs = null;
		String sql = "SELECT * FROM mvc_quiz WHERE id=?";
		try {
			ps = con.prepareStatement(sql);
			ps.setString(1, id);
			rs = ps.executeQuery();
			if(rs.next()) {
				MemberDTO member = new MemberDTO();
				member.setId(rs.getString("id"));
				member.setPw(rs.getString("pw"));
				member.setUsername(rs.getString("username"));
				member.setAddress(rs.getString("address"));
				member.setMobile(rs.getString("mobile"));
				return member;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if(rs != null) rs.close();
				if(ps != null) ps.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return null;
	}

	public ArrayList<MemberDTO> memberInfo() {
		PreparedStatement ps = null;
		ResultSet rs = null;
		String sql = "SELECT * FROM mvc_quiz";
		ArrayList<MemberDTO> members = new ArrayList<MemberDTO>();
		 
		try {
			ps = con.prepareStatement(sql);
			rs = ps.executeQuery();
			while(rs.next()) {
				MemberDTO member = new MemberDTO();
				member.setId(rs.getString("id"));
				member.setPw(rs.getString("pw"));
				member.setUsername(rs.getString("username"));
				member.setAddress(rs.getString("address"));
				member.setMobile(rs.getString("mobile"));
				members.add(member);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if(rs != null) rs.close();
				if(ps != null) ps.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return members;
	}

	public MemberDTO userInfo(String id) {
		return login(id);
	}

	public void update(MemberDTO member) {
		PreparedStatement ps = null;
		String sql = "UPDATE mvc_quiz SET pw=?, username=?, address=?, mobile=? WHERE id=?";
		try {
			ps = con.prepareStatement(sql);
			ps.setString(1, member.getPw());
			ps.setString(2, member.getUsername());
			ps.setString(3, member.getAddress());
			ps.setString(4, member.getMobile());
			ps.setString(5, member.getId());
			ps.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if(ps != null) ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public void delete(String id) {
		PreparedStatement ps = null;
		String sql = "DELETE FROM mvc_quiz WHERE id=?";
		try {
			ps = con.prepareStatement(sql);
			ps.setString(1, id);
			ps.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if(ps != null) ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

 

□ com.quiz.mvc.service

 

package com.quiz.mvc.service;

import java.util.ArrayList;

import javax.servlet.http.HttpSession;

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

import com.quiz.mvc.dto.MemberDTO;
import com.quiz.mvc.repository.MemberDAO;

@Service
public class MemberService {
	@Autowired private MemberDAO memberDao;
	
	public String register(MemberDTO member) {
		if(member.getId().isEmpty() || member.getPw().isEmpty()) {
			return "필수 정보입니다.";
		}
		if( member.getPw().equals(member.getConfirm()) == false) {
			return "두 비밀번호는 일치하지 않습니다.";
		}
		
		MemberDTO result = memberDao.login(member.getId());
		if(result != null) {
			return "중복 아이디 입니다.";
		}else {
			memberDao.register(member);
			return member.getId() + "님 가입 완료";
		}
	}
	
	@Autowired private HttpSession session;
	public String login(String id, String pw) {
		if(id == null || id.isEmpty() || pw == null || pw.isEmpty())
			return "필수 정보입니다.";
		MemberDTO result = memberDao.login(id);
		if(result == null)
			return "아이디 또는 비밀번호가 일치하지 않습니다.";
		
		if(result.getPw().equals(pw) == false)
			return "아이디 또는 비밀번호가 일치하지 않습니다.";
		
		session.setAttribute("id", result.getId());
		session.setAttribute("username", result.getUsername());
		session.setAttribute("address", result.getAddress());
		session.setAttribute("mobile", result.getMobile());
		return "로그인 성공";
	}

	public ArrayList<MemberDTO> memberInfo() {
		return memberDao.memberInfo();
	}

	public MemberDTO userInfo(String id) {
		if(id == null || id.isEmpty())
			return null;
		
		String sessionId = (String) session.getAttribute("id");
		if(id.equals(sessionId) == false)
			return null;
		
		MemberDTO member = memberDao.userInfo(id);
		return member;
	}
	
	public String update(MemberDTO member) {
		if(member.getPw().isEmpty()) {
			return "필수 정보입니다.";
		}
		if(member.getPw().equals(member.getConfirm()) == false) {
			return "두 비밀번호는 일치하지 않습니다.";
		}
		
		String id = (String)session.getAttribute("id");
		MemberDTO result = memberDao.login(id);
		if(result != null) {
			member.setId(id);
			memberDao.update(member);
			return "회원 수정 완료";
		}else {
			return "확인 후 다시 시도하세요.";
		}
	}
	
	public String delete(MemberDTO member) {
		if(member.getPw() == null || member.getPw().isEmpty()) {
			return "비밀번호를 입력하세요.";
		}
		
		if(member.getPw().equals(member.getConfirm()) == false) {
			return "두 비밀번호를 확인하세요.";
		}
		
		String id = (String)session.getAttribute("id");
		MemberDTO check = memberDao.login(id);
		if(check.getPw().equals(member.getPw())) {
			memberDao.delete(id);
			return "회원 삭제 완료";
		}
		return "비밀번호가 틀립니다.";
	}
}

 


 

■ view 관련 jsp 파일들

 

□ views/default 파일들

 

header.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>header</title>
<style type="text/css">
	a {text-decoration: none; color:black;}
	ul {padding: 20px;}
	ul li {display: inline; padding: 15px;}
	.main_div{height:150px;}
	.font{text-align: center;  width:100%; margin-bottom: 50px}
</style>
</head>
<body>
	<div align="center">
		<h1>CARE LAB</h1>
	</div>
	<c:url var="contextRoot" value="/" />
	<div align="right">
		<hr>
		<ul>
			<li><a href="${contextRoot }">HOME</a></li>
			<c:choose>
				<c:when test="${empty sessionScope.id }">
					<li><a href="register">Register</a></li>
					<li><a href="login">Login</a></li>
				</c:when>
				<c:otherwise>
					<li><a href="memberInfo">memberInfo</a></li>
					<li><a href="logout">Logout</a></li>
				</c:otherwise>
			</c:choose>
		</ul>
		<hr>
		<div class="font"><font color="red">${msg }</font></div>
	</div>

 

main.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<div align="center" class="main_div">더할 나위 없다.</div>

 

footer.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
	<div align="center">
		<hr>
		Copyright CARE Lab. ALL rights reversed.
	</div>
</body>
</html>

 

□ views/member 파일들

 

index.jsp

 

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

<c:import url="/header" />
<c:import url="/main" />
<c:import url="/footer" />

 

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" %>

<c:import url="/header" />
<div align="center">
	<h1>회원 등록</h1>
	<table>
	<tr><td>
		<form action="register" method="post" id="f">
			<input type="text" name="id" placeholder="아이디" id="id"> (*필수 항목) <br>
			<input type="password" name="pw" placeholder="비밀번호" id="pw"><br>
			<input type="password" name="confirm" placeholder="비밀번호 확인 " id="confirm">
			<label id="label">(*필수 체크)</label><br>
			<input type="text" name="username" id="username" placeholder="이름" ><br>
			<input type="text" name="address" placeholder="주소" ><br>
			<input type="text" name="mobile" placeholder="전화번호" ><br>
			<input type="submit" value="회원가입" ><br>
		</form>
	</td></tr>
	</table>
</div>
<c:import url="/footer" />

 

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" %>

<c:import url="/header" />

<div align="center">
	<h1>로그인</h1>
	<table>
	<tr><td>
		<form action="login" id="f" method="post">
			<input type="text" name="id" placeholder="아이디" id="id"> <br>
			<input type="password" name="pw" placeholder="비밀번호" id="pw"><br>
			<input type="submit" value="로그인" ><br>
		</form>
	</td></tr>
	</table>
</div>

<c:import url="/footer" />

 

mamberInfo.jsp

 

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

<c:import url="/header"/>
<div align="center">
<h1>회원 목록</h1>
<c:choose>
	<c:when test="${members.isEmpty() == true }">
		<h1> 등록된 데이터가 존재하지 않습니다. </h1>
	</c:when>
	<c:otherwise>
		<table border=1>
			<thead>
				<tr>
					<th>아이디</th>
					<th>이름</th>
					<th>전화번호</th>
				</tr>
			</thead>
			<tbody>
				<c:forEach var="member" items="${members }">
					<tr>
						<td onclick="location.href='userInfo?id=${member.id}'">
							${member.id }
						</td>
						<td>${member.username }</td>
						<td>${member.mobile }</td>
					</tr>
				</c:forEach>
			</tbody>
		</table>
	</c:otherwise>
</c:choose>
</div>
<c:import url="/footer"/>

 

userInfo.jsp

 

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

<c:import url="/header" />

<div align="center">
<h1>개인 정보</h1>
	아이디 : ${member.id } <br> 
	비밀번호 : ${member.pw }<br>
	이름 : ${member.username } <br>
	주소 : ${member.address } <br>
	전화번호 : ${member.mobile } <br><br>
	<button type="button" onclick="location.href='update?id=${member.id }'">회원 수정</button>
	<button type="button" onclick="location.href='delete?id=${member.id }'">회원 삭제</button>
</div>	

<c:import url="/footer" />

 

update.jsp

 

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

<c:import url="/header"/>
<div align="center">
	<h1>회원 수정</h1>
	<table>
	<tr><td>
		<form action="update" method="post" id="f">
			<input type="text" id="id" value="${sessionScope.id }" readonly="readonly"><br>
			<input type="password" name="pw" placeholder="비밀번호" id="pw"><br>
			<input type="password" name="confirm" placeholder="비밀번호 확인 " id="confirm" >
			<label id="label">(*필수 체크)</label><br>
			<input type="text" name="username" id="username" value="${sessionScope.username }"><br>
			<input type="text" name="address" value="${sessionScope.address }"><br>
			<input type="text" name="mobile" value="${sessionScope.mobile }"><br>
			<input type="submit" value="회원 수정"><br>
		</form>
	</td></tr>
	</table>
</div>
<c:import url="/footer"/>

 

delete.jsp

 

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

<c:import url="/header"/>

<div align="center">
	<h1>회원 탈퇴</h1>
	<table>
	<tr><td>
		<form action="delete" method="post" id="f">
			<input type="text" value="${sessionScope.id }" readonly="readonly"> <br>
			<input type="password" name="pw" placeholder="비밀번호"><br>
			<input type="password" name="confirm" placeholder="비밀번호 확인" ><br>
			<input type="submit" value="탈퇴"><br>
		</form>
	</td></tr>
	</table>
</div>

<c:import url="/footer"/>

 

 

728x90
반응형

'IT&코딩 > Spring' 카테고리의 다른 글

Spring - 8일차 (dbQuiz)  (0) 2022.12.20
Spring - 7일차 (dbConfig)  (0) 2022.12.20
Spring - 5일차 (MVC2 모델 실습)  (0) 2022.12.15
Spring - 4일차 (MVC2 모델 이론)  (0) 2022.12.15
Spring - 3일차 (MVC_2)  (0) 2022.12.12