본문 바로가기

Spring

Spring CRUD 예제

프로젝트 구성 

 

Spring기본적인 환경설정은 이전 글을 참고해주세요.

https://cygnus.tistory.com/66

 

 

 

예제로 들어가기 전에 파악해야 할 Spring mvc의 흐름

View : 사용자가 보는 웹페이지

Controller : 사용자의 요청을 받아 Service로 넘겨주고  그 뒤로 처리된 값을 다시 받아와 요청을 사용자에게 다시 준다.

Service : 실제 비즈니스 로직을 처리하는 곳

DAO : DB에 접근하기 위한 로직을 처리하는 곳

 

 

예제로 들어가기 전에 파악해야 할 Spring 코드 설명

 

 

 

컨트롤러에서 @Autowired를 통해 DI(의존성 주입)으로 Service와 연결해줍니다.

 

 

 

 

 

서비스에서도 마찬가지로 dao와 연결해줍니다.

 

 

 

 

 

DAO에선 DB에 접근하기 위해 SqlSessionTemplate와 연결해줍니다.

 

 

 

 

 

 

Controller에서 메소드의 리턴 타입이 String이면 @RequestMapping의 value는 표시될 url을 의미하고

리턴값은 jsp파일의 이름을 의미합니다.

 

 

 

 

 

 

 

Controller에서 리턴값이 String이 아닌 ModelAndView일때

@RequestMapping의 value는 form의 action이나 location.href의 값과 같아야 합니다.

 

 

 

 

 

@ModelAttribute를 이용해

DTO와 FORM의 name이 같으면 매핑이 됩니다.

서비스로 fMember값을 넘겨줍니다.

 

 

 

 

컨트롤러에서 받아온 값을 dao로 넘겨주며 dao에서 처리되고 난 값을

잘 받아왔는지 체크 후  ModelAndView의 setViewName으로 이동할 페이지(JSP)를 설정합니다. 

 

 

 

 

또한 어떠한 경우에는 ModelAndView의 addObject("jsp에서 사용할 이름", jsp에서 사용할 데이터); 을 통해

JSP에서 ${설정된이름.dto필드변수명}을 통해 바로 사용가능합니다.

 

 

 

 

mybatis-config.xml의 name-sapce와 id가 DAO의 각 CRUD 부분의 첫번째 인자로 들어갑니다.

sql.insert("네임스페이스.아이디", 넘겨줄 값); 으로 DAO에서 리턴값으로 작성해주며

MemberMapper.xml에서 쿼리문을 작성해 처리해줍니다.

 

parameterType은 받아오는 값의 타입을 의미하고

resultType은 쿼리문의 결과값의 타입을 의미합니다.

 

parameterType에 써있는 타입은 원래 com.icia.fmember.dto.FmemberDTO 이런식으로 가져와야 하는 것을

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
	<typeAlias type="com.icia.member.dto.MemberDTO" alias="member"/>
	<!-- com.icia.member.dto.MemberDTO 대신 alias 별칭으로 member로 사용한다고 변경 -->
</typeAliases>

</configuration>

src/main/resources 폴더에 mybatis-config.xml을 통해

위와같이 <typeAlias>를 통해  별칭(alias) 설정이 가능합니다.

 

 

 

FmemberController.java

package com.icia.fmember.controller;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
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.ModelAndView;

import com.icia.fmember.dto.FmemberDTO;
import com.icia.fmember.service.FmemberService;


@Controller
public class FmemberController {
	
	ModelAndView mav = new ModelAndView();
	
	@Autowired
	FmemberService fmsvc;
    
    @Autowired
	private HttpSession session;
	

	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String index() {
		
		
		return "index";
	}
	
	@RequestMapping(value = "/registForm", method = RequestMethod.GET)
	public String registForm() {
		
		
		return "registForm";
	}
	
	// memberRegist 회원가입
	@RequestMapping(value = "/memberRegist", method = RequestMethod.POST)
	public ModelAndView memberRegist(@ModelAttribute FmemberDTO fMember) {
		System.out.println("[1]Controller : "+fMember);
		mav = fmsvc.memberRegist(fMember); 
		System.out.println("[5]Controller : "+fMember);
		
		return mav;
	}
	
	//memberList 회원목록
	@RequestMapping(value = "/memberList", method = RequestMethod.GET)
	public ModelAndView memberList() {
		System.out.println("[1]Controller : ");
		mav = fmsvc.memberList(); 
		System.out.println("[5]Controller : ");
		
		return mav;
	}
	
	//memberInfo 특정 회원정보
	@RequestMapping(value = "/memberInfo", method = RequestMethod.GET)
	public ModelAndView memberInfo(@RequestParam("fId") String fId) {
		System.out.println("[1]Controller : "+fId);
		mav = fmsvc.memberInfo(fId); 
		System.out.println("[5]Controller : "+fId);
		
		return mav;
	}
	
	@RequestMapping(value = "/modifyForm", method = RequestMethod.GET)
	public ModelAndView modifyForm(@RequestParam("fId") String fId) {
		System.out.println("[1]Controller : "+fId);
		mav = fmsvc.modifyForm(fId); 
		System.out.println("[5]Controller : "+fId);
		
		return mav;
	}
	
	// memberModify
	@RequestMapping(value = "/memberModify", method = RequestMethod.POST)
	public ModelAndView memberModify(@ModelAttribute FmemberDTO fMember) {
		System.out.println("[1]Controller : "+fMember);
		mav = fmsvc.memberModify(fMember); 
		System.out.println("[5]Controller : "+fMember);
		
		return mav;
	}
    
    @RequestMapping(value = "/memberDelete", method = RequestMethod.GET)
	public ModelAndView memberDelete(@RequestParam("fId") String fId) {
		
		mav = fmsvc.memberDelete(fId);
		
		return mav;
	}
    
    @RequestMapping(value = "/memberLogin", method = RequestMethod.POST)
	public ModelAndView memberLogin(@ModelAttribute FmemberDTO fMember) {
		System.out.println("[1] 로그인"+fMember);
		mav = fmsvc.memberLogin(fMember);
		System.out.println("[5] 로그인"+fMember);
		return mav;
	}
	
	

	@RequestMapping(value = "/logout", method = RequestMethod.GET)
	public String logout() {
		session.invalidate();
		return "index";
	}
	
}

 

FmemberDAO.java

package com.icia.fmember.dao;

import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.icia.fmember.dto.FmemberDTO;

@Repository
public class FmemberDAO {

	@Autowired
	SqlSessionTemplate sql;
	
	public int memberRegist(FmemberDTO fMember) {
		// TODO Auto-generated method stub
		System.out.println("[3]DAO : "+fMember);
		return sql.insert("Fmember.regist",fMember);
	}

	public List<FmemberDTO> memberList() {
		// TODO Auto-generated method stub
		System.out.println("[3]DAO : ");
		return sql.selectList("Fmember.list");
	}

	public FmemberDTO memberInfo(String fId) {
		// TODO Auto-generated method stub
		System.out.println("[3]DAO : "+fId);
		return sql.selectOne("Fmember.info",fId);
	}

	public int memberModify(FmemberDTO fMember) {
		// TODO Auto-generated method stub
		System.out.println("[3]DAO : "+fMember);
		return sql.update("Fmember.modify",fMember);
	}
    
   	public int memberDelete(String fId) {
		// TODO Auto-generated method stub
		
		return sql.delete("Fmember.del",fId);
	}
	

	public String memberLogin(TmemberDTO fMember) {
		// TODO Auto-generated method stub
		System.out.println("[3] 로그인"+fMember);
		return sql.selectOne("Fmember.login",fMember);
	}



	
}

 

FmemberDTO.java

package com.icia.fmember.dto;

public class FmemberDTO {

	private String fId;
	private String fPw;
	private String fName;
	private String fBirth;
	private String fGender;
	private String fPhone;
	private String fAddr;
	private String fEmail;
	
	// Controller에서 
	// 파라미터 값으로 (@ModelAttribute MemberDTO member) 해주고
	// jsp의 form으로 넘겨주는 input값들의 name과 DTO의 변수명이 동일하면 자동으로 input의 값이 여기로 넘어온다!!
	
	public String getfId() {
		return fId;
	}
	public void setfId(String fId) {
		this.fId = fId;
	}
	public String getfPw() {
		return fPw;
	}
	public void setfPw(String fPw) {
		this.fPw = fPw;
	}
	public String getfName() {
		return fName;
	}
	public void setfName(String fName) {
		this.fName = fName;
	}
	public String getfBirth() {
		return fBirth;
	}
	public void setfBirth(String fBirth) {
		this.fBirth = fBirth;
	}
	public String getfGender() {
		return fGender;
	}
	public void setfGender(String fGender) {
		this.fGender = fGender;
	}
	public String getfPhone() {
		return fPhone;
	}
	public void setfPhone(String fPhone) {
		this.fPhone = fPhone;
	}
	public String getfAddr() {
		return fAddr;
	}
	public void setfAddr(String fAddr) {
		this.fAddr = fAddr;
	}
	public String getfEmail() {
		return fEmail;
	}
	public void setfEmail(String fEmail) {
		this.fEmail = fEmail;
	}
	
	@Override
	public String toString() {
		return "FmemberDTO [fId=" + fId + ", fPw=" + fPw + ", fName=" + fName + ", fBirth=" + fBirth + ", fGender="
				+ fGender + ", fPhone=" + fPhone + ", fAddr=" + fAddr + ", fEmail=" + fEmail + "]";
	}
	
	
	
}

 

FmemberService.java

package com.icia.fmember.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.ModelAndView;

import com.icia.fmember.dao.FmemberDAO;
import com.icia.fmember.dto.FmemberDTO;

@Service
public class FmemberService {
	
	ModelAndView mav = new ModelAndView();
	
	@Autowired
	FmemberDAO dao;
	

	public ModelAndView memberRegist(FmemberDTO fMember) {
		// TODO Auto-generated method stub
		System.out.println("[2]Service : "+fMember);
		int result = dao.memberRegist(fMember);
		System.out.println("[4]Service : "+fMember);
		
		if(result>0) {
			mav.setViewName("index");
		}else {
			mav.setViewName("registForm");
		}
		
		return mav;
	}


	public ModelAndView memberList() {
		// TODO Auto-generated method stub
		System.out.println("[2]Service : ");
		List<FmemberDTO> member = dao.memberList();
		System.out.println("[4]Service : "+member);
		mav.setViewName("memberList");
		mav.addObject("memberList",member);
		
		return mav;
	}


	public ModelAndView memberInfo(String fId) {
		// TODO Auto-generated method stub
		System.out.println("[2]Service : "+fId);
		FmemberDTO member = dao.memberInfo(fId);
		mav.setViewName("memberInfo");
		mav.addObject("view",member);
		System.out.println("[4]Service : "+member);
		return mav;
	}


	public ModelAndView modifyForm(String fId) {
		// TODO Auto-generated method stub
		System.out.println("[2]Service : "+fId);
		FmemberDTO member = dao.memberInfo(fId);
		mav.setViewName("modifyForm");
		mav.addObject("modi",member);
		System.out.println("[4]Service : "+member);
		return mav;
	}


	public ModelAndView memberModify(FmemberDTO fMember) {
		// TODO Auto-generated method stub
		System.out.println("[2]Service : "+fMember);
		int result = dao.memberModify(fMember);
		
		if(result > 0) {
			mav.setViewName("redirect:/memberInfo?fId="+fMember.getfId());
		}else {
			mav.setViewName("modifyForm");
		}
		System.out.println("[4]Service : "+fMember);
		return mav;
	}
    
    	public ModelAndView memberDelete(String fId) {
		// TODO Auto-generated method stub
		int result = dao.memberDelete(fId);
		if(result > 0) {
			mav.setViewName("redirect:/memberList");
			mav.addObject("memberList",fId);
			
		}else {
			mav.setViewName("redirect:/memberList");
			mav.addObject("memberList",fId);
		}
		
		return mav;
	}
    
    public ModelAndView memberDelete(String fId) {
		// TODO Auto-generated method stub
		int result = dao.memberDelete(fId);
		if(result > 0) {
			mav.setViewName("redirect:/memberList");
			mav.addObject("memberList",fId);
			
		}else {
			mav.setViewName("redirect:/memberList");
			mav.addObject("memberList",fId);
		}
		
		return mav;
	}

	public ModelAndView memberLogin(TmemberDTO fMember) {
		// TODO Auto-generated method stub
		System.out.println("[2] 로그인"+fMember);
		String memberId = dao.memberLogin(fMember);
		
		if(memberId!=null) {
			mav.setViewName("index");
			session.setAttribute("loginId", memberId);
		}else {
			mav.setViewName("loginForm");
		}
		
		System.out.println("[4] 로그인"+fMember);
		
		return mav;
	}

}

 

MemberMapper.xml

<?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">
<mapper namespace="Fmember">

	<insert id="regist" parameterType="member">
		INSERT INTO MEMBER VALUES(#{fId},#{fPw},#{fName},#{fBirth},#{fGender},#{fPhone},#{fAddr},#{fEmail})
	</insert>
	
	<select id="list" resultType="member">
		SELECT * FROM MEMBER
	</select>
	
	<select id="info" parameterType="String" resultType="member">
		SELECT * FROM MEMBER WHERE FID = #{fId}
	</select>
	
	<update id="modify" parameterType="member">
		UPDATE MEMBER SET FPW = #{fPw}, FNAME = #{fName}, FBIRTH = #{fBirth}, FGENDER = #{fGender}, FPHONE = #{fPhone}, FADDR = #{fAddr}, FEMAIL = #{fEmail} WHERE FID = #{fId}
	</update>
    
	<delete id="del">
		DELETE FROM MEMBER WHERE FID = #{fId}
	</delete>
    
	<select id="login" parameterType="member" resultType="String">
		SELECT FID FROM MEMBER WHERE FID = #{fId} AND FPW =#{fPw}
	</select>
	

</mapper>

 

 

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
	<typeAlias type="com.icia.fmember.dto.FmemberDTO" alias="member"/>
	<!-- com.icia.member.dto.MemberDTO 대신 alias 별칭으로 member로 사용한다고 변경 -->
</typeAliases>

</configuration>

 

index.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>Insert title here</title>
</head>
<body>
	<h1>Index페이지</h1>

	<c:choose>
		<c:when test="${not empty loginId}">
			<p>${loginId}님! 안녕하세요!</p>
			<button onclick="location.href='logout'">로그아웃</button>
		</c:when>
		<c:otherwise>
			<p>안녕하세요!</p>
				
	
			<!-- 회원가입 페이지로 이동하는 방법1 -->
			<!--<a href="joinForm"><p>회원가입1</p></a> -->
			

			<!-- 회원가입 페이지로 이동하는 방법2 -->
			<button onclick="location.href='registForm'">회원가입</button>
			<br/>
			<br/>			
			
			<!-- 회원목록 페이지로 이동하는 방법3 -->
			<input id="btn" type="button" value="회원목록">
			<br/>
			<br/>
						
			<!-- include예제 확인하기 -->
			<!-- <button onclick="location.href='directive'">include</button> -->
			
			<button onclick="location.href='loginForm'">로그인</button>
			<br/>
			<br/>
		</c:otherwise>
	</c:choose>
	
	
</body>
<script type="text/javascript">
	const btn = document.querySelector("#btn");
	function mList(){
		location.href="memberList";
	}
	btn.addEventListener("click",mList); 
	
	
</script>
</html>

 

registForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>회원가입 페이지</h1>
	
	
	<!-- action : Controller로 보낼 주소 -->
	<!-- name 값은 DTO와 일치해야 한다. -->
	<form action="memberRegist" method="POST">
		<p>아이디 : <input type="text" name="fId"/></p>
		<p>비밀번호 : <input type="password" name="fPw"/></p>
		<p>이름 : <input type="text" name="fName"/></p>
		<p>생년월일  : <input type="date" name="fBirth"/></p>
		<p>성별  : 여자<input type="radio" name="fGender" value="여자"/>
				  남자<input type="radio" name="fGender" value="남자"/>			
		</p>
		<p>연락처: <input type="text" name="fPhone"/></p>
		<p>주소: <input type="text" name="fAddr"/></p>
		<p>이메일: <input type="text" name="fEmail"/></p>
		<input type="submit" value="가입"/>
		<input type="reset" value="다시작성"/>
	</form>
</body>
</html>

 

modifyForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>회원가입 페이지</h1>
	
	
	<!-- action : Controller로 보낼 주소 -->
	<!-- name 값은 DTO와 일치해야 한다. -->
	<form action="memberModify" method="POST">
		<p>아이디 : ${modi.fId}</p>
		<input type="hidden" name="fId" value="${modi.fId}"/>
		<p>비밀번호 : <input type="password" name="fPw"/></p>
		<p>이름 : <input type="text" name="fName" placeholder="${modi.fName}"/></p>
		<p>생년월일  : <input type="date" name="fBirth" placeholder="${modi.fBirth}"/></p>
		<p>성별  : 여자<input type="radio" name="fGender" value="여자"/>
				  남자<input type="radio" name="fGender" value="남자"/>			
		</p>
		<p>연락처: <input type="text" name="fPhone" placeholder="${modi.fPhone}"/></p>
		<p>주소: <input type="text" name="fAddr" placeholder="${modi.fAddr}"/></p>
		<p>이메일: <input type="text" name="fEmail" placeholder="${modi.fEmail}"/></p>
		<input type="submit" value="정보수정"/>
		<input type="reset" value="다시작성"/>
	</form>
</body>
</html>

 

 

memberList.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>
<style>
table, tr, td, th {
	border: 1px solid;
	border-collapse: collapse;
	padding: 5px;
}

@media all and (min-width: 768px) and (max-width: 1024px) {
    .regist-box > div > input{
        font-size: 25px;
    }
    .regist-box > :nth-child(5){
        margin-left: -90px;
    }
}
@media all and (min-width: 1025px) {
    .regist-box > div > input{
        font-size: 35px;
    }
    .regist-box > :nth-child(5){
        margin-left: -130px;
    }

}


body,p{
    padding: 0px auto;
    margin: 0px auto;
}

.submit button{
    width: 142px;

}

.userid{
    ime-mode:disabled;
}
.modal{
    /* display: none; Hidden by default */
    position: fixed; /* Stay in place */
    z-index: 1; /* Sit on top */
    left: 0;
    top: 0;
    width: 100%; /* Full width */
    height: 100%; /* Full height */
    overflow: auto; /* Enable scroll if needed */
    background-color: rgb(0,0,0); /* Fallback color */
    background-color: rgba(0,0,0,0.5); /* Black w/ opacity */
}

#message-box{
    /* background-color: #fefefe;
    border: 1px solid black;
    width: 100px;
    height: 100px;
    justify-content: center;
    align-items: center;
     */
     display: flex;
     background-color: #fefefe;
     margin: 15% auto;
     padding: 20px;
     border: 1px solid darkgray;
     width: 300px;
     border-radius: 7px;

     align-items: center;
     justify-content: center;
     flex-direction: column;
}

#popup-button{
    width: 100px;
    height: 35px;
	display: inline;

}
#popup-button2{
    width: 100px;
    height: 35px;

}

</style>
</head>
<body>
	<content class="regist-frame">
		<table>
			<tr>
				<th>아이디</th>
				<th>이름</th>
				<th>생년월일</th>
				<th>수정</th>
				<th>삭제</th>
			</tr>
	
	
			<!-- c태그
			 taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" 추가해야 사용가능 -->
	
			<c:forEach var="mem" items="${memberList}">
				<!-- memberList의 크기만큼 forEach 돌아감  var는 memberList의 이름을 mem으로 변경해서 사용가능-->
				<!-- service에서 mav.addObject("jsp에서 사용할 이름 ", jsp에서 사용할 데이터);로 설정해준
				 이름으로 items="{jsp에서 사용할 이름}"으로 사용한다.
			 -->
				<tr>
					<td><a href="memberInfo?fId=${mem.fId}">${mem.fId}</a></td>
					<td>${mem.fName}</td>
					<td>${mem.fBirth}</td>
					
					<td><button
							onclick="popUpMessage('${mem.fId}','modiBtn')">수정</button></td>
					<%-- <td><button
							onclick="location.href='memberDelete?fId=${mem.fId}'">삭제</button></td> --%>
					<td><button
							onclick="popUpMessage('${mem.fId}','delBtn')">삭제</button></td>
				</tr>
			</c:forEach>
		</table>
	</content>
</body>
<script type="text/javascript">
const modal = document.createElement("div");
const messageBox = document.createElement("div");
const messageBtn = document.createElement("button");
const messageBtn2 = document.createElement("button");
const message = document.createElement("span");
const content = document.querySelector(".regist-frame");


/* modiBtn.addEventListener("click",()=>{

});

delBtn.addEventListener("click",()=>{

});
  */



function popUpMessage(id,name){


	modal.className = "modal";
	messageBox.id = "message-box";
	messageBtn.id = "popup-button";
	messageBtn2.id = "popup-button2";
	
	//messageBtn.setAttribute("value","확인");
	messageBtn.innerText = "확인";
	messageBtn2.innerText = "취소";
	
	content.appendChild(modal); 
	modal.appendChild(messageBox);
	messageBox.appendChild(message);
	messageBox.appendChild(messageBtn);
	messageBox.appendChild(messageBtn2);

	if(name=='modiBtn'){
		message.innerText = "수정 하시겠습니까?";
		messageBtn.addEventListener("click",()=>location.href="modifyForm?fId="+id);
		messageBtn2.addEventListener("click",()=>modal.remove());
	}else if(name=='delBtn'){
		message.innerText = "삭제 하시겠습니까?";	
		messageBtn.addEventListener("click",()=>location.href="memberDelete?fId="+id);
		messageBtn2.addEventListener("click",()=>modal.remove());
	}

	

}

</script>
</html>

 

memberInfo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원목록 페이지</title>
<style>
	table,tr,td,th{
		border : 1px solid;
		border-collapse: collapse;
		padding: 5px;
	}
</style>
</head>
<body>

	<table>
		<tr>
			<th>아이디</th>		
			<td>${view.fId}</td>	
		</tr>
		<tr>
			<th>비밀번호</th>
			<td>${view.fPw}</td>
		
		</tr>
		<tr>
			<th>이름</th>
			<td>${view.fName}</td>
		</tr>
		<tr>
			<th>생년월일</th>
			<td>${view.fBirth}</td>
		</tr>
		<tr>
			<th>성별</th>
			<td>${view.fGender}</td>
		</tr>
		<tr>
			<th>연락처</th>
			<td>${view.fPhone}</td>
		</tr>
		<tr>
			<th>주소</th>
			<td>${view.fAddr}</td>
		</tr>
		
		<tr>
			<th>이메일</th>
			<td>${view.fEmail}</td>
		</tr>
	</table>


</body>
</html>

 

메인페이지

Create

회원가입 페이지

Read

회원목록 페이지
로그인 페이지

로그인 기능은 HttpSession을 @Autowired로 연결해  처리해줍니다.

Service에서 session.setAttribute로 값을 설정해준 다음

c태그 사용방법은 jsp파일 위에 taglib를 선언해줍니다.

c태그는 jsp 지시어중 하나로 Taglib 지시어에 속합니다.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

Taglib 지시어
- ex) <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
- prefix : 어떤 타입의 태그 라이브러리를 작성할 것인가.
- uri : 실제 존재하고 있는 TLD파일의 위치정보
- TLD파일 : 커스텀 태크 정보를 담고 있는 라이브러리 파일

(1) 출력태그 : <c:out>
(2) 변수설정 태그 : <c:set>
(3) 삭제태그 : <c:remove>
(4) 예외처리 태그 : <c:catch>
(5) 조건처리 태그 : <c:if>, <c:choose>, <c:when>, <c:otherwise>
(6) 반복처리 태그 : <c:foreach>
(7) 페이지처리 태그 : <c:import>, <c:redirect>, <c:param>

 

c:choose는 c:when과 c:otherwise와 같이 사용되며

<c:choose>

   <c:when> // if와 같음

 

   </c:when>

 

   <c:otherwise> // else와 같음

 

   </c:otherwise>

</c:choose>

 

같은 방식으로 사용됩니다.

 

 

 

 

 

 

 

Update

alter대신 modal창을 직접 만들어 사용하였습니다.

 

 

Delete

Delete