본문 바로가기
코딩도전기/Spring

CODO Day41_Spring(MemberApp)

by 코도꼬마 2023. 3. 30.

 

 

 

 

 

  • pom.xml(변경)

버전 업그레이드

 

 

# AspectJ 위에 필요한 라이브러리 추가

 

버전 업그레이드

 

  • web.xml(추가)
<!-- 한글깨짐 방지 -->
<!-- controller 접근시 특정 특정 요청에 대해서 어떤 class와 연결할 것인지 지정 -->
<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <!-- 인코딩 종류 -->
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <!-- 강제 인코딩 여부 -->
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<!-- 요청이 왔을때 사용할 필터 명시 -->
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

 

  • servlet-context.xml(추가 - 맨 아래 쪽(beans 닫기 전))
	<!-- data source -->
	<beans:bean name="datasource" class="org.apache.commons.dbcp.BasicDataSource">
		<beans:property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
		<beans:property name="url" value="jdbc:mariadb://localhost:3306/mydb"/>
		<beans:property name="username" value="web_user"/>
		<beans:property name="password" value="pass"/>
	</beans:bean>
	
	<!-- mybatis 설정 -->
	<beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 연결할 DB 정보 -->
		<beans:property name="dataSource" ref="datasource"/>
		<!-- 쿼리문이 있을 장소 -->
		<beans:property name="mapperLocations" value="classpath:kr/co/gudi/member/dao/*.xml"/>
	</beans:bean>
	
	<!-- mybatis 사용 영역 -->
	<mybatis-spring:scan base-package="kr.co.gudi.member.dao"/>

 

  • 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" %>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.6.3.min.js"></script>
<style>
	table, th, td{
		border: 1px solid black;
		border-collapse: collapse;
		padding: 5px 10px;
	}
</style>
</head>
<body>
	<form action="login.do" method="post">
		<table>
			<tr>
				<th>ID</th>
				<td><input type="text" name="id"/></td>
			</tr>
			<tr>
				<th>PW</th>
				<td><input type="password" name="pw"/></td>
			</tr>
			<tr>
				<th colspan="2">
					<input type="submit" value="LOGIN"/>
					<input type="button" value="회원가입" onclick="location.href='join.go'"/>
				</th>
			</tr>
		</table>
	</form>
</body>
<script>
	var msg = "${msg}";
	if(msg != ""){
		alert(msg);
	}
</script>
</html>

 

  • joinForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.6.3.min.js"></script>
<style>
	table, th, td{
		border: 1px solid black;
		border-collapse: collapse;
		padding: 5px 10px;
	}
</style>
</head>
<body>
	<form action="join.do" method="post">
		<table>
			<tr>
				<th>ID</th>
				<td><input type="text" name="id"/></td>
			</tr>
			<tr>
				<th>PW</th>
				<td><input type="text" name="pw"/></td>
			</tr>
			<tr>
			<tr>
				<th>NAME</th>
				<td><input type="text" name="name"/></td>
			</tr>
			<tr>
				<th>AGE</th>
				<td><input type="text" name="age"/></td>
			</tr>
			<tr>
			<tr>
				<th>GENDER</th>
				<td>
					<input type="radio" name="gender" value="남"/>남자 &nbsp;&nbsp;&nbsp;
					<input type="radio" name="gender" value="여"/>여자
				</td>
			</tr>
			<tr>
				<th>E-MAIL</th>
				<td><input type="text" name="email"/></td>
			</tr>
			<tr>
				<th colspan="2">
					<input type="submit" value="회원가입"/>
				</th>
			</tr>
		</table>
	</form>
</body>
<script>
	var msg = "${msg}";
	if(msg != ""){
		alert(msg);
	}
</script>
</html>

 

  • main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.6.3.min.js"></script>
<style>
	table,th,td{
		border: 1px solid black;
		border-collapse: collapse;
		padding: 5px 10px
	}
	#login{
		margin-bottom:20px;
	}
</style>
</head>
<body>
	<jsp:include page="loginBox.jsp"/>
	<table>
		<thead>
			<tr>
				<th>ID</th>
				<th>NAME</th>
				<th>EMAIL</th>
				<th>상세보기</th>
				<th>삭제</th>
			</tr>
		</thead>
		<tbody>
			<c:forEach items="${list}" var="member">
				<tr>
					<td>${member.id}</td>
					<td>${member.name}</td>
					<td>${member.email}</td>
					<td><a href="detail.do?id=${member.id}">상세보기</a></td>
					<td><a href="del.do?id=${member.id}">삭제</a></td>
					<td></td>
				</tr>
			</c:forEach>
		</tbody>
	</table>
</body>
<script></script>
</html>

 

  • loginBox.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<div id="login"></div>
<script>
	var loginId="${sessionScope.loginId}";
	
	if(loginId == ""){
		alert("로그인이 필요한 서비스입니다.");
		location.href="./";
	}else{
		var content = '안녕하세요 ${sessionScope.loginId}님! <a href="logout">[로그아웃]</a>';
		$("#login").html(content);
	}
</script>

 

  • detail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.6.3.min.js"></script>
<style>
	table, th, td{
		border: 1px solid black;
		border-collapse: collapse;
		padding: 5px 10px;
	}
</style>
</head>
<body>
	<jsp:include page="loginBox.jsp"/>
	<form action="update.do" method="post">
		<table>
			<tr>
				<th>ID</th>
				<td><input type="text" name="id" value="${member.id}" readonly/></td>
			</tr>
			<tr>
				<th>PW</th>
				<td><input type="text" name="pw" value="${member.pw}"/></td>
			</tr>
			<tr>
			<tr>
				<th>NAME</th>
				<td><input type="text" name="name" value="${member.name}"/></td>
			</tr>
			<tr>
				<th>AGE</th>
				<td><input type="text" name="age" value="${member.age}"/></td>
			</tr>
			<tr>
			<tr>
				<th>GENDER</th>
				<td>
					<input type="radio" name="gender" value="남"
					<c:if test="${member.gender eq '남'}">checked</c:if>
					/>남자 &nbsp;&nbsp;&nbsp;
					<input type="radio" name="gender" value="여"
					<c:if test="${member.gender eq '여'}">checked</c:if>
					/>여자
				</td>
			</tr>
			<tr>
				<th>E-MAIL</th>
				<td><input type="text" name="email" value="${member.email}"/></td>
			</tr>
			<tr>
				<th colspan="2">
					<input type="submit" value="수정"/>
				</th>
			</tr>
		</table>
	</form>
</body>
<script>
	var msg = "${msg}";
	if(msg != ""){
		alert(msg);
	}
</script>
</html>

 

 

  • HomeController
package kr.co.gudi.member.controller;

import java.util.ArrayList;
import java.util.HashMap;

import javax.servlet.http.HttpSession;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import kr.co.gudi.member.dto.MemberDTO;
import kr.co.gudi.member.service.MemberService;

@Controller
public class HomeController {
	
	Logger logger = LoggerFactory.getLogger(this.getClass());
	
	@Autowired MemberService service;
	
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String main(Model model) {
		return "login";
	}
	
	//*.go : 해당 주소로 이동 요청
	//*.do : 특정 메서드 실행 요청
	@RequestMapping(value = "/join.go", method = RequestMethod.GET)
	public String joinForm(Model model) {
		return "joinForm";
	}
	
	@RequestMapping(value = "/join.do", method = RequestMethod.POST)
    //@RequestParam : 파라매터 값 받아옴
	public String join(Model model, @RequestParam HashMap<String, String> params) {
		logger.info("join param : "+params);
		
		String msg = service.join(params);
		model.addAttribute("msg",msg);
		
		return "login";
	}
	
	@RequestMapping(value = "/login.do", method = RequestMethod.POST)
    //HttpSession : web의 session 정보를 가져옴
	public String login(Model model, @RequestParam String id, @RequestParam String pw, HttpSession session) {
		String page = "login";
		
        //{}에 가져온 파라매터 값을 순서대로 넣어줌
		logger.info("id : {} / pw : {}",id,pw);
		String loginId = service.login(id,pw);
		logger.info("loginId : "+loginId);
		
		if(loginId != null) {
        	//resp 대신 redirect 해줌
			page = "redirect:/list.do";
            //session에 저장
			session.setAttribute("loginId", loginId);
		}else {
        	//model객체를 이용하여 뷰로 보냄(req.setAttribute 기능)
			model.addAttribute("msg","아이디 또는 비밀번호를 확인해주세요.");
		}
		return page;
	}
	
	@RequestMapping(value = "/list.do", method = RequestMethod.GET)
	public String list(Model model) {
		
		ArrayList<MemberDTO> list = service.list();
		model.addAttribute("list",list);
		
		return "main";
	}
	
	@RequestMapping(value = "/logout", method = RequestMethod.GET)
	public String logout(HttpSession session) {
    	//session에 저장한 값 삭제
		session.removeAttribute("loginID");
		return "redirect:/";
	}
	
	@RequestMapping(value = "/del.do", method = RequestMethod.GET)
	public String del(@RequestParam String id, HttpSession session) {
		logger.info("deleteID : ", id);
		
		if(session.getAttribute("loginId") != null) {
			service.del(id);
		}
		return "redirect:/list.do";
	}
	
	@RequestMapping(value="/detail.do", method=RequestMethod.GET)
	public String detail(@RequestParam String id, Model model) {		
		String page = "redirect:/list.do";
		
		MemberDTO dto = service.detail(id);
		if(dto != null) {
			page  = "detail";
			model.addAttribute("member", dto);
		}		
		return page;
	}	
	
	@RequestMapping(value = "/update.do", method = RequestMethod.POST)
	public String update(Model model, @RequestParam HashMap<String, String> params, HttpSession session) {		
		logger.info("join param : "+params);				
		if(session.getAttribute("loginId") != null) {
			service.update(params);
		}				
		return "redirect:/detail.do?id="+params.get("id");
	}	
}

 

  • MemberService
package kr.co.gudi.member.service;

import java.util.ArrayList;
import java.util.HashMap;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import kr.co.gudi.member.dao.MemberDAO;
import kr.co.gudi.member.dto.MemberDTO;

@Service
public class MemberService {
	
	@Autowired MemberDAO dao;

	Logger logger = LoggerFactory.getLogger(this.getClass());

	public String join(HashMap<String, String> params) {
		String msg = "회원가입에 실패하였습니다.";
		
		if(dao.join(params) == 1) {
			msg = "회원가입에 성공하였습니다.";
		}
		
		return msg;
	}

	public String login(String id, String pw) {		
		return dao.login(id,pw);
	}

	public ArrayList<MemberDTO> list() {
		return dao.list();
	}

	public void del(String id) {
		int row = dao.del(id);
		logger.info("delete row : "+row);
	}

	public MemberDTO detail(String id) {
		return dao.detail(id);
	}

	public void update(HashMap<String, String> params) {
		int row = dao.update(params);
		logger.info("update row: "+row);
	}	
}

 

  • MemberDAO(Interface)
    • xml을 java로 객체화하기 위해 interface로 연결시켜줌
package kr.co.gudi.member.dao;

import java.util.ArrayList;
import java.util.HashMap;

import kr.co.gudi.member.dto.MemberDTO;

public interface MemberDAO {

	int join(HashMap<String, String> params);

	String login(String id, String pw);

	ArrayList<MemberDTO> list();

	int del(String id);

	MemberDTO detail(String id);
	
	int update(HashMap<String, String> params);
}

 

  • member_mapper
<?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">
<!-- xml을 java에서 쓰기위해 연결되는 interface 가 필요 -->
<!-- MemberDAO 주소로 연결 -->
<mapper namespace="kr.co.gudi.member.dao.MemberDAO">
	
	<insert id="join" parameterType="hashmap">
		INSERT INTO member(id,pw,name,age,gender,email)
			VALUES(#{id},#{pw},#{name},#{age},#{gender},#{email})
	</insert>
	
	<select id="login" resultType="String">
		SELECT id FROM member WHERE id = #{param1} AND pw = #{param2}
	</select>
	
	<select id="list" resultType="kr.co.gudi.member.dto.MemberDTO">
		SELECT * FROM member 
	</select>
	
	<delete id="del">
		DELETE FROM member WHERE id = #{param1}
	</delete>
	
	<select id="detail" resultType="kr.co.gudi.member.dto.MemberDTO">
		SELECT * FROM member WHERE id = #{param1}
	</select>
	
	<update id="update" parameterType="hashmap">
		UPDATE member SET pw = #{pw}, name = #{name} ,age = #{age}, gender = #{gender}, email = #{email}
			WHERE id = #{id}
	</update>
	
</mapper>

 

  • MemberDTO(Bean 역할)
package kr.co.gudi.member.dto;

public class MemberDTO {
	
	private String id;
	private String pw;
	private String name;
	private int age;
	private String gender;
	private String email;
	
	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;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	
}

 

'코딩도전기 > Spring' 카테고리의 다른 글

CODO Day44_Spring(PhotoBoard)  (0) 2023.04.04
CODO Day43_Spring(FileService)  (0) 2023.04.03
CODO Day42_Spring(BoardApp)  (0) 2023.03.31
CODO Day40_Spring(MyBatis)  (0) 2023.03.28
CODO Day39_Spring(DB 연결)  (0) 2023.03.28