본문 바로가기
Project/레시피 프로젝트

[Final Project] 마이페이지 기능 구현 정리

by 히앤님 2022. 1. 14.
반응형
SMALL

[구현 기능 요약]

1. 회원정보 CRUD

  1. 회원가입 - 아이디 중복확인(x) / 회원가입규정 / (null 상태로 submit 하면 에러페이지)
  2. 로그인 - (null 상태로 submit 하면 그냥 그대로)
  3. 회원가입 - 로그인 이동 링크
  4. 회원정보수정 - 아이디 변경불가 / 비밀번호 주민번호 비밀번호화로 매번 다시 입력해야함. / 사진 꼭 첨부 필수 / 입력 빈칸 다 채우게 되어있음 / 이메일 @ 필요
  5. 로그아웃 - 세션 나가기 가능
  6. 회원탈퇴 - 데이터없음으로 업데이트 걸었으나 1회성으로만 가능

 

2. 마이페이지 /쉐프페이지 CRUD

  1. 정보count - 숫자 세기 완료 / 단, 별점 없으면 에러남.
  2. 회원정보출력 - 세션scope로 잘 가져옴 / 업데이트가 늦음
  3. 프로필 사진 수정 - 다시 로그인해야 적용됨
  4. 레시피 목록 출력 - 페이징 걸고 번호만 뺌. 따라서 최근 5개만 출력됨
  5. 클래스는 몇개 안할 것 같아서 페이징 안걸음
  6. (쉐프)클래스 - 쉐프 클래스는 자기가 운영하는 클래스로, 각각의 승인 상태가 표시됨.

 

3. 내 레시피목록 / 내 스크랩목록 / 나에게 달린 리뷰 목록

  1. 내 레시피 - 메뉴바와 함께 사진이 나오고 페이징 처리됨. 클릭하면 이동
  2. 내 스크랩 - 메뉴바없음 / 클릭하면 이동됨 / (메뉴바 하면 css 꼬임)
  3. 내 코멘트 - 그냥 rowlist로 쭉 찍힘. 최대 10개까지 보여지고 페이징처리

4. 기타 기능 구현

  1. contact_us - 아이콘 통일하게 삽입, 회사 위치 지도 삽입
  2.  

1. 회원정보 CRUD

1) Membership - 회원가입 / 로그인 / 아이디중복확인(x) / 회원정보수정 / 로그아웃 / 회원탈퇴(x)

MembershipVO / MembershipMapper.xml / MembershipService / MembershipServiceImpl / MembershipDAO/ MembershipDAOImpl  / MembershipController

더보기
더보기

- MembershipVO

package kr.co.ikosmo.mvc.vo;
/* 멤버테이블
MEM_NO	NUMBER(5,0)
MEM_ID	VARCHAR2(15 BYTE)
MEM_PWD	VARCHAR2(15 BYTE)
MEM_NAME	VARCHAR2(15 BYTE)
MEM_NICKNAME	VARCHAR2(20 BYTE)
MEM_JUMINNUM	CHAR(13 BYTE)
MEM_EMAIL	VARCHAR2(30 BYTE)
MEM_PHONE	CHAR(11 BYTE)
MEM_REGDATE	DATE
MEM_PIC	VARCHAR2(90 BYTE)
MEM_GRADE_NO	VARCHAR2(10 BYTE)
KIND_TAG_NO	NUMBER(2,0)
*/

import java.io.File;
import java.io.IOException;

import org.springframework.web.multipart.MultipartFile;

public class MembershipVO {
	private int mem_no;
	private String mem_id,mem_pwd,mem_name,mem_nickname,
	mem_juminnum,mem_email,mem_phone,mem_regdate,mem_pic,mem_grade_no;
	
	
	
	
	

	
	/* 프로필 사진 업로드를 위한 파일 업로드 */
	MultipartFile file;
	
	public MultipartFile getFile() {
		return file;
	}
	public void setFile(MultipartFile file) {
		this.file = file;
		
		// 업로드 파일 접근
		if(! file.isEmpty()) {
			this.mem_pic = file.getOriginalFilename();
			File f = new File("C:\\Users\\Kosmo_02\\Downloads\\타일즈완료\\RecipePrj_01\\RecipePrj_01\\WebContent\\resources\\image\\member_upload\\"+mem_pic);

			try {
				file.transferTo(f);
			} catch (IllegalStateException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}
	
	/* 프로필 사진 업로드를 위한 파일 업로드 */
	
	
	
	
	
	
	
	public int getMem_no() {
		return mem_no;
	}
	public void setMem_no(int mem_no) {
		this.mem_no = mem_no;
	}
	public String getMem_id() {
		return mem_id;
	}
	public void setMem_id(String mem_id) {
		this.mem_id = mem_id;
	}
	public String getMem_pwd() {
		return mem_pwd;
	}
	public void setMem_pwd(String mem_pwd) {
		this.mem_pwd = mem_pwd;
	}
	public String getMem_name() {
		return mem_name;
	}
	public void setMem_name(String mem_name) {
		this.mem_name = mem_name;
	}
	public String getMem_nickname() {
		return mem_nickname;
	}
	public void setMem_nickname(String mem_nickname) {
		this.mem_nickname = mem_nickname;
	}
	public String getMem_juminnum() {
		return mem_juminnum;
	}
	public void setMem_juminnum(String mem_juminnum) {
		this.mem_juminnum = mem_juminnum;
	}
	public String getMem_email() {
		return mem_email;
	}
	public void setMem_email(String mem_email) {
		this.mem_email = mem_email;
	}
	public String getMem_phone() {
		return mem_phone;
	}
	public void setMem_phone(String mem_phone) {
		this.mem_phone = mem_phone;
	}
	public String getMem_regdate() {
		return mem_regdate;
	}
	public void setMem_regdate(String mem_regdate) {
		this.mem_regdate = mem_regdate;
	}
	public String getMem_pic() {
		return mem_pic;
	}
	public void setMem_pic(String mem_pic) {
		this.mem_pic = mem_pic;
	}
	
	public String getMem_grade_no() {
		return mem_grade_no;
	}
	public void setMem_grade_no(String mem_grade_no) {
		this.mem_grade_no = mem_grade_no;
	}

}

- MembershipMapper.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="membership">

<!-- member_info 테이블
	private int mem_no;
	private String mem_id,mem_pwd,mem_name,mem_nickname,
	mem_juminnum,mem_email,mem_phone,mem_regdate,mem_pic;
 -->

<!-- 로그인 -->
<select id="memberlogin" parameterType="membership" resultType="membership">
      SELECT * 
        FROM member_info
       WHERE mem_id = #{mem_id}
         AND mem_pwd = #{mem_pwd}
</select>


<!-- 회원가입 -->
<insert id="memberinsert" parameterType="membership">
		INSERT INTO member_info 
		VALUES(member_info_seq.nextval,#{mem_id},#{mem_pwd}, #{mem_name},#{mem_nickname},
				#{mem_juminnum},#{mem_email}, #{mem_phone},sysdate,0,0,0,0,10)
</insert>


<!-- 아이디체크 -->
<select id="idchk" resultType="int" parameterType="String">
   select count(*) cnt from member_info where mem_id=#{mem_id}
</select>
	<!--  로그인 회원가입 완료  -->


	
<!-- 회원정보수정 -->   	
	<update id="updateMember" parameterType="membership">
		UPDATE member_info SET 
		mem_name=#{mem_name}, mem_nickname = #{mem_nickname} ,
 	   mem_email = #{mem_email}, mem_phone =  #{mem_phone},
 	   mem_pwd = #{mem_pwd},mem_juminnum = #{mem_juminnum}, <if test="mem_pic != null">mem_pic = #{mem_pic}</if>		 
		WHERE mem_id=#{mem_id}
	</update> 
	
	
<!-- 회원탈퇴 -->
<update id="memberDelete" parameterType="membership">
      	UPDATE member_info SET 
		mem_id= '데이터 없음', mem_name='데이터 없음', mem_nickname = '데이터 없음',
 	   mem_email = '데이터 없음', mem_phone =  '데이터 없음',
 	   mem_pwd = '데이터 없음',mem_juminnum = '데이터 없음', mem_pic = '데이터 없음'
		WHERE mem_no=#{mem_no}
	  	  	  	   
</update>	
	
	
</mapper>  

- MembershipService

package kr.co.ikosmo.mvc.service;

import kr.co.ikosmo.mvc.vo.MembershipVO;
import kr.co.ikosmo.mvc.vo.ReviewVO;



public interface MembershipService {

	public int insertmembership (MembershipVO vo); //회원가입
	
	public MembershipVO loginmembership( MembershipVO vo);//로그인

	public void updateMember(MembershipVO vo); //회원정보수정
	
	public void memberDelete(MembershipVO vo, Integer mem_no); //회원탈퇴
	
	//----------------------------------------------------------------
	
	
}

- MembershipServiceImpl

package kr.co.ikosmo.mvc.service;

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

import org.springframework.stereotype.Service;

import kr.co.ikosmo.mvc.dao.MembershipDAOImpl;
import kr.co.ikosmo.mvc.dao.MypageDAOImple;
import kr.co.ikosmo.mvc.vo.MembershipVO;



@Service("MembershipService")
public class MembershipServiceImpl implements MembershipService {
		
		@Autowired
		MembershipDAOImpl membershipDAOImpl;
		
		//회원가입
		@Override
		public int insertmembership(MembershipVO vo) {
			return membershipDAOImpl.memberInsert(vo);
		}
		
		//로그인
		@Override
		public MembershipVO loginmembership(MembershipVO vo) {
			return membershipDAOImpl.memberlogin(vo);
		}
				
		
		//회원정보수정
		@Override
		public void updateMember(MembershipVO vo) {
			membershipDAOImpl.updateMember(vo); 
		}
		
		
		//회원탈퇴
		@Override
		public void memberDelete(MembershipVO vo, Integer mem_no){
			membershipDAOImpl.memberDelete(vo, mem_no);
	}




		//로그인 회원가입 완료 --------------------------------------
		
}

- MembershipDAO

package kr.co.ikosmo.mvc.dao;

import java.util.List;

import kr.co.ikosmo.mvc.vo.MembershipVO;

public interface MembershipDAO {
	
	
	MembershipVO memberlogin(MembershipVO vo);
	public int memberInsert(MembershipVO vo);
	//로그인 회원가입 완료 -------------------------------------------------------
	public int memberIdchk(String mem_id); // 아이디 중복 처리 

	public void updateMember(MembershipVO vo);//회원정보수정

	public void memberDelete(MembershipVO vo, Integer mem_no);	// 회원 탈퇴
}

- MembershipDAOImpl

package kr.co.ikosmo.mvc.dao;

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

import kr.co.ikosmo.mvc.vo.MembershipVO;

@Repository("MembershipDAO")
public class MembershipDAOImpl implements MembershipDAO {
	
	
	@Autowired 
	private SqlSessionTemplate ss;
		

	
	@Override
	public MembershipVO memberlogin(MembershipVO vo) {
		MembershipVO mv = ss.selectOne("membership.memberlogin", vo);
		return mv;
	}

	@Override
	public int memberInsert(MembershipVO vo) {
		return ss.insert("membership.memberinsert", vo);
	}
	//로그인 회원가입 완료 -------------------------------------------------------

	@Override
	public int memberIdchk(String mem_id) {
		return ss.selectOne("membership.idchk",mem_id);
	}
	
	//회원정보수정
	@Override
	public void updateMember(MembershipVO vo) {
		ss.update("membership.updateMember", vo); 
	}
	
	
	//회원탈퇴
	@Override
	public void memberDelete(MembershipVO vo, Integer mem_no){
		ss.update("membership.memberDelete", mem_no);
		
	}

	
}

- MembershipController

package kr.co.ikosmo.mvc.controller;

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.ModelAttribute;
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.servlet.ModelAndView;

import kr.co.ikosmo.mvc.dao.MembershipDAOImpl;
import kr.co.ikosmo.mvc.service.MembershipService;
import kr.co.ikosmo.mvc.vo.MembershipVO;


@Controller
public class MembershipController {
	@Autowired
	private MembershipService membershipService;
	@Autowired
	private MembershipDAOImpl membershipDAOImpl;

	
	// 로그인 세션 매핑
	@RequestMapping("/login.do")
	public String login(MembershipVO vo, HttpSession session ) {
		MembershipVO result = membershipService.loginmembership(vo);
			if(result == null) {
				return "tiles/login";
			}else {
				
				//정보 출력을 위한 세션 매핑
				session.setAttribute("memNo", result.getMem_no()); //회원번호
				session.setAttribute("memId", result.getMem_id()); //회원id
				//session.setAttribute("memPwd", result.getMem_pwd()); //회원pwd
				session.setAttribute("memName", result.getMem_name()); //회원이름
				session.setAttribute("memNickname", result.getMem_nickname()); //회원별명
				//session.setAttribute("memJuminnum", result.getMem_juminnum()); //회원주민번호
				session.setAttribute("memEmail", result.getMem_email()); //회원메일
				session.setAttribute("memPhone", result.getMem_phone()); //회원전화번호
				session.setAttribute("memPic", result.getMem_pic()); //회원사진
				session.setAttribute("memGrade_no", result.getMem_grade_no()); //쉐프또는 일반인
			 
			}
			return "aaa/bbb/index"; //마이페이지에 로그인 이름 뜨는지 확인하기
	}

	
	// 회원가입 매핑
	@RequestMapping("/register")
	public ModelAndView membership(MembershipVO vo) {
		int result = membershipService.insertmembership(vo);
		ModelAndView mv = new ModelAndView();
		mv.setViewName("aaa/bbb/index");
		return mv;   //회원가입 되면 index로 이동
	}
	
	
	
	//로그인 회원가입 완료 -------------------------------------------------------
	
	
	//아이디 중복 확인을 구현합시다. 
	@RequestMapping("idChk")
	public String idchk(String mem_id, Model m) {
		
		// Dao와 연결해서 아이디값이 존재하면 1, 없으면 0 을 반환한다.
		int cnt = membershipDAOImpl.memberIdchk(mem_id);
		//Model을 사용해서 View로 값을 전달한다. 
		m.addAttribute("cnt", cnt);
		
		return "tiles/idChk";
		
	}
	
	//아이디 중복체크 완료 -------------------------------------------------------
	
	// 회원정보수정
	@RequestMapping("memberupdate")
	public String registerUpdate(MembershipVO vo){
		
		membershipService.updateMember(vo);
		
		return "tiles/Mypage";
	}

	
	// 로그아웃
	@RequestMapping(value = "/logout", method = RequestMethod.GET)
	public String logout(HttpSession session) throws Exception{
		
		session.invalidate();
		
		return "redirect:/index";
	}
	
	//업데이트 로그아웃 완료 -----------------------------------------------------
	
	// 회원 탈퇴 -> 회원정보를 없음 처리한다.
	@RequestMapping("memberDelete")
	public String registerDelete(MembershipVO vo, HttpSession session){
		

		Integer mem_no = (Integer)session.getAttribute("memNo");
		  System.out.println("회원탈퇴시 사용되는 mem번호 : "+ mem_no); //콘솔확인
		
		  membershipDAOImpl.memberDelete(vo, mem_no); //delete 지만 없음 처리로 업데이트한 것.
		  
		  session.invalidate(); //회원탈퇴 누르면 로그인도 함께 됨
		  
		
		return "redirect:/index";
	}
}







- 프로필 사진의 경우 회원가입이 아닌 회원정보수정에서만 업데이트 가능(null일 경우 에러남 -> 해결방안)

- 프로필사진 업데이트를 위한 info_change.jsp 의 경우 vo에 등록한 파일 업로드 기능 구현을 위해 name값은 "file"로 한다. / 그 외에 상단 form 태그에 " enctype="multipart/form-data" 추가.

 

2) jsp - 회원가입, 로그인, 회원정보수정, 마이페이지의 로그아웃, 회원탈퇴 버튼

signup.jsp / login.jsp / info_chage.jsp / Mypage.jsp(일부)

더보기
더보기

- signup.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>signup</title>
<!--   <base href=""> -->
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="./resources/img/favicon.ico">

<script type="text/javascript" src="./resources/js/jquery-1.7.1.js"></script>
<script  src="./resources/js/Membership.js"></script>


<link rel="stylesheet" type="text/css" href="./resources/css/header.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/main.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/style.css" media="all" />

<link rel="stylesheet" type="text/css" href="./resources/css/plugins/magnific-popup.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick-theme.css" media="all" />

<!-- 
<link rel="stylesheet" type="text/css" href="./resources/css/primary-skin.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/bootstrap.min.css" media="all" /> 
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/animate.min.css" media="all" />



<link rel="stylesheet" type="text/css" href="./resources/css/plugins/magnific-popup.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick-theme.css" media="all" />


-->


  
  <!--********** 【 js 링크 걸기 】********** -->

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.min.js"></script>
<script src="./resources/js/main.js" type="text/javascript" charset="utf-8"></script>

<script src="./resources/js/plugins/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>



<script src="./resources/js/plugins/isotope.pkgd.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.countdown.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.magnific-popup.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.slimScroll.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.steps.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery-3.4.1.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/popper.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/slick.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/waypoint.js" type="text/javascript" charset="utf-8"></script>
  
  
<!--  
  -->
  
  
</head>
<body>
 
  
<app-root>
  
<!-- Login FormStart -->
  <section class="section auth-section bg-cover" style="background-image: url('assets/img/bg/3.jpg')">
    <div class="container">
      <form name = "userinput" id="userinput" class="auth-form light-bg" action = "register" method="post" style="background-image: url('assets/img/bg/5.jpg')">
        <h1>Sign Up</h1>
        <div class="form-group">
          <label>이름</label>
          <input type="text" class="form-control" placeholder="이름" name="mem_name" value="">
        </div>
        <div class="form-group">
          <label>별명</label>
          <input type="text" class="form-control" placeholder="별명" name="mem_nickname" value="">
        </div>
        <div class="form-group">
          <label>ID</label>
          <input type="text" class="form-control" placeholder="ID" name="mem_id" id="mem_id" value="">
        </div>
         <td>    	
		<input type="button" value="중복확인" id="idChkBtn" style="width: 150px; font-size: 10px; height: 30px;">		
		<span class="box" id="target"></span>
		<td>		       
        <div class="form-group">
          <label>Password</label>
          <input type="password" class="form-control" placeholder="Password" name="mem_pwd" value="">
        </div>
        <div class="form-group">
          <label>주민번호</label>
          <input type="text" class="form-control" placeholder="주민번호" name="mem_juminnum" value="">
        </div>        
        <div class="form-group">
          <label>Email</label>
          <input type="email" class="form-control" placeholder="Email Address" name="mem_email" value="">
        </div>
        <div class="form-group">
          <label>핸드폰번호</label>
          <input type="text" class="form-control" placeholder="핸드폰번호" name="mem_phone" value="">
        </div>


        <div class="auth-controls form-group">
          <div class="custom-control custom-checkbox">
            <input type="checkbox" class="custom-control-input" id="rememberMe">
            <label class="custom-control-label fw-400" for="rememberMe">회원가입 규정에 <a href="https://kto.visitkorea.or.kr/kor/helpDesk/policy/memberPolicy.kto" onclick="window.open(this.href,'_blank','toolbar=no,scrollbars=yes'); return false;" class="btn-link">동의합니다.</a> </label>
          </div>
        </div>
        <div class="form-group">
          <button type="submit" class="btn-custom primary btn-block">sign up</button>
        </div>
        <p class="form-group text-center">계정이 있으십니까? <a href="login" class="btn-link">로그인</a> </p>
      </form>
    </div>
  </section>
  <!-- Login Form End -->

  
 </app-root> 
 
 <!-- 제이쿼리를 가져오자. -->
   <!-- // jQury에서 id => #, class => . Element => E-->
   <script src = "http://code.jquery.com/jquery-3.5.1.min.js"></script>
   <!-- 콘솔창에 띄워보자. 크롬 F12 누르기 -->
   <script>
   
	    $(function(){
		//확인 다 했으니 버튼에 기능을 입혀보자.
		      //jQury에서 id => #, class => . Element => E
		      $('#idChkBtn').click(function(){
		    	 
		         // 아이디 값이 있는 지 없는지 if문 확인 return
		      $.ajax({
		    	  url:'idChk?mem_id=' + $('#mem_id').val(),
		        success: function(data){
		            //console.log(data);
		            
		            //$.trim : 공백제거 함수
				   //== 안씀. === 쓴다.
		            var msg = '';
		            if($.trim(data)==='1'){
		               msg = "<span style='color:red'>중복된 아이디입니다.</span>";
		            }
		            else{
		               msg = "<span style='color:blue'>사용가능한 아이디입니다.</span>";
		               }
		               //console.log(msg)
		               $('#target').html(msg);
		            
		            }
		        });
		      });
		    
	});
   
   </script>
 
</body>
</html>

 - login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>login</title>
<!--   <base href=""> -->
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="./resources/img/favicon.ico">


<link rel="stylesheet" type="text/css" href="./resources/css/header.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/main.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/style.css" media="all" />

<link rel="stylesheet" type="text/css" href="./resources/css/plugins/magnific-popup.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick-theme.css" media="all" />

<!-- 
<link rel="stylesheet" type="text/css" href="./resources/css/primary-skin.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/bootstrap.min.css" media="all" /> 
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/animate.min.css" media="all" />


<link rel="stylesheet" type="text/css" href="./resources/css/plugins/magnific-popup.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick-theme.css" media="all" />
<!--

-->


  
  <!--********** 【 js 링크 걸기 】********** -->

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.min.js"></script>
<script src="./resources/js/main.js" type="text/javascript" charset="utf-8"></script>

<script src="./resources/js/plugins/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>



<script src="./resources/js/plugins/isotope.pkgd.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.countdown.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.magnific-popup.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.slimScroll.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.steps.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery-3.4.1.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/popper.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/slick.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/waypoint.js" type="text/javascript" charset="utf-8"></script>
  
  
<!--  
  -->
  
  
</head>
<body>
 
  
  <app-root>
  

<!-- Login FormStart -->
  <section class="section auth-section bg-cover" style="background-image: url('')">
    <div class="container">
      <form name="form" class="auth-form light-bg" method="post" action ="login.do" style="background-image: url('')">
        <h1>Login</h1>
        <div class="form-group">
          <label>ID</label>
          <input type="text" class="form-control" placeholder="ID" name="mem_id" value="">
        </div>
        <div class="form-group">
          <label>Password</label>
          <input type="password" class="form-control" placeholder="Password" name="mem_pwd" value="">
        </div>
        <div class="auth-controls form-group">
<!--           <div class="custom-control custom-checkbox">
            <input type="checkbox" class="custom-control-input" id="rememberMe">
            <label class="custom-control-label fw-400" for="rememberMe">Remember Me</label>
          </div> -->
<!--           <a href="info_change" class="btn-link fw-400">Forgot Password?(수정예정)</a>
        </div> -->
        <div class="form-group">
          <button type="submit" id="loginSubmit" name="loginSubmit" class="btn-custom primary btn-block">login</button>
        </div>
        <p class="form-group text-center">계정이 없으십니까? <a href="signup" class="btn-link">회원가입</a> </p>
      </form>
    </div>
  </section>
  <!-- Login Form End -->
  
 </app-root> 
 
</body>
<script>
	window.onload = function(){
		document.getElementById('loginSubmit').onclick = check;	
	}
	
	function check(){
		if(document.form.MEM_ID.value==""){
			alert("ID를 입력하세요.")
			document.form.MEM_ID.focus();
			return false;
		}
		
		if(document.form.MEM_PWD.value==""){
			alert("비밀번호를 입력하세요.")
			document.form.MEM_PWD.focus();
			return false;
		}
		document.form.submit();//전송
		
	}
</script>
</html>

 - info_change.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>회원정보수정</title>
<!--   <base href=""> -->
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="./resources/img/favicon.ico">
  
<!-- 인포 추가 -->  
 <link href="/maxcdn.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<link rel="stylesheet" type="text/css" href="./resources/css/info_change.css" media="all" />
<script src="./resources/js/info_change.js" type="text/javascript" charset="utf-8"></script>

<!-- 인포 추가끝 -->

<link rel="stylesheet" type="text/css" href="./resources/css/header.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/main.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/style.css" media="all" />


 

<!-- 
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/bootstrap.min.css" media="all" /> 

 
<link rel="stylesheet" type="text/css" href="./resources/css/primary-skin.css" media="all" />

<link rel="stylesheet" type="text/css" href="./resources/css/plugins/animate.min.css" media="all" />



<link rel="stylesheet" type="text/css" href="./resources/css/plugins/magnific-popup.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick-theme.css" media="all" />
<!--

-->


  
  <!--********** 【 js 링크 걸기 】********** -->

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.min.js"></script>
<script src="./resources/js/main.js" type="text/javascript" charset="utf-8"></script>

<script src="./resources/js/plugins/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>



<script src="./resources/js/plugins/isotope.pkgd.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.countdown.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.magnific-popup.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.slimScroll.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.steps.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery-3.4.1.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/popper.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/slick.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/waypoint.js" type="text/javascript" charset="utf-8"></script>
  
  
<!--  
  -->
  
  
</head>
<body>
 
  
  <app-root>
  

<!-- info_change Start -->

<div class="container" style="margin-top: 1em;">
    <!-- Sign up form -->
	 <form name="form" method="post" action ="memberupdate"  enctype="multipart/form-data">
        <!-- Sign up card -->
        <div class="card person-card">
            <div class="card-body">
                <!-- Sex image -->
                <img id="img_sex" class="person-img"
                    src="https://visualpharm.com/assets/217/Life%20Cycle-595b40b75ba036ed117d9ef0.svg">
                <h2 id="who_message" class="card-title">회원정보수정</h2>
                <!-- First row (on medium screen) -->
               <div class="row">
                     <div class="form-group col-md-2">
						<input id="mem_id" name="mem_id" value="${sessionScope.memId}" type="text" class="form-control" readonly="readonly" >
                    </div>

                    <div class="form-group col-md-5">
                        <input id="mem_name"  name="mem_name" value="${sessionScope.memName}" type="text" class="form-control" placeholder="Name" required>
                        <div id="first_name_feedback" class="invalid-feedback">
                            
                        </div>
                    </div>
                    <div class="form-group col-md-5">
                        <input id="mem_nickname"  name="mem_nickname" value="${sessionScope.memNickname}" type="text" class="form-control" placeholder="Nickname" reqired>
                        <div id="last_name_feedback" class="invalid-feedback">
                            
                        </div>
                    </div>
                </div>
            </div>
        </div>
        
        <div class="row">
            <div class="col-md-6" style="padding=0.5em;">
                <div class="card">
                    <div class="card-body">
                        <h2 class="card-title">연락처수정</h2>
                        <div class="form-group">
                            <label for="email" class="col-form-label">Email</label>
                            <input type="email" class="form-control" id="mem_email" name="mem_email"  value="${sessionScope.memEmail}" placeholder="example@gmail.com" required>
                            <div class="email-feedback">
                            
                            </div>
                        </div>
                        <div class="form-group">
                            <label for="tel" class="col-form-label">Phone number</label>
                            <input type="text" class="form-control" id="mem_phone" name="mem_phone"  value="${sessionScope.memPhone}" placeholder="01000000000" required>
                            <div class="phone-feedback">
                            
                            </div>
                        </div>
<!--                         <div class="form-group">
                            <label for="tel" class="col-form-label">Address</label>
                            <input type="text" class="form-control" id="addr" placeholder="서울특별시 구로구..." required>
                        </div> -->
                    </div>
                </div>
            </div>
                
            <div class="col-md-6">
                <div class="card"> 
                    <div class="card-body">
                        <h2 class="card-title">비밀번호수정</h2>
                        <div class="form-group">
                            <label for="password" class="col-form-label">비밀번호</label>
                            <input type="password" class="form-control" id="mem_pwd" name="mem_pwd"  placeholder="Type your password" required="">
                            <div class="password-feedback">
                            
                            </div>
                        </div>
                        <div class="form-group">
                            <label for="password_conf" class="col-form-label">주민번호</label>
                            <input type="text" class="form-control" id="mem_juminnum" name="mem_juminnum"  value="${sessionScope.memJuminnum}" placeholder="Type your personal num" required>
                            <div class="password_conf-feedback">
                            
                            </div>
                        </div>
                    </div>
                </div>
            </div>   
 			<div class="col-md-12">
          <div class="card">
               <div class="row">
                    <div class="form-group col-md-8">
                    <label for="tel" class="col-form-label">&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;Profile Picture</label>
                        
                        <!-- 사진업로드 -->
                        <input id="mem_pic" name="file"  type="file" class="form-control">                            
                        </div>     

              
                    </div>
                </div>
            </div>
        </div>
         
        <br>
        <div style="margin-top: 1em;">
            <button type="submit" class="btn-custom primary btn-block">회원정보수정</button>
        </div>
        <br>
        </form>
</div>

 </app-root> 
 
</body>
</html>

- Mypage.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 lang="en">
<head>
  <meta charset="utf-8">
  <title>마이페이지</title>
<!--   <base href=""> -->
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="./resources/img/favicon.ico">
  


<link rel="stylesheet" type="text/css" href="./resources/css/header.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/main.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/style.css" media="all" />



<!-- 따로 추가 -->
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.3.1/css/all.min.css" rel="stylesheet">
<!------ Include the above in your HEAD tag ---------->

<!-- 
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/bootstrap.min.css" media="all" /> 

 
<link rel="stylesheet" type="text/css" href="./resources/css/primary-skin.css" media="all" />

<link rel="stylesheet" type="text/css" href="./resources/css/plugins/animate.min.css" media="all" />



<link rel="stylesheet" type="text/css" href="./resources/css/plugins/magnific-popup.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick-theme.css" media="all" />
<!--

-->


  
  <!--********** 【 js 링크 걸기 】********** -->

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.min.js"></script>
<script src="./resources/js/main.js" type="text/javascript" charset="utf-8"></script>

<script src="./resources/js/plugins/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>



<!-- 
<script src="./resources/js/plugins/isotope.pkgd.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.countdown.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.magnific-popup.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.slimScroll.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.steps.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery-3.4.1.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/popper.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/slick.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/waypoint.js" type="text/javascript" charset="utf-8"></script> 
-->
  
  
<!--  
  -->
  
  
</head>
<body>
 
  
  <app-root>
 

<!-- 마이페이지 Start -->
<section id="about-us" class="py-5">
    <div class="container">
        <div class="row">
             <!--left sidebar-->
            <div class="col-md-3 pr-md-4">
                <div class="sidebar-left">
                    <!--sidebar menu-->
                    <ul class="list-unstyled sidebar-menu pl-md-2 pr-md-0">
                        <li>
                            <a class="sidebar-item active d-flex justify-content-between align-items-center" href="Myrecipe_list">
                                내가 쓴 레시피 보기
                                <span class="fas fa-copy"></span>
                            </a>
                        </li>
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="My_bigdata">
                           		 내 레시피 정보(빅데이터)
                                <span class="fas fa-chart-line"></span>
                            </a>
                        </li>
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="review">
                                나에게 달린 코멘트
                                <span class="side-notif" title="1 new comment"></span>
                                <span class="fas fa-comment"></span>
                            </a>
                        </li>
                        
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="Myscrap">
                                레시피 스크랩
                                <span class="fas fa-bookmark"></span>
                            </a>
                        </li>                       
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="storeCart">
                                장바구니
                                <span class="fas fa-cart-arrow-down"></span>
                            </a>
                        </li>
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="chat_us2">
                                고객센터 챗봇
                                <span class="side-notif" title="1 new messages"></span>
                                <span class="fas fa-headset"></span>
                            </a>
                        </li>
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="info_change">
                                회원정보수정
                                <span class="fas fa-user-cog"></span>
                            </a>
                        </li> 
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center" href="logout">
                                로그아웃
                                <span class="fas fa-sign-out-alt"></span>
                            </a>
                        </li>
                          <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center" href="memberDelete">
                                회원탈퇴
                                <span class="fas fa-user-slash"></span>
                            </a>
                        </li>        
                    </ul>
                </div>
            </div>

2. 마이페이지 tab 정보

1) Mypage - 정보 count / 회원정보출력 / 레시피 / 클래스

Mypage_ingVO(페이징처리)/ 클래스 resultmap(classVO) / MypageMapper / MypageDAOInter / MypageDAOImple / MypageController

더보기
더보기

- Mypage_ingVO(페이징처리)

package kr.co.ikosmo.mvc.vo;

//아직 안쓰는 VO -> 안됨
public class Mypage_ingVO {

	    // nowPage - 현재페이지
	    // startPage - 시작페이지
	    // endPage - 끝페이지
	    // total - 게시글 총 갯수
	    // cntPerPage - 페이지당 글 갯수, 마지막페이지
	    // lastPage - 마지막페이지
	    // start, end  - 페이지 분할 값
		private int nowPage, startPage, endPage, total, cntPerPage, lastPage, start, end;
		private int cntPage = 6;
		
//-------------------------------------------------
		
		//세션값 받아오기

		public String getSessionId() {
			return sessionId;
		}
		public void setSessionId(String sessionId) {
			this.sessionId = sessionId;
		}
		private String sessionId;

//-------------------------------------------------		

		
		
		public Mypage_ingVO() {
		}
		public Mypage_ingVO(int total, int nowPage, int cntPerPage) {
			this.nowPage=nowPage;
			this.cntPerPage=cntPerPage;
			this.total=total;
			memberLastPage(total, cntPerPage);
			memberStartEndPage(nowPage, cntPage);
			memberStartEnd(nowPage, cntPerPage);
		}
		// 제일 마지막 페이지 계산
		private void memberLastPage(int total, int cntPerPage) {
			// 1.1page 올림처리 -> 2페이지 , 갯수 10 당 -> 11 개라면 
			lastPage = (int) Math.ceil((double)total / (double)cntPerPage);
		}
		// 시작, 끝 페이지 계산
		private void memberStartEndPage(int nowPage, int cntPage) {
			endPage = ((int)Math.ceil((double)nowPage / (double)cntPage)) * cntPage;
			if (getLastPage() < getEndPage()) {
				endPage = getLastPage();
			}
			startPage =getEndPage() - cntPage + 1;
			if (getStartPage() < 1) {
				startPage = 1;
			}
		}

		private void memberStartEnd(int nowPage, int cntPerPage) {
			end = nowPage * cntPerPage;
			start = end - cntPerPage + 1;
		}
		
		public int getNowPage() {
			return nowPage;
		}
		public void setNowPage(int nowPage) {
			this.nowPage = nowPage;
		}
		public int getStartPage() {
			return startPage;
		}
		public void setStartPage(int startPage) {
			this.startPage = startPage;
		}
		public int getEndPage() {
			return endPage;
		}
		public void setEndPage(int endPage) {
			this.endPage = endPage;
		}
		public int getTotal() {
			return total;
		}
		public void setTotal(int total) {
			this.total = total;
		}
		public int getCntPerPage() {
			return cntPerPage;
		}
		public void setCntPerPage(int cntPerPage) {
			this.cntPerPage = cntPerPage;
		}
		public int getLastPage() {
			return lastPage;
		}
		public void setLastPage(int lastPage) {
			this.lastPage = lastPage;
		}
		public int getStart() {
			return start;
		}
		public void setStart(int start) {
			this.start = start;
		}
		public int getEnd() {
			return end;
		}
		public void setEnd(int end) {
			this.end = end;
		}	
		public int setCntPage() {
			return cntPage;
		}
		public void getCntPage(int cntPage) {
			this.cntPage = cntPage;
		}
		@Override
		public String toString() {
			return "PagingVO [nowPage=" + nowPage + ", startPage=" + startPage + ", endPage=" + endPage + ", total=" + total
					+ ", cntPerPage=" + cntPerPage + ", lastPage=" + lastPage + ", start=" + start + ", end=" + end
					+ ", cntPage=" + cntPage + "]";
		}
	
	
	
}

- 클래스 목록 resultmap

	public class ClassVO {
    
    //이거 추가
    private ClassPayInfoVO payinfo;

- MypageMapper

<?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="mpp">

<!-- ==========
레시피 목록 띄우기 
============= -->
<!-- 페이징 처리 -->
<select id="list" resultType="recipeinfo" parameterType="hashMap">
 select * from (select rownum r_num, a.* from (select * from recipe_info 
 where recipe_info.mem_no=(select mem_no from member_info where mem_no=#{sessionNo} )order by recipe_no desc ) a) 
   where r_num between #{start} and #{end} 
</select><!-- 시작점과 끝점(한페이지에 몇개의 목록만 나올것인지 -->
<!-- 페이징 처리 할 때 몇개씩 끊을지 갯수 세기 -->
<select id="totalCount" resultType="int">
  		select count(*) cnt from recipe_info
 </select> 


<!-- ==========
클래스 고객 목록 띄우기 
============= -->
<!-- 3. classlist_resultmap -->
<resultMap type="classvo" id="classlist_resultmap">
		<id property="class_no" column="class_no" javaType="int"/>
		<result property="mem_no" column="mem_no"/>
		<result property="class_price" column="class_price"/>
		<result property="class_title" column="class_title"/>
		<result property="class_thumbnail" column="class_thumbnail"/>
		<result property="class_price" column="class_price"/>
			
		<!-- payinfo-> classpay_info -->
	
	<association property="payinfo" column="pay_info_no" javaType="classpayinfovo">
		<id property="pay_info_no" column="pay_info_no"/>
		<result property="mem_no" column="mem_no"/>
		<result property="class_no" column="class_no"/>
		<result property="pay_info_date" column="pay_info_date"/>					
	</association>
</resultMap>

<!-- 고객이 듣는 클래스 목록 띄우기 -->
<select id="classlist" resultMap="classlist_resultmap" parameterType="int">
select * from class_info c join pay_info p
on c.class_no = p.class_no
where p.mem_no=#{mem_no} order by c.class_no desc

</select>


<!-- =============
statistic 숫자 카운트		 
================ -->

<!-- 내레시피 -->
<select id="myRecipeCount" resultType="int" parameterType="int">
select count(*) from recipe_info
where mem_no = #{sessionNo}
</select> 

<!-- 내레시피에 달린 코멘트 갯수 -->
<select id="myReviewCount"  resultType="int"  parameterType="int">
select count(*) from review v join recipe_info r 
on v.recipe_no = r.recipe_no
where r.mem_no =#{sessionNo}
</select> 

<!-- (고객)내가 듣는 클래스 갯수 -->
<select id="myClassCount" resultType="int" parameterType="int">
select count(*) from class_info c join pay_info p
on c.class_no = p.class_no
where p.mem_no=#{sessionNo}
</select>

<!-- 스크랩한 레시피 갯수 -->
<select id="myScrapCount" resultType="int" parameterType="int">
select count(*) from scrap s join recipe_info r 
on s.recipe_no = r.recipe_no
where s.mem_no=#{sessionNo}
</select>

<!-- 내가 쓴 레시피의 별점 평균 -->
<select id="myStarAvgCount" resultType="int" parameterType="int">
select avg(star_rate) from review v join recipe_info r 
on v.recipe_no = r.recipe_no
where r.mem_no = #{sessionNo}
</select>


<!-- ====================================== 카테고리Mapper ====================================================== -->

 - MypageDAOInter

package kr.co.ikosmo.mvc.dao;

import java.util.List;
import java.util.Map;

import kr.co.ikosmo.mvc.vo.ClassVO;
import kr.co.ikosmo.mvc.vo.Recipe_infoVO;
import kr.co.ikosmo.mvc.vo.ReviewVO;
import kr.co.ikosmo.mvc.vo.ScrapVO;

public interface MypageDAOInter {
	
	//---------------
	//레시피 목록 - 페이징
	//---------------	
	public List<Recipe_infoVO> getList(Map<String,Integer> map); //페이징 처리
	public int getTotalCount();//페이징 카운트
	
	//------------
	//클래스 목록 출력	
	//------------		
	public List<ClassVO> getClassList(int mem_no);//클래스 리스트
	
	
	//------------------
	//statistic 숫자 카운트		
	//------------------
	public int getMyRecipeCount(Map<String,Integer> map); //내 레시피 갯수
	public int getMyReviewCount(Map<String,Integer> map); //내 레시피에 달린 리뷰 갯수
	public int getMyClassCount(Map<String,Integer> map); //수강중인 클래스 갯수
	public int getMyScrapCount(Map<String,Integer> map); //스크랩한 레시피 갯수
	public int getMyStarAvgCount(Map<String,Integer> map); //내가 쓴 레시피의 별점 평균

 - MypageDAOImple

package kr.co.ikosmo.mvc.dao;

import java.util.List;
import java.util.Map;

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

import kr.co.ikosmo.mvc.vo.ClassVO;
import kr.co.ikosmo.mvc.vo.Recipe_infoVO;
import kr.co.ikosmo.mvc.vo.ReviewVO;
import kr.co.ikosmo.mvc.vo.ScrapVO;

@Repository
public class MypageDAOImple implements MypageDAOInter{
	
	@Autowired
	private SqlSessionTemplate ss;

	//---------------
	//레시피 목록 - 페이징
	//---------------
	@Override
	public List<Recipe_infoVO> getList(Map<String,Integer> map){ //nowPage등으로 연산이 된  start,end
		return ss.selectList("mpp.list",map);
	}
	@Override
	public int getTotalCount() {//전체 데이터를 기준으로 페이지를 나눌것이기 때문에..
		return ss.selectOne("mpp.totalCount");
	}
	
	//------------
	//클래스 목록 출력	
	//------------
	@Override
	public List<ClassVO> getClassList(int mem_no) { //클래스 리스트 출력
		return ss.selectList("mpp.classlist", mem_no);
	}
	
	
	//------------------
	//statistic 숫자 카운트		
	//------------------
	@Override
	public int getMyRecipeCount(Map<String,Integer> map) { //내 레시피 갯수
		return ss.selectOne("mpp.myRecipeCount", map);
	}
	@Override
	public int getMyReviewCount(Map<String,Integer> map) { //내 레시피에 달린 리뷰 갯수
		return ss.selectOne("mpp.myReviewCount", map);
	}
	@Override
	public int getMyClassCount(Map<String,Integer> map) { //수강중인 클래스 갯수
		return ss.selectOne("mpp.myClassCount", map);
	}
	@Override
	public int getMyScrapCount(Map<String,Integer> map) { //스크랩한 레시피 갯수
		return ss.selectOne("mpp.myScrapCount", map);
	}
	@Override
	public int getMyStarAvgCount(Map<String,Integer> map) { //내가 쓴 레시피의 별점 평균
		return ss.selectOne("mpp.myStarAvgCount", map);
	}

	

- MypageController

package kr.co.ikosmo.mvc.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import kr.co.ikosmo.mvc.dao.MypageDAOInter;
import kr.co.ikosmo.mvc.vo.ClassVO;
import kr.co.ikosmo.mvc.vo.Mypage_ingVO;
import kr.co.ikosmo.mvc.vo.Recipe_infoVO;
import kr.co.ikosmo.mvc.vo.ReviewVO;

@Controller
public class MypageController {

	
	@Autowired
	private MypageDAOInter mypageDAOInter;

//-----------------------
//레시피 최근 5개 목록(페이징x)
//-----------------------
	@RequestMapping(value="/Mypage")
	public String listSearch(Mypage_ingVO vo, Model model, HttpSession session,
			@RequestParam(value="nowPage", required=false ,defaultValue="1") 
			String nowPage,
			@RequestParam(value="cntPerPage", required=false , defaultValue="5") 
			String cntPerPage){
		
		int total = mypageDAOInter.getTotalCount();

		vo = new Mypage_ingVO(total, Integer.parseInt(nowPage), Integer.parseInt(cntPerPage));
		System.out.println("Start :"+vo.getStart());
		System.out.println("End :"+vo.getEnd());
		
		Integer sessionNo = (Integer)session.getAttribute("memNo");
		
				Map<String,Integer> map = new HashMap();
				
				map.put("start",vo.getStart());
				map.put("end",vo.getEnd());
				map.put("sessionNo",sessionNo);

		model.addAttribute("paging", vo);
		model.addAttribute("list", mypageDAOInter.getList(map));
		

//--------------------
//클래스 리스트 목록(동일페이지)	
//--------------------		
		//클래스 리스트출력-------------------------------------------------
		int mem_no = Integer.parseInt(session.getAttribute("memNo").toString());
		  System.out.println("클래스 리스트에 출력되는 mem번호 : "+ mem_no); //콘솔확인
	  List<ClassVO> classlist = mypageDAOInter.getClassList(mem_no);
	  
	  model.addAttribute("classlist", classlist);
		//클래스 리스트출력 끝-------------------------------------------------

//--------------------
//statistic 숫자 카운트	
//--------------------		  
		//statistic 숫자출력-------------------------------------------------
	  	
	  		//map.put("class_no",class_no);
	  		//map.put("recipe_no",recipe_no);
	  
	  	model.addAttribute("myRecipeCount", mypageDAOInter.getMyRecipeCount(map)); //내 레시피 갯수
	  	model.addAttribute("myReviewCount", mypageDAOInter.getMyReviewCount(map)); //내 레시피에 달린 리뷰 갯수
		model.addAttribute("myClassCount", mypageDAOInter.getMyClassCount(map)); //수강중인 클래스 갯수
		model.addAttribute("myScrapCount", mypageDAOInter.getMyScrapCount(map)); //스크랩한 레시피 갯수
		model.addAttribute("myStarAvgCount", mypageDAOInter.getMyStarAvgCount(map)); //내가 쓴 레시피의 별점 평균
		//statistic 숫자출력 끝-------------------------------------------------	  

		return "tiles/Mypage";
	}

2) jsp - Mypage.jsp(전체)

Mypage.jsp

더보기
더보기

- Mypage.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 lang="en">
<head>
  <meta charset="utf-8">
  <title>마이페이지</title>
<!--   <base href=""> -->
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="./resources/img/favicon.ico">
  


<link rel="stylesheet" type="text/css" href="./resources/css/header.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/main.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/style.css" media="all" />



<!-- 따로 추가 -->
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.3.1/css/all.min.css" rel="stylesheet">
<!------ Include the above in your HEAD tag ---------->

<!-- 
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/bootstrap.min.css" media="all" /> 

 
<link rel="stylesheet" type="text/css" href="./resources/css/primary-skin.css" media="all" />

<link rel="stylesheet" type="text/css" href="./resources/css/plugins/animate.min.css" media="all" />



<link rel="stylesheet" type="text/css" href="./resources/css/plugins/magnific-popup.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick-theme.css" media="all" />
<!--

-->


  
  <!--********** 【 js 링크 걸기 】********** -->

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.min.js"></script>
<script src="./resources/js/main.js" type="text/javascript" charset="utf-8"></script>

<script src="./resources/js/plugins/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>



<!-- 
<script src="./resources/js/plugins/isotope.pkgd.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.countdown.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.magnific-popup.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.slimScroll.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.steps.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery-3.4.1.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/popper.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/slick.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/waypoint.js" type="text/javascript" charset="utf-8"></script> 
-->
  
  
<!--  
  -->
  
  
</head>
<body>
 
  
  <app-root>
 

<!-- 마이페이지 Start -->
<section id="about-us" class="py-5">
    <div class="container">
        <div class="row">
             <!--left sidebar-->
            <div class="col-md-3 pr-md-4">
                <div class="sidebar-left">
                    <!--sidebar menu-->
                    <ul class="list-unstyled sidebar-menu pl-md-2 pr-md-0">
                        <li>
                            <a class="sidebar-item active d-flex justify-content-between align-items-center" href="Myrecipe_list">
                                내가 쓴 레시피 보기
                                <span class="fas fa-copy"></span>
                            </a>
                        </li>
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="My_bigdata">
                           		 내 레시피 정보(빅데이터)
                                <span class="fas fa-chart-line"></span>
                            </a>
                        </li>
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="review">
                                나에게 달린 코멘트
                                <span class="side-notif" title="1 new comment"></span>
                                <span class="fas fa-comment"></span>
                            </a>
                        </li>
                        
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="Myscrap">
                                레시피 스크랩
                                <span class="fas fa-bookmark"></span>
                            </a>
                        </li>                       
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="storeCart">
                                장바구니
                                <span class="fas fa-cart-arrow-down"></span>
                            </a>
                        </li>
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="chat_us2">
                                고객센터 챗봇
                                <span class="side-notif" title="1 new messages"></span>
                                <span class="fas fa-headset"></span>
                            </a>
                        </li>
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="info_change">
                                회원정보수정
                                <span class="fas fa-user-cog"></span>
                            </a>
                        </li> 
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center" href="logout">
                                로그아웃
                                <span class="fas fa-sign-out-alt"></span>
                            </a>
                        </li>
                          <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center" href="memberDelete">
                                회원탈퇴
                                <span class="fas fa-user-slash"></span>
                            </a>
                        </li>        
                    </ul>
                </div>
            </div>
            
            <!--Content-->
            <div class="col-md-9">
                <div class="dashboard-area">
                    <div class="row">
                        <div class="col-12">
                            <div class="mb-3 bg-dark">
                                <div class="row">
                                    <div class="col-12">
                                        <a class="position-absolute ml-3 mt-3 text-white" href="info_change" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="Edit cover images"><i class="fas fa-cog"></i></a>
                                        <div class="row">
                                            <div class="col-md-6 ml-auto mr-auto">
                                               <div class="profiles p-3 my-4 rounded text-center shadow-sm">
                                                    <div class="avatars">
                                                       <img src="${pageContext.request.contextPath}/resources/image/member_upload/${sessionScope.memPic}"  style="height: 100px; width: 100px;" 
                                                       alt="Circle Image" class="avatar-lg rounded-circle img-fluid" data-toggle="tooltip" data-placement="bottom" title="mem_pic" data-original-title="Edit avatar images">                              
                                                    </div>
                                                    <div class="names">
                                                        <h3 class="title text-light">"${sessionScope.memNickname}"님 <br>환영합니다.</h3>
                                                        <a href="#" class="btn btn-link btn-facebook"><i class="fab fa-facebook"></i></a>
                                                        <a href="#" class="btn btn-link btn-twitter"><i class="fab fa-twitter"></i></a>
                                                        <a href="#" class="btn btn-link btn-gplus"><i class="fab fa-google-plus"></i></a>
                                                        <a href="#" class="btn btn-link btn-instagram"><i class="fab fa-instagram"></i></a>
                                                        <a href="#" class="btn btn-link btn-youtube"><i class="fab fa-youtube"></i></a>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                     </div>
                                 </div>
                            </div>
                        </div>
                    </div>
                    <div class="row">
                        <div class="col-12">
                            <ul class="nav nav-pills mb-5" id="pills-tab" role="tablist">
                                <li class="nav-item">
                                    <a class="nav-link active show" id="pills-home-tab" data-toggle="pill" href="#pills-home" role="tab" aria-controls="pills-home" aria-selected="true">Statistic</a>
                                </li>
                                <li class="nav-item">
                                    <a class="nav-link" id="pills-profile-tab" data-toggle="pill" href="#pills-profile" role="tab" aria-controls="pills-profile" aria-selected="false">Profile</a>
                                </li>                                
                                <li class="nav-item">
                                    <a class="nav-link" id="pills-contact-tab" data-toggle="pill" href="#pills-contact" role="tab" aria-controls="pills-contact" aria-selected="false">Lastest Post</a>
                                </li>
                                <li class="nav-item">
                                    <a class="nav-link" id="pills-class-tab" data-toggle="pill" href="#pills-class" role="tab" aria-controls="pills-class" aria-selected="false">Class</a>
                                </li>

                            </ul>
                            <div class="tab-content" id="pills-tabContent">
                                <div class="tab-pane fade active show" id="pills-home" role="tabpanel" aria-labelledby="pills-home-tab">
                                    <div class="row">
                                        <div class="col-lg-4 col-sm-6">
                                            <a class="member-item" href="">
                                                <div class="card mb-2 mb-md-5 py-3">
                                                    <div class="content">
                                                        <div class="row">
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="icon-big text-warning text-center">
                                                                    <i class="fas fa-copy"></i>
                                                                </div>
                                                            </div>
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="numbers">
                                                                    <p>내 레시피</p>
                                                                    ${myRecipeCount}
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
                                                </div>
                                            </a>
                                        </div>
                                        <div class="col-lg-4 col-sm-6">
                                            <a class="member-item" href="">
                                                <div class="card mb-2 mb-md-5 py-3">
                                                    <div class="content">
                                                        <div class="row">
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="icon-big text-info text-center" title="1 new comment">
                                                                    <div class="notif"></div>
                                                                    <i class="fas fa-comment"></i>
                                                                </div>
                                                            </div>
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="numbers">
                                                                    <p>코멘트</p>
                                                                    ${myReviewCount}
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
                                                </div>
                                            </a>
                                        </div>
                                        <div class="col-lg-4 col-sm-6">
                                            <a class="member-item" href="">
                                                <div class="card mb-2 mb-md-5 py-3">
                                                    <div class="content">
                                                        <div class="row">
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="icon-big text-danger text-center">
                                                                    <i class="fas fa-bookmark"></i>
                                                                </div>
                                                            </div>
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="numbers">
                                                                    <p>레시피 스크랩</p>
                                                                    ${myScrapCount}
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
                                                </div>
                                            </a>
                                        </div>
                                        <div class="col-lg-4 col-sm-6">
                                            <a class="member-item" href="">
                                                <div class="card mb-2 mb-md-5 py-3">
                                                    <div class="content">
                                                        <div class="row">
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="icon-big text-success text-center">
                                                                    <i class="fas fa-utensils"></i>
                                                                </div>
                                                            </div>
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="numbers">
                                                                    <p>수강중인 클래스</p>
                                                                    ${myClassCount}
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
                                                </div>
                                            </a>
                                        </div>
                                        <div class="col-lg-4 col-sm-6">
                                            <a class="member-item" href="">
                                                <div class="card mb-2 mb-md-5 py-3">
                                                    <div class="content">
                                                        <div class="row">
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="icon-big text-facebook text-center">
                                                                    <i class="fas fa-star"></i>
                                                                </div>
                                                            </div>
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="numbers">
                                                                    <p>???</p>
                                                                    뭐넣지?
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
                                                </div>
                                            </a>
                                        </div>
                                       <div class="col-lg-4 col-sm-6">
                                            <a class="member-item" href="">
                                                <div class="card mb-2 mb-md-5 py-3">
                                                    <div class="content">
                                                        <div class="row">
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="icon-big text-warning text-center">
                                                                    <i class="fas fa-star"></i>
                                                                </div>
                                                            </div>
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="numbers">
                                                                    <p>내 평균 별점</p>
                                                                    ${myStarAvgCount}
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
                                                </div>
                                            </a>
                                        </div>
                                        
                                    </div>
                                </div>
                                <div class="tab-pane fade" id="pills-profile" role="tabpanel" aria-labelledby="pills-profile-tab">
                                    <div class="p-3 border mb-3">
                                        <a class="position-absolute" style="right: 25px" href="info_change" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="Edit profile"><i class="fas fa-user-cog"></i></a>
                                        <h3>"${sessionScope.memNickname}"님의 정보입니다.</h3>
				
										<p><b>아이디: </b>${sessionScope.memId}</p>
										<p><b>이름: </b>${sessionScope.memName}</p>
										<p><b>닉네임: </b>${sessionScope.memNickname}</p>
										<p><b>이메일: </b>${sessionScope.memEmail}</p>
										<p><b>핸드폰번호: </b>${sessionScope.memPhone}</p>		

                                        
                                    </div>                                     
                                </div>
                                
                               <div class="tab-pane fade" id="pills-review" role="tabpanel" aria-labelledby="pills-review-tab">                                    
                                     <div class="p-3 border mb-3">
									    <h5>최근 달린 리뷰 보기</h5>
									      <div class="row">
									     <div class="col-12">
									     <ul class="list-unstyled statistics">
									
												<table>
													<thead>
														<tr>
															<th colspan="6">내 레시피에 달린 리뷰</th>
														</tr>
														<tr>
															<td>번호</td>
															<td>섬네일</td>
															<td>제목</td>
															<td>리뷰작성자</td>
															<td>리뷰내용</td>
															<td>리뷰작성일자</td>
															
														</tr>
													</thead>
													<tbody>
														<c:forEach var="reviewRecipelist" items="${reviewRecipelist}">
															<tr>
															<!-- 세션값을 여기에서 mem_no로 숨겨받아서 다시 Controller로  -->
															<input type="hidden" name="mem_no" id="mem_no" value="${sessionScope.memNo}"/>
																<td>${reviewRecipelist.review_no}</td>
																<td><a href="recipe_detail?recipe_no=${reviewRecipelist.recipe2_asso.recipe_no}"><img src="${pageContext.request.contextPath}/resources\image\recipe_upload/${reviewRecipelist.recipe2_asso.recipe_thumbnail}"  
																					style="height: 100px; width: 100px;"/></a></td>
																<td><a href="recipe_detail?recipe_no=${reviewRecipelist.recipe2_asso.recipe_no}">${reviewRecipelist.recipe2_asso.recipe_title}</a></td>
																<td>${reviewRecipelist.mem_no}</td>
																<td>${reviewRecipelist.review_content}</td>
																<td>${reviewRecipelist.review_date}</td>
															</tr>
														</c:forEach>
													</tbody>
												</table>
									
									           </ul>
									      </div>
									  </div>
									</div>
                                </div>
                                
                                
                                <div class="tab-pane fade" id="pills-class" role="tabpanel" aria-labelledby="pills-class-tab">                                    
                                     <div class="p-3 border mb-3">
									    <h5>수강중인 클래스 보기</h5>
									      <div class="row">
									     <div class="col-12">
									     <ul class="list-unstyled statistics">
									
												<table>
													<thead>
														<tr>
															<th colspan="5">클래스 리스트</th>
														</tr>
														<tr>
															<td>번호</td>
															<td>섬네일</td>
															<td>제목</td>
															<td>가격</td>
															<td>구매일자</td>
															
														</tr>
													</thead>
													<tbody>
														<c:forEach var="classlist" items="${classlist}">
															<tr>
															<!-- 세션값을 여기에서 mem_no로 숨겨받아서 다시 Controller로  -->
															<input type="hidden" name="mem_no" id="mem_no" value="${sessionScope.memNo}"/>
																<td>${classlist.class_no}</td>
																<td><a href="class_detail?class_no=${classlist.class_no}"><img src="${pageContext.request.contextPath}/resources\image\FoodImg/${classlist.class_thumbnail}"  
																					style="height: 100px; width: 100px;"/></a></td>
																<td><a href="class_detail?class_no=${classlist.class_no}">${classlist.class_title}</a></td>
																<td>${classlist.class_price}</td>
																<td>${classlist.payinfo.pay_info_date}</td>
															</tr>
														</c:forEach>
													</tbody>
												</table>
									
									           </ul>
									      </div>
									  </div>
									</div>
                                </div>
                                
                                
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</section>
  <!--마이페이지 End -->

  
 </app-root> 
 
</body>
</html>

3. 카테고리 정보

1) Mypage - 내 레시피 / 코멘트 / 스크랩

코멘트,스크랩 esultmap(review/scrapVO) / MypageMapper / MypageDAOInter / MypageDAOImple / MypageController

더보기
더보기

- 코멘트 / 스크랩 목록 resultmap

public class ReviewVO {

	//--------------------------------------
	//리뷰 페이지에서 레시피 부문 가져오기 위함. 
	private Recipe_infoVO recipe2_asso; //이거 추가
	//--------------------------------------
public class ScrapVO {
	//--------------------------------
	//스크랩 페이지에서 레시피 부문 가져오기 위함.
	private Recipe_infoVO recipe_asso;
	private Mypage_ingVO paging_asso;
	//--------------------------------

- MypageMapper

<!-- ====================================== 카테고리Mapper ====================================================== -->

<!-- ==========
코멘트 목록 띄우기 
============= -->
<!-- 2. review_resultmap -->
<resultMap type="reviewvo" id="review_resultmap">
		<id property="review_no" column="review_no" javaType="int"/>
		<result property="mem_no" column="mem_no"/>
		<result property="class_no" column="class_no"/>
		<result property="recipe_no" column="recipe_no"/>
		<result property="star_rate" column="star_rate"/>
		<result property="review_declare" column="review_declare"/>
		<result property="type" column="type"/>
		<result property="review_content" column="review_content"/>
		<result property="review_date" column="review_date"/>
		
		
		<!-- 리뷰가 레시피랑 멤버를 가져와야한다. -->
	
	<association property="recipe2_asso" column="recipe_no" javaType="recipeinfo">
		<id property="recipe_no" column="recipe_no"/>
		<result property="recipe_title" column="recipe_title"/><!-- 값 -->
		<result property="recipe_thumbnail" column="recipe_thumbnail"/>
		<result property="recipe_video" column="recipe_video"/>
		<result property="recipe_content" column="recipe_content"/>
		<result property="recipe_time" column="recipe_time"/>
		<result property="recipe_level" column="recipe_level"/>
		<result property="recipe_uploadtime" column="recipe_uploadtime"/>					
	</association>
</resultMap>


<!--  코멘트(리뷰) 목록 띄우기 -->
<select id="reviewlist" parameterType="hashMap" resultMap="review_resultmap">

 select * from (select rownum r_num, a.* from (
 
select * from review v join recipe_info r 
on v.recipe_no = r.recipe_no
where r.mem_no = #{sessionNo} order by v.review_no desc
  
 ) a) 
   where r_num between #{start} and #{end} 

</select>

<!-- 끊을 갯수 -->
<select id="totalreviewCount" resultType="int">
  		select count(*) cnt from review
 </select> 




<!-- ==========
스크랩 목록 띄우기 
============= -->

<!-- 1. scrap_resultmap -->
<resultMap type="scrapvo" id="scrap_resultmap"><!-- resultmap을 부르는 id -->
		<id property="scrap_no" column="scrap_no" javaType="int"/>
		<result property="mem_no" column="mem_no" javaType="int"/>
		<result property="recipe_no" column="recipe_no" javaType="int"/>
		<result property="scrap_cnt" column="scrap_cnt" javaType="int"/>
		<result property="scrap_uploadtime" column="scrap_uploadtime"/>
				
		<!-- 	private Recipe_infoVO recipe_asso;
				private Mypage_ingVO paging_asso;-->
	
	<association property="recipe_asso" column="recipe_no" javaType="recipeinfo">
		<id property="recipe_no" column="recipe_no"/>
		<result property="recipe_title" column="recipe_title"/><!-- 값 -->
		<result property="recipe_thumbnail" column="recipe_thumbnail"/>
		<result property="recipe_video" column="recipe_video"/>
		<result property="recipe_content" column="recipe_content"/>
		<result property="recipe_time" column="recipe_time"/>
		<result property="recipe_level" column="recipe_level"/>
		<result property="recipe_uploadtime" column="recipe_uploadtime"/>					
	</association>

	<association property="paging_asso" column="total" javaType="pvo">
		<id property="total" column="total"/>
		<result property="nowPage" column="nowPage"/><!-- 값 -->
		<result property="startPage" column="startPage"/>
		<result property="endPage" column="endPage"/>
		<result property="total" column="total"/>
		<result property="cntPerPage" column="cntPerPage"/>
		<result property="lastPage" column="lastPage"/>
		<result property="start" column="start"/>	
		<result property="end" column="end"/>	
		<result property="cntPage" column="cntPage"/>	
	</association>
	
</resultMap>


<!-- 스크랩 목록 띄우기 -->
<select id="scrapList" parameterType="hashMap" resultMap="scrap_resultmap">

 select * from (select rownum r_num, a.* from (
 
  select * from scrap s join recipe_info r on s.recipe_no = r.recipe_no 
  					where s.mem_no=(select mem_no from member_info where mem_no=#{sessionNo} )order by scrap_no desc 
  
 ) a) 
   where r_num between #{start} and #{end} 

</select>
<!-- 끊을 갯수 -->
<select id="totalscrapCount" resultType="int">
  		select count(*) cnt from scrap
 </select> 





<!-- ==========
레시피 목록 띄우기 
============= -->
<!-- 페이징 처리 -->
<select id="listr" resultType="recipeinfo" parameterType="hashMap">
 select * from (select rownum r_num, a.* from (select * from recipe_info 
 where recipe_info.mem_no=(select mem_no from member_info where mem_no=#{sessionNo} )order by recipe_no desc ) a) 
   where r_num between #{start} and #{end} 
</select><!-- 시작점과 끝점(한페이지에 몇개의 목록만 나올것인지 -->
<!-- 페이징 처리 할 때 몇개씩 끊을지 갯수 세기 -->
<select id="totalMyrecipeCount" resultType="int">
  		select count(*) cnt from recipe_info
 </select>



	
</mapper>  

- MypageDAOInter

//========================================= 카테고리 ===============================================
	
	//------------
	//리뷰 목록 출력	
	//------------	
	public List<ReviewVO> getReviewlist(Map<String,Integer> map);//리뷰 리스트 출력
	public int getTotalReviewList();//페이징 카운트
	
	//------------
	//스크랩 목록 출력	
	//------------
	public List<ScrapVO> getscrapList(Map<String,Integer> map); //스크랩 리스트 출력
	public int getTotalscrapList();//페이징 카운트
	
	
	//---------------
	//레시피 목록 - 페이징
	//---------------	
	public List<Recipe_infoVO> getMyrecipeList(Map<String,Integer> map); //페이징 처리
	public int getMyrecipeTotalCount();//페이징 카운트
}

- MypageDAOImple

	//========================================= 카테고리 ===============================================
	
	//------------
	//리뷰 목록 출력	
	//------------
	@Override //레시피 리스트 출력
	public List<ReviewVO> getReviewlist(Map<String,Integer> map){//리뷰 리스트 출력
		return ss.selectList("mpp.reviewlist", map);
	}

	@Override
	public int getTotalReviewList() {//페이징 카운트
		return ss.selectOne("mpp.totalreviewCount");
	}
	

	
	//------------
	//스크랩 목록 출력	
	//------------
	@Override
	public List<ScrapVO> getscrapList(Map<String,Integer> map){ //nowPage등으로 연산이 된  start,end
		return ss.selectList("mpp.scrapList",map);
	}
	@Override
	public int getTotalscrapList() {//전체 데이터를 기준으로 페이지를 나눌것이기 때문에..
		return ss.selectOne("mpp.totalscrapCount");
	}
	
	
	//---------------
	//레시피 목록 - 페이징
	//---------------
	@Override
	public List<Recipe_infoVO> getMyrecipeList(Map<String,Integer> map){ //nowPage등으로 연산이 된  start,end
		return ss.selectList("mpp.listr",map);
	}
	@Override
	public int getMyrecipeTotalCount() {//전체 데이터를 기준으로 페이지를 나눌것이기 때문에..
		return ss.selectOne("mpp.totalMyrecipeCount");
	}
	
	
	
}


- MypageController

/* =================================== 카테고리 =================================== */	
	
//--------------------
//리뷰 리스트 목록(resultmap)	
//--------------------		

	
	@RequestMapping(value="/review")
	 public String listMyComment(Mypage_ingVO vo, Model model, HttpSession session,
				@RequestParam(value="nowPage", required=false ,defaultValue="1") 
				String nowPage,
				@RequestParam(value="cntPerPage", required=false , defaultValue="10") 
				String cntPerPage){
	
			int total = mypageDAOInter.getTotalReviewList();

			vo = new Mypage_ingVO(total, Integer.parseInt(nowPage), Integer.parseInt(cntPerPage));
			
			System.out.println("Start :"+vo.getStart());
			System.out.println("End :"+vo.getEnd()); 
			
			Integer sessionNo = (Integer)session.getAttribute("memNo");
					Map<String,Integer> map = new HashMap<String, Integer>();
					map.put("start",vo.getStart());
					map.put("end",vo.getEnd());
					map.put("sessionNo",sessionNo);			
					
			model.addAttribute("paging", vo);
			model.addAttribute("reviewlist", mypageDAOInter.getReviewlist(map));
	  
	  
	  
		return "tiles/review";
	}
	

	

//--------------------
//스크랩 리스트 목록(페이징)	
//--------------------
	@RequestMapping(value="/Myscrap")
	public String listScrap(Mypage_ingVO vo, Model model, HttpSession session,
			@RequestParam(value="nowPage", required=false ,defaultValue="1") 
			String nowPage,
			@RequestParam(value="cntPerPage", required=false , defaultValue="5") 
			String cntPerPage){
		
		int total = mypageDAOInter.getTotalscrapList();

		vo = new Mypage_ingVO(total, Integer.parseInt(nowPage), Integer.parseInt(cntPerPage));
		
		System.out.println("Start :"+vo.getStart());
		System.out.println("End :"+vo.getEnd()); 
		
		Integer sessionNo = (Integer)session.getAttribute("memNo");
				Map<String,Integer> map = new HashMap<String, Integer>();
				map.put("start",vo.getStart());
				map.put("end",vo.getEnd());
				map.put("sessionNo",sessionNo);			
				
		model.addAttribute("paging", vo);
		model.addAttribute("scrapList", mypageDAOInter.getscrapList(map));
		
		return "tiles/Myscrap";
	}
	

	//--------------------
	//레시피 리스트 목록(페이징)	
	//--------------------
		@RequestMapping(value="/Myrecipe_list")
		public String listMyrecipe(Mypage_ingVO vo, Model model, HttpSession session,
				@RequestParam(value="nowPage", required=false ,defaultValue="1") 
				String nowPage,
				@RequestParam(value="cntPerPage", required=false , defaultValue="6") 
				String cntPerPage){
			
			int total = mypageDAOInter.getMyrecipeTotalCount();

			vo = new Mypage_ingVO(total, Integer.parseInt(nowPage), Integer.parseInt(cntPerPage));
			System.out.println("Start :"+vo.getStart());
			System.out.println("End :"+vo.getEnd());
			
			Integer sessionNo = (Integer)session.getAttribute("memNo");
			
					Map<String,Integer> map = new HashMap();
					
					map.put("start",vo.getStart());
					map.put("end",vo.getEnd());
					map.put("sessionNo",sessionNo);

			model.addAttribute("paging", vo);
			model.addAttribute("listr", mypageDAOInter.getMyrecipeList(map));
	
			return "tiles/Myrecipe_list";
		}	
	
	
	
}

2) jsp - 내 레시피목록 / 내 스크랩목록 / 나에게 달린 리뷰 목록

Myrecipe_list.jsp / Myscrap.jsp / review.jsp

더보기
더보기

 - Myrecipe_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 lang="en">
<head>
  <meta charset="utf-8">
  <title>나의 레시피</title>
<!--   <base href=""> -->
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="./resources/img/favicon.ico">
  


<link rel="stylesheet" type="text/css" href="./resources/css/header.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/main.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/style.css" media="all" />



<!-- 따로 추가 -->
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.3.1/css/all.min.css" rel="stylesheet">
<!------ Include the above in your HEAD tag ---------->

<!-- 
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/bootstrap.min.css" media="all" /> 

 
<link rel="stylesheet" type="text/css" href="./resources/css/primary-skin.css" media="all" />

<link rel="stylesheet" type="text/css" href="./resources/css/plugins/animate.min.css" media="all" />



<link rel="stylesheet" type="text/css" href="./resources/css/plugins/magnific-popup.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick-theme.css" media="all" />
<!--

-->


  
  <!--********** 【 js 링크 걸기 】********** -->

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.min.js"></script>
<script src="./resources/js/main.js" type="text/javascript" charset="utf-8"></script>

<script src="./resources/js/plugins/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>



<!-- 
<script src="./resources/js/plugins/isotope.pkgd.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.countdown.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.magnific-popup.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.slimScroll.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.steps.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery-3.4.1.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/popper.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/slick.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/waypoint.js" type="text/javascript" charset="utf-8"></script> 
-->
  
  
<!--  
  -->
  
  
</head>
<body>
 
  
  <app-root>
 

<!-- 마이페이지 Start -->
<section id="about-us" class="py-5">
    <div class="container">
        <div class="row">
        
        
             <!--left sidebar-->
            <div class="col-md-3 pr-md-4">
                <div class="sidebar-left">
                    <!--sidebar menu-->
                    <ul class="list-unstyled sidebar-menu pl-md-2 pr-md-0">
                        <li>
                            <a class="sidebar-item active d-flex justify-content-between align-items-center" href="Myrecipe_list">
                                내가 쓴 레시피 보기
                                <span class="fas fa-copy"></span>
                            </a>
                        </li>
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="My_bigdata">
                           		 내 레시피 정보(빅데이터)
                                <span class="fas fa-chart-line"></span>
                            </a>
                        </li>
                           
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="review">
                                나에게 달린 코멘트
                                <span class="side-notif" title="1 new comment"></span>
                                <span class="fas fa-comment"></span>
                            </a>
                        </li>                  
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="Myscrap">
                                레시피 스크랩
                                <span class="fas fa-bookmark"></span>
                            </a>
                        </li>                       
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="storeCart">
                                장바구니
                                <span class="fas fa-cart-arrow-down"></span>
                            </a>
                        </li>
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="chat_us2">
                                고객센터 챗봇
                                <span class="side-notif" title="1 new messages"></span>
                                <span class="fas fa-headset"></span>
                            </a>
                        </li>
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="info_change">
                                회원정보수정
                                <span class="fas fa-user-cog"></span>
                            </a>
                        </li> 
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center" href="logout">
                                로그아웃
                                <span class="fas fa-sign-out-alt"></span>
                            </a>
                        </li>
                          <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center" href="memberDelete">
                                회원탈퇴
                                <span class="fas fa-user-slash"></span>
                            </a>
                        </li>        
                    </ul>
                </div>
            </div>
            
            
           
            <div class="col-md-9">
                <div class="dashboard-area">
                <!--Content-->
                
			   <!-- Blog Posts Start -->
			  <div class="section section-padding posts">
			    <div class="container">
			
			      <div class="row">
			        <div class="col-lg-10">
			
			          <div class="row masonry">
			
			            <!-- Post Start -->
			            <c:forEach var="listr" items="${listr}">
			            <div class="col-lg-6 col-md-6 masonry-item">
			              <article class="post">
			                <div class="post-thumbnail">
			                  <a href="recipe_detail?recipe_no=${listr.recipe_no}"><img src="${pageContext.request.contextPath}/resources/image/recipe_upload/${listr.recipe_thumbnail}"  
									style="height: 200px; width: 300px;"/></a>			                  
			                  <div class="post-meta">
			                    <span>${listr.recipe_uploadtime}</span>
			                    <span>조회 ${listr.visit_cnt}회</span>
			                  </div>
			                </div>
			                <div class="post-categories">
			                  <a href="recipe_list">{한식등 태그걸기}</a>
			                </div>
			                <div class="post-body">
			                  <h5 class="post-title"> <a href="recipe_detail?recipe_no={listc.recipe_no}">${listr.recipe_title}</a> </h5>
			                   <p class="post-text">${listr.recipe_content}</p>
			                </div>
			                
			              </article>
			            </div>
			            </c:forEach>
			            
			            
			            <!-- Post End -->
			            
			
			
			          </div>
			
			        </div>
			      </div>
						    <!-- Pagination Start -->
            
				            <ul class="pagination" id="pageTd">				            
							<%-- page 처리  --%>
							<%@include file="pageProcess_myRecipe.jsp" %>				            
				            </ul>
				                        
				          <!-- Pagination End -->
			    </div>

			  </div>
			  <!-- Blog Posts End -->
                
                
                <!--Content  End-->
                </div>
            </div>
           
           			             
           
           
           
         </div>
            </div>			
</section>
  <!--마이페이지 End -->

  
 </app-root> 
 
</body>
</html>

- Myscrap.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 lang="en">
<head>
  <meta charset="utf-8">
  <title>스크랩</title>
<!--   <base href=""> -->
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="./resources/img/favicon.ico">
  


<link rel="stylesheet" type="text/css" href="./resources/css/header.css" media="all" /><!-- 글씨가 작아지네..?
<link rel="stylesheet" type="text/css" href="./resources/css/main.css" media="all" /> 
<link rel="stylesheet" type="text/css" href="./resources/css/style.css" media="all" />-->

 
<!------ Include the above in your HEAD tag ---------->
 <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>
<script src="//code.jquery.com/jquery-1.11.1.min.js"></script>

<link rel="stylesheet" type="text/css" href="./resources/css/Myscrap.css" media="all" />
<!------ Include the above in your HEAD tag ---------->
 

<!-- 
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/bootstrap.min.css" media="all" /> 

 
<link rel="stylesheet" type="text/css" href="./resources/css/primary-skin.css" media="all" />

<link rel="stylesheet" type="text/css" href="./resources/css/plugins/animate.min.css" media="all" />



<link rel="stylesheet" type="text/css" href="./resources/css/plugins/magnific-popup.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick-theme.css" media="all" />
<!--

-->


  
  <!--********** 【 js 링크 걸기 】********** -->

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.min.js"></script>
<script src="./resources/js/main.js" type="text/javascript" charset="utf-8"></script>

<script src="./resources/js/plugins/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>



<!-- 
<script src="./resources/js/plugins/isotope.pkgd.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.countdown.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.magnific-popup.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.slimScroll.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.steps.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery-3.4.1.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/popper.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/slick.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/waypoint.js" type="text/javascript" charset="utf-8"></script> 
-->

  <style>

  .scrap {
    background-color: #bbdefb;
  }

</style>
</head>


<body>
 

  
<!-- 빅데이터 Start -->


<div class="container">	
	<div class="row">

		<section class="content">
			<h1>My Scrap Box</h1>
			<div class="col-md-8 col-md-offset-2">
				<div class="panel panel-default">
					<div class="panel-body">						
						<div class="table-container">
						
							<table class="table table-filter" name="scrap">
								<tbody>
									<tr>
										<th>스크랩 리스트</th>
									</tr>
								<c:forEach var="scrapList" items="${scrapList}">

								
									<tr data-status="filter1">
			
										<td>
											<div class="media">
												<a href="recipe_detail?recipe_no=${scrapList.recipe_asso.recipe_no}" class="pull-left">
													<img src="${pageContext.request.contextPath}/resources/image/recipe_upload/${scrapList.recipe_asso.recipe_thumbnail}" class="media-photo" style="height: 100px; width: 100px;">
												</a>
												<div class="media-body">
													<span class="media-meta pull-right">${scrapList.scrap_uploadtime}</span>
													<h4 class="title">
														${scrapList.recipe_asso.recipe_title}
														<span class="pull-right pagado">${scrapList.recipe_asso.recipe_time} / ${scrapList.recipe_asso.recipe_level} </span>
													</h4>
													<p class="summary"><br>  ${scrapList.recipe_asso.recipe_content} </p>
												</div>
											</div>
										</td>
									</tr>									
							</c:forEach>
								</tbody>
								<tfoot>
									<tr>
										<td colspan="4" id="pageTd">
											<%-- page 처리  --%>
											<%@include file="pageProcess_scrap.jsp" %>
										</td>
									</tr>
								</tfoot>
								
							</table>
						</div>
					</div>
				</div>			
			</div>
		</section>
		
	</div>
</div>
 
 
</body>
</html>

- review.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 lang="en">
<head>
  <meta charset="utf-8">
  <title>reviews</title>
<!--   <base href=""> -->
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="./resources/img/favicon.ico">
  


<link rel="stylesheet" type="text/css" href="./resources/css/header.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/main.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/style.css" media="all" />



<!-- 따로 추가 -->
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.3.1/css/all.min.css" rel="stylesheet">
<!------ Include the above in your HEAD tag ---------->



<!-- <link rel="stylesheet" type="text/css" href="./a_기타/css/collection.css" media="all" />
<link rel="stylesheet" type="text/css" href="./a_기타/css/custom.css" media="all" /> -->
 


<!-- <link rel="stylesheet" type="text/css" href="./resources/css/plugins/bootstrap.min.css" media="all" />  

 
<link rel="stylesheet" type="text/css" href="./resources/css/primary-skin.css" media="all" />

<link rel="stylesheet" type="text/css" href="./resources/css/plugins/animate.min.css" media="all" />




<link rel="stylesheet" type="text/css" href="./resources/css/plugins/magnific-popup.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick-theme.css" media="all" /> -->


  
  <!--********** 【 js 링크 걸기 】********** -->

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.min.js"></script>
<script src="./resources/js/main.js" type="text/javascript" charset="utf-8"></script>

<script src="./resources/js/plugins/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>



<script src="./resources/js/plugins/isotope.pkgd.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.countdown.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.magnific-popup.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.slimScroll.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.steps.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery-3.4.1.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/popper.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/slick.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/waypoint.js" type="text/javascript" charset="utf-8"></script>
  
  
<!--  
  -->
  
  
</head>
<body>
 
   
  <app-root>
 

<!-- 마이페이지 Start -->
<section id="about-us" class="py-5">
    <div class="container">
        <div class="row">
        
        
             <!--left sidebar-->
            <div class="col-md-3 pr-md-4">
                <div class="sidebar-left">
                    <!--sidebar menu-->
                    <ul class="list-unstyled sidebar-menu pl-md-2 pr-md-0">
                        <li>
                            <a class="sidebar-item active d-flex justify-content-between align-items-center" href="Myrecipe_list">
                                내가 쓴 레시피 보기
                                <span class="fas fa-copy"></span>
                            </a>
                        </li>
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="My_bigdata">
                           		 내 레시피 정보(빅데이터)
                                <span class="fas fa-chart-line"></span>
                            </a>
                        </li>    
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="review">
                                나에게 달린 코멘트
                                <span class="side-notif" title="1 new comment"></span>
                                <span class="fas fa-comment"></span>
                            </a>
                        </li>
                        
                        
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="Myscrap">
                                레시피 스크랩
                                <span class="fas fa-bookmark"></span>
                            </a>
                        </li>                       
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="storeCart">
                                장바구니
                                <span class="fas fa-cart-arrow-down"></span>
                            </a>
                        </li>
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="chat_us2">
                                고객센터 챗봇
                                <span class="side-notif" title="1 new messages"></span>
                                <span class="fas fa-headset"></span>
                            </a>
                        </li>
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="info_change">
                                회원정보수정
                                <span class="fas fa-user-cog"></span>
                            </a>
                        </li> 
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center" href="logout">
                                로그아웃
                                <span class="fas fa-sign-out-alt"></span>
                            </a>
                        </li>
                          <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center" href="memberDelete">
                                회원탈퇴
                                <span class="fas fa-user-slash"></span>
                            </a>
                        </li>        
                    </ul>
                </div>
            </div>
            
            
           
            <div class="col-md-9">
                <div class="dashboard-area">
                <!--Content-->
                
			   <!-- Blog Posts Start -->
			  <div class="section section-padding posts">
			    <div class="container">
		
									
												<table>
													<thead>
														<tr>
															<th colspan="6">내 레시피에 달린 리뷰</th>
														</tr>
														<tr>
															<td>번호</td>
															<td>섬네일</td>
															<td>제목</td>
															<td>리뷰작성자</td>
															<td>리뷰내용</td>
															<td>리뷰작성일자</td>
															
														</tr>
													</thead>
													<tbody>
														<c:forEach var="reviewlist" items="${reviewlist}">
															<tr>
															<!-- 세션값을 여기에서 mem_no로 숨겨받아서 다시 Controller로  -->
															<input type="hidden" name="mem_no" id="mem_no" value="${sessionScope.memNo}"/>
																<td>${reviewlist.review_no}</td>
																<td><a href="recipe_detail?recipe_no=${reviewlist.recipe2_asso.recipe_no}"><img src="${pageContext.request.contextPath}/resources\image\recipe_upload/${reviewlist.recipe2_asso.recipe_thumbnail}"  
																					style="height: 100px; width: 100px;"/></a></td>
																<td><a href="recipe_detail?recipe_no=${reviewlist.recipe2_asso.recipe_no}">${reviewlist.recipe2_asso.recipe_title}</a></td>
																<td>${reviewlist.mem_no}</td>
																<td>${reviewlist.review_content}</td>
																<td>${reviewlist.review_date}</td>
															</tr>
														</c:forEach>
													</tbody>
												</table>

									      </div>
									  </div>
									</div>
			            
			            
			            <!-- Post End -->
			            
			
			
			          </div>
			
			        </div>
			      </div>
						    <!-- Pagination Start -->
            
				            <ul class="pagination" id="pageTd">				            
							<%-- page 처리  --%>
							<%@include file="pageProcess_Review.jsp" %>				            
				            </ul>
				                        
				          <!-- Pagination End -->
			    </div>

			  </div>
			  <!-- Blog Posts End -->
                
                
                <!--Content  End-->
                </div>
            </div>
           
           			             
           
           
           
         </div>
            </div>			
</section>
  <!--마이페이지 End -->

  
 </app-root> 
 
 
</body>
</html>

4. 마이페이지 쉐프 tab 정보

1) Mypage_chef - 정보 count / 회원정보출력 / 레시피 / 클래스

클래스 resultmap(classVO) / MypageChefMapper / MypageChefDAOInter / MypageChefDAOImple / MypageChefController

더보기
더보기

- 클래스 목록 resultmap

	public class ClassVO {
    
    //이거 추가
    private ClassPayInfoVO payinfo;

 

 - MypageChefmapper.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="mppc">
	

<!-- ==========
레시피 목록 띄우기 
============= -->
<!-- 페이징 처리 -->
<select id="listc" resultType="recipeinfo" parameterType="hashMap">
 select * from (select rownum r_num, a.* from (select * from recipe_info 
 where recipe_info.mem_no=(select mem_no from member_info where mem_no=#{sessionNo} )order by recipe_no desc ) a) 
   where r_num between #{start} and #{end} 
</select><!-- 시작점과 끝점(한페이지에 몇개의 목록만 나올것인지 -->
<!-- 페이징 처리 할 때 몇개씩 끊을지 갯수 세기 -->
<select id="totalCountc" resultType="int">
  		select count(*) cnt from recipe_info
 </select> 
 
<!-- ==========
클래스 목록 띄우기 
============= --> 
<!-- 내 클래스 목록 띄우기 -->
<select id="classlistC" resultType="classvo" parameterType="int">
 select * from class_info 
 where class_info.mem_no=(select distinct mem_no from member_info where mem_no = #{mem_no}) order by class_no desc
</select>




<!-- 쉐프가 수강중인 classlist_resultmap -->
<resultMap type="classvo" id="classlist_resultmap">
		<id property="class_no" column="class_no" javaType="int"/>
		<result property="mem_no" column="mem_no"/>
		<result property="class_price" column="class_price"/>
		<result property="class_title" column="class_title"/>
		<result property="class_thumbnail" column="class_thumbnail"/>
		<result property="class_price" column="class_price"/>
			
	<association property="payinfo" column="pay_info_no" javaType="classpayinfovo">
		<id property="pay_info_no" column="pay_info_no"/>
		<result property="mem_no" column="mem_no"/>
		<result property="class_no" column="class_no"/>
		<result property="pay_info_date" column="pay_info_date"/>					
	</association>
</resultMap>

<!-- 수강중인 클래스 목록 띄우기 -->
<select id="classlist_std" resultMap="classlist_resultmap" parameterType="int">
select * from class_info c join pay_info p
on c.class_no = p.class_no
where p.mem_no=#{mem_no} order by c.class_no desc

</select>



<!-- =============
statistic 숫자 카운트		 
================ -->

<!-- 내레시피 -->
<select id="myRecipeCount" resultType="int" parameterType="int">
select count(*) from recipe_info
where mem_no = #{sessionNo}
</select> 

<!-- 내코멘트 -->
 <select id="myReviewCount" resultType="int" parameterType="int">
select count(*) from review
where mem_no = #{sessionNo}
</select> 

<!-- (고객)수강중인 클래스 갯수 -->
<select id="myClassCount" resultType="int" parameterType="int">
select count(*) from class_info c join pay_info p
on c.class_no = p.class_no
where p.mem_no=#{sessionNo}
</select>

<!-- (쉐프)내 클래스를 구매한 사람의 수  -->
<select id="myClientCount" resultType="int" parameterType="int">
select count(*) from pay_info p join class_info c
on p.class_no = c.class_no
where c.mem_no=#{sessionNo}
</select>

<!-- 스크랩한 레시피 갯수 -->
<select id="myScrapCount" resultType="int" parameterType="int">
select count(*) from scrap s join recipe_info r 
on s.recipe_no = r.recipe_no
where s.mem_no=#{sessionNo}
</select>	

<!-- 내가 쓴 레시피의 별점 평균 -->
<select id="myStarAvgCount" resultType="int" parameterType="int">
select avg(star_rate) from review v join recipe_info r 
on v.recipe_no = r.recipe_no
join member_info m 
on r.mem_no = m.mem_no 
where m.mem_no = #{sessionNo}
</select>


</mapper>  

-MypageChefDAOInter

package kr.co.ikosmo.mvc.dao;

import java.util.List;
import java.util.Map;

import kr.co.ikosmo.mvc.vo.ClassVO;
import kr.co.ikosmo.mvc.vo.Recipe_infoVO;


public interface MypageChefDAOInter {
	
	//--------------------
	//(쉐프)레시피 목록 - 페이징
	//--------------------		
	public List<Recipe_infoVO> getList(Map<String,Integer> map); //페이징 처리
	public int getTotalCount();//페이징 카운트	
	
	
	//-----------------
	//(쉐프)클래스 목록 출력	
	//-----------------	
	public List<ClassVO> getClassList(int mem_no);//클래스 리스트
	
	
	//---------------------------
	//(쉐프)가 수강중인 클래스 목록 출력	
	//---------------------------	
	public List<ClassVO> getClassList_std(int mem_no);//쉐프가 수강중인 클래스 리스트
	
	
	//-----------------------
	//(쉐프)statistic 숫자 카운트		
	//-----------------------
	public int getMyRecipeCount(Map<String,Integer> map); //내 레시피 갯수
	public int getMyReviewCount(Map<String,Integer> map); //내 레시피에 달린 리뷰 갯수
	public int getMyClassCount(Map<String,Integer> map); //쉐프가 수강중인 클래스 갯수
	public int getMyClientCount(Map<String,Integer> map); //내가 진행중인 클래스를 듣는 고객의 수
	public int getMyScrapCount(Map<String,Integer> map); //스크랩한 레시피 갯수
	public int getMyStarAvgCount(Map<String,Integer> map); //내가 쓴 레시피의 별점 평균
	
}

- MypageChefDAOImple

package kr.co.ikosmo.mvc.dao;

import java.util.List;

import java.util.Map;

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

import kr.co.ikosmo.mvc.vo.ClassVO;
import kr.co.ikosmo.mvc.vo.Recipe_infoVO;

@Repository
public class MypageChefDAOImple implements MypageChefDAOInter{
	
	@Autowired
	private SqlSessionTemplate ss;
	
	//--------------------
	//(쉐프)레시피 목록 - 페이징
	//--------------------	
	@Override
	public List<Recipe_infoVO> getList(Map<String,Integer> map){ //nowPage등으로 연산이 된  start,end
		return ss.selectList("mppc.listc",map);
	}
	@Override
	public int getTotalCount() {//전체 데이터를 기준으로 페이지를 나눌것이기 때문에..
		return ss.selectOne("mppc.totalCountc");
	}
	
	//-----------------
	//(쉐프)클래스 목록 출력	
	//-----------------	
	@Override
	public List<ClassVO> getClassList(int mem_no) { //클래스 리스트 출력
		return ss.selectList("mppc.classlistC", mem_no);
	}
	
	//---------------------------
	//(쉐프)가 수강중인 클래스 목록 출력	
	//---------------------------	
	public List<ClassVO> getClassList_std(int mem_no) {//쉐프가 수강중인 클래스 리스트
		return ss.selectList("mppc.classlist_std", mem_no);
	}
	
	
	//-----------------------
	//(쉐프)statistic 숫자 카운트		
	//-----------------------
	@Override
	public int getMyRecipeCount(Map<String,Integer> map) { //내 레시피 갯수
		return ss.selectOne("mppc.myRecipeCount", map);
	}
	@Override
	public int getMyReviewCount(Map<String,Integer> map) { //내 레시피에 달린 리뷰 갯수
		return ss.selectOne("mppc.myReviewCount", map);
	}
	@Override
	public int getMyClassCount(Map<String,Integer> map) { //쉐프가 수강중인 클래스 갯수
		return ss.selectOne("mppc.myClassCount", map);
	}
	@Override
	public int getMyClientCount(Map<String,Integer> map) { //내가 진행중인 클래스를 듣는 고객의 수
		return ss.selectOne("mppc.myClientCount", map);
	}
	@Override
	public int getMyScrapCount(Map<String,Integer> map) { //스크랩한 레시피 갯수
		return ss.selectOne("mppc.myScrapCount", map);
	}
	@Override
	public int getMyStarAvgCount(Map<String,Integer> map) { //내가 쓴 레시피의 별점 평균
		return ss.selectOne("mppc.myStarAvgCount", map);
	}
	
}

- MypageChefController

package kr.co.ikosmo.mvc.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import kr.co.ikosmo.mvc.dao.MypageChefDAOInter;
import kr.co.ikosmo.mvc.dao.MypageDAOInter;
import kr.co.ikosmo.mvc.vo.ClassVO;
import kr.co.ikosmo.mvc.vo.Mypage_ingVO;

@Controller
public class MypageChefController {

	
	@Autowired
	private MypageChefDAOInter mypageChefDAOInter;
	
	

//-----------------------
//(쉐프)레시피 리스트 목록(페이징x)	
//-----------------------
	@RequestMapping(value="/Mypage_chef")
	public String listSearch(Mypage_ingVO vo, Model model, HttpSession session,
			@RequestParam(value="nowPage", required=false ,defaultValue="1") 
			String nowPage,
			@RequestParam(value="cntPerPage", required=false , defaultValue="5") 
			String cntPerPage){
		
		int total = mypageChefDAOInter.getTotalCount();

		vo = new Mypage_ingVO(total, Integer.parseInt(nowPage), Integer.parseInt(cntPerPage));
		System.out.println("Start :"+vo.getStart());
		System.out.println("End :"+vo.getEnd());
		Integer sessionNo = (Integer)session.getAttribute("memNo");
				Map<String,Integer> map = new HashMap();
				map.put("start",vo.getStart());
				map.put("end",vo.getEnd());
				map.put("sessionNo",sessionNo); //세션 넘버가 같은걸로 개인 레시피를 불러온다.

		model.addAttribute("paging", vo);
		model.addAttribute("listc", mypageChefDAOInter.getList(map));
//-------------------------
//(쉐프)클래스 리스트 목록(동일페이지)	
//-------------------------		
		//클래스 리스트출력-------------------------------------------------
		int mem_no = Integer.parseInt(session.getAttribute("memNo").toString());
		  System.out.println("클래스 리스트에 출력되는 mem번호 : "+ mem_no); //콘솔확인
		  
		  
	  List<ClassVO> classlistC = mypageChefDAOInter.getClassList(mem_no); //쉐프가 가르치는 클래스 목록
	  List<ClassVO> classlist_std = mypageChefDAOInter.getClassList_std(mem_no);//쉐프가 수강중인 클래스 목록 띄우기
	  
	  model.addAttribute("classlistC", classlistC); //쉐프가 가르치는 클래스 목록
	  model.addAttribute("classlist_std", classlist_std); //쉐프가 수강중인 클래스 목록 띄우기
		//클래스 리스트출력 끝-------------------------------------------------
	  
//-------------------------
//(쉐프)statistic 숫자 카운트	
//-------------------------		  
		//statistic 숫자출력-------------------------------------------------
	  	model.addAttribute("myRecipeCount", mypageChefDAOInter.getMyRecipeCount(map)); //내 레시피 갯수
	  	model.addAttribute("myReviewCount", mypageChefDAOInter.getMyReviewCount(map)); //내 레시피에 달린 리뷰 갯수
		model.addAttribute("myClassCount", mypageChefDAOInter.getMyClassCount(map)); //쉐프가 수강중인 클래스 갯수
		model.addAttribute("myClientCount", mypageChefDAOInter.getMyClientCount(map)); //내가 진행중인 클래스를 듣는 고객의 수
		model.addAttribute("myScrapCount", mypageChefDAOInter.getMyScrapCount(map)); //스크랩한 레시피 갯수
		model.addAttribute("myStarAvgCount", mypageChefDAOInter.getMyStarAvgCount(map)); //내가 쓴 레시피의 별점 평균
		//statistic 숫자출력 끝-------------------------------------------------
		
		
		return "tiles/Mypage_chef";
	}
	
	
	
}

2) jsp - Mypage_Chef.jsp(전체)

Mypage_chef.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 lang="en">
<head>
  <meta charset="utf-8">
  <title>마이페이지</title>
<!--   <base href=""> -->
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="./resources/img/favicon.ico">
  


<link rel="stylesheet" type="text/css" href="./resources/css/header.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/main.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/style.css" media="all" />



<!-- 따로 추가 -->
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.3.1/css/all.min.css" rel="stylesheet">
<!------ Include the above in your HEAD tag ---------->

<!-- 
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/bootstrap.min.css" media="all" /> 

 
<link rel="stylesheet" type="text/css" href="./resources/css/primary-skin.css" media="all" />

<link rel="stylesheet" type="text/css" href="./resources/css/plugins/animate.min.css" media="all" />



<link rel="stylesheet" type="text/css" href="./resources/css/plugins/magnific-popup.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick-theme.css" media="all" />
<!--

-->


  
  <!--********** 【 js 링크 걸기 】********** -->

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.min.js"></script>
<script src="./resources/js/main.js" type="text/javascript" charset="utf-8"></script>

<script src="./resources/js/plugins/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>



<!-- 
<script src="./resources/js/plugins/isotope.pkgd.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.countdown.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.magnific-popup.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.slimScroll.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.steps.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery-3.4.1.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/popper.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/slick.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/waypoint.js" type="text/javascript" charset="utf-8"></script> 
-->
  
  
<!--  
  -->
  
  
</head>
<body>
 
  
  <app-root>


<!-- 마이페이지 Start -->
<section id="about-us" class="py-5">
    <div class="container">
        <div class="row">
             <!--left sidebar-->
            <div class="col-md-3 pr-md-4">
                <div class="sidebar-left">
                    <!--sidebar menu-->
                    <ul class="list-unstyled sidebar-menu pl-md-2 pr-md-0">
                        <li>
                            <a class="sidebar-item active d-flex justify-content-between align-items-center" href="Myrecipe_list">
                                내가 쓴 레시피 보기
                                <span class="fas fa-copy"></span>
                            </a>
                        </li>
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="My_bigdata">
                           		 내 레시피 정보(빅데이터)
                                <span class="fas fa-chart-line"></span>
                            </a>
                        </li>
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="review">
                                나에게 달린 코멘트
                                <span class="side-notif" title="1 new comment"></span>
                                <span class="fas fa-comment"></span>
                            </a>
                        </li>
                        
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="">
                                레시피 스크랩
                                <span class="fas fa-bookmark"></span>
                            </a>
                        </li>                       
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="storeCart">
                                장바구니
                                <span class="fas fa-cart-arrow-down"></span>
                            </a>
                        </li>
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="chat_us2">
                                고객센터 챗봇
                                <span class="side-notif" title="1 new messages"></span>
                                <span class="fas fa-headset"></span>
                            </a>
                        </li>
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center"  href="info_change">
                                회원정보수정
                                <span class="fas fa-user-cog"></span>
                            </a>
                        </li> 
                        <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center" href="logout">
                                로그아웃
                                <span class="fas fa-sign-out-alt"></span>
                            </a>
                        </li>
                          <li>
                            <a class="sidebar-item d-flex justify-content-between align-items-center" href="memberDelete">
                                회원탈퇴
                                <span class="fas fa-user-slash"></span>
                            </a>
                        </li> 
                    </ul>
                </div>
            </div>
            
            <!--Content-->
            <div class="col-md-9">
                <div class="dashboard-area">
                    <div class="row">
                        <div class="col-12">
                            <div class="mb-3 bg-dark">
                                <div class="row">
                                    <div class="col-12">
                                        <a class="position-absolute ml-3 mt-3 text-white" href="info_change" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="Edit cover images"><i class="fas fa-cog"></i></a>
                                        <div class="row">
                                            <div class="col-md-6 ml-auto mr-auto">
                                               <div class="profiles p-3 my-4 rounded text-center shadow-sm">
                                                    <div class="avatars">
                                                        
                                                            <img src="${pageContext.request.contextPath}/resources/image/member_upload/${sessionScope.memPic}" style="height: 100px; width: 100px;" 
                                                            alt="Circle Image" class="avatar-lg rounded-circle img-fluid" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="Edit avatar images">
                                
                                                    </div>
                                                    <div class="names">
                                                        <h3 class="title text-light">"${sessionScope.memNickname}" 쉐프님 <br>환영합니다.</h3>
                                                        <a href="#" class="btn btn-link btn-facebook"><i class="fab fa-facebook"></i></a>
                                                        <a href="#" class="btn btn-link btn-twitter"><i class="fab fa-twitter"></i></a>
                                                        <a href="#" class="btn btn-link btn-gplus"><i class="fab fa-google-plus"></i></a>
                                                        <a href="#" class="btn btn-link btn-instagram"><i class="fab fa-instagram"></i></a>
                                                        <a href="#" class="btn btn-link btn-youtube"><i class="fab fa-youtube"></i></a>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                     </div>
                                 </div>
                            </div>
                        </div>
                    </div>
                    <div class="row">
                        <div class="col-12">
                            <ul class="nav nav-pills mb-4" id="pills-tab" role="tablist">
                                <li class="nav-item">
                                    <a class="nav-link active show" id="pills-home-tab" data-toggle="pill" href="#pills-home" role="tab" aria-controls="pills-home" aria-selected="true">Statistic</a>
                                </li>
                                <li class="nav-item">
                                    <a class="nav-link" id="pills-profile-tab" data-toggle="pill" href="#pills-profile" role="tab" aria-controls="pills-profile" aria-selected="false">Profile</a>
                                </li>
                                <li class="nav-item">
                                    <a class="nav-link" id="pills-contact-tab" data-toggle="pill" href="#pills-contact" role="tab" aria-controls="pills-contact" aria-selected="false">Lastest Post</a>
                                </li>
                                <li class="nav-item">
                                    <a class="nav-link" id="pills-class-tab" data-toggle="pill" href="#pills-class" role="tab" aria-controls="pills-class" aria-selected="false">Class</a>
                                </li>
                                <li class="nav-item">
                                    <a class="nav-link" id="pills-class_std-tab" data-toggle="pill" href="#pills-class_std" role="tab" aria-controls="pills-class_std" aria-selected="false">Class_std</a>
                                </li>

                            </ul>
                            <div class="tab-content" id="pills-tabContent">
                                <div class="tab-pane fade active show" id="pills-home" role="tabpanel" aria-labelledby="pills-home-tab">
                                    <div class="row">
                                        <div class="col-lg-4 col-sm-6">
                                            <a class="member-item" href="">
                                                <div class="card mb-2 mb-md-5 py-3">
                                                    <div class="content">
                                                        <div class="row">
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="icon-big text-warning text-center">
                                                                    <i class="fas fa-copy"></i>
                                                                </div>
                                                            </div>
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="numbers">
                                                                    <p>내 레시피</p>
                                                                    ${myRecipeCount}
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
                                                </div>
                                            </a>
                                        </div>
                                        <div class="col-lg-4 col-sm-6">
                                            <a class="member-item" href="">
                                                <div class="card mb-2 mb-md-5 py-3">
                                                    <div class="content">
                                                        <div class="row">
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="icon-big text-info text-center" title="1 new comment">
                                                                    <div class="notif"></div>
                                                                    <i class="fas fa-comment"></i>
                                                                </div>
                                                            </div>
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="numbers">
                                                                    <p>코멘트</p>
                                                                    ${myReviewCount}
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
                                                </div>
                                            </a>
                                        </div>
                                        <div class="col-lg-4 col-sm-6">
                                            <a class="member-item" href="">
                                                <div class="card mb-2 mb-md-5 py-3">
                                                    <div class="content">
                                                        <div class="row">
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="icon-big text-danger text-center">
                                                                    <i class="fas fa-bookmark"></i>
                                                                </div>
                                                            </div>
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="numbers">
                                                                    <p>레시피 스크랩</p>
                                                                   ${myScrapCount}
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
                                                </div>
                                            </a>
                                        </div>
                                       <div class="col-lg-4 col-sm-6">
                                            <a class="member-item" href="">
                                                <div class="card mb-2 mb-md-5 py-3">
                                                    <div class="content">
                                                        <div class="row">
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="icon-big text-success text-center">
                                                                    <i class="fas fa-utensils"></i>
                                                                </div>
                                                            </div>
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="numbers">
                                                                    <p>수강중인 클래스</p>
                                                                    ${myClassCount}
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
                                                </div>
                                            </a>
                                        </div>
                                        <div class="col-lg-4 col-sm-6">
                                            <a class="member-item" href="">
                                                <div class="card mb-2 mb-md-5 py-3">
                                                    <div class="content">
                                                        <div class="row">
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="icon-big text-facebook text-center">
                                                                    <i class="fas fa-users"></i>
                                                                </div>
                                                            </div>
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="numbers">
                                                                    <p>클래스 구독자</p>
                                                                    ${myClientCount}
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
                                                </div>
                                            </a>
                                        </div>
                                       <div class="col-lg-4 col-sm-6">
                                            <a class="member-item" href="">
                                                <div class="card mb-2 mb-md-5 py-3">
                                                    <div class="content">
                                                        <div class="row">
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="icon-big text-warning text-center">
                                                                    <i class="fas fa-star"></i>
                                                                </div>
                                                            </div>
                                                            <div class="col-6 d-flex justify-content-center align-items-center">
                                                                <div class="numbers">
                                                                    <p>내 평균 별점</p>
                                                                    ${myStarAvgCount}
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
                                                </div>
                                            </a>
                                        </div>                                        
                                    </div>
                                </div>
                                <div class="tab-pane fade" id="pills-profile" role="tabpanel" aria-labelledby="pills-profile-tab">
                                    <div class="p-3 border mb-3">
                                        <a class="position-absolute" style="right: 25px" href="info_change" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="Edit profile"><i class="fas fa-user-cog"></i></a>
                                        <h3>"${sessionScope.memNickname}" 쉐프님의 정보입니다.</h3>
								
										<p><b>아이디: </b>${sessionScope.memId}</p>
										<p><b>이름: </b>${sessionScope.memName}</p>
										<p><b>닉네임: </b>${sessionScope.memNickname}</p>
										<p><b>이메일: </b>${sessionScope.memEmail}</p>
										<p><b>핸드폰번호: </b>${sessionScope.memPhone}</p>		

                                        </div>
                                    </div>
                                    

                                <div class="tab-pane fade" id="pills-contact" role="tabpanel" aria-labelledby="pills-contact-tab">
                                    <div class="p-3 border mb-3">
                                        <h5>최근 등록한 레시피 보기</h5>
                                        <div class="row">
                                            <div class="col-12">
                                                <ul class="list-unstyled statistics">

												<table>
													<thead>
														<tr>
															<th colspan="5">최근 등록한 레시피</th>
														</tr>
														<tr>
															<td>번호</td>
															<td>섬네일</td>
															<td>제목</td>
															<td>조회수</td>
															<td>등록일자</td>
															
														</tr>
													</thead>
													<tbody>
														<c:forEach var="listc" items="${listc}">
															<tr>
																<td>${listc.recipe_no}</td>
																<td><a href="recipe_detail?recipe_no=${listc.recipe_no}"><img src="${pageContext.request.contextPath}/resources/image/recipe_upload/${listc.recipe_thumbnail}"  
																		style="height: 100px; width: 100px;"/></a></td>
																<td><a href="recipe_detail?recipe_no=${listc.recipe_no}">${listc.recipe_title}</a></td>
																<td>${listc.visit_cnt}</td>
																<td>${listc.recipe_uploadtime}</td>
																
															</tr>
														</c:forEach>
													</tbody>
												</table>

                                                </ul>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                              <div class="tab-pane fade" id="pills-class" role="tabpanel" aria-labelledby="pills-class-tab">     
                                    <div class="p-3 border mb-3">
									    <h5>쉐프의 클래스 수업 목록 보기</h5>
									      <div class="row">
									     <div class="col-12">
									     <ul class="list-unstyled statistics">
									
												<table>
													<thead>
														<tr>
															<th colspan="5">나의 클래스 리스트</th>
														</tr>
														<tr>
															<td>번호</td>
															<td>섬네일</td>
															<td>제목</td>
															<td>가격</td>
															<td>상태</td>
															
														</tr>
													</thead>
													<tbody>
														<c:forEach var="classlistC" items="${classlistC}">
															<tr>
															<!-- 세션값을 여기에서 mem_no로 숨겨받아서 다시 Controller로  -->
															<input type="hidden" name="mem_no" id="mem_no" value="${sessionScope.memNo}"/>
															
																<td>${classlistC.class_no}</td>
																<td><a href="class_detail?class_no=${classlistC.class_no}"><img src="${pageContext.request.contextPath}/resources\image\FoodImg/${classlistC.class_thumbnail}"  
																					style="height: 100px; width: 100px;"/></a></td>
																<td><a href="class_detail?class_no=${classlistC.class_no}">${classlistC.class_title}</a></td>
																<td>${classlistC.class_price}</td>
																<td>
																	<c:set var="admin_app" value="${classlistC.admin_app}" />
		
																		<c:if test="${admin_app eq 0}">
																		    <p style="color:green;">대기중</p>
																		</c:if>
																		<c:if test="${admin_app eq 1}">
																		   <p style="color:blue;"> 승인됨</p>
																		</c:if>
																		<c:if test="${admin_app eq 3}">
																		   <p style="color:red;"> 반려</p>
																		</c:if>
																</td>
															</tr>
														</c:forEach>
													</tbody>
												</table>
									
									           </ul>
									           </div>
									           </div>
									           </div>
                                    
                                </div><!-- 클래스 끝 -->
                                
                                 <div class="tab-pane fade" id="pills-class_std" role="tabpanel" aria-labelledby="pills-class_std-tab">                                    
                                     <div class="p-3 border mb-3">
									    <h5>수강중인 클래스 보기</h5>
									      <div class="row">
									     <div class="col-12">
									     <ul class="list-unstyled statistics">
									
												<table>
													<thead>
														<tr>
															<th colspan="5">클래스 리스트</th>
														</tr>
														<tr>
															<td>번호</td>
															<td>섬네일</td>
															<td>제목</td>
															<td>가격</td>
															<td>구매일자</td>
															
														</tr>
													</thead>
													<tbody>
														<c:forEach var="classlist_std" items="${classlist_std}">
															<tr>
															<!-- 세션값을 여기에서 mem_no로 숨겨받아서 다시 Controller로  -->
															<input type="hidden" name="mem_no" id="mem_no" value="${sessionScope.memNo}"/>
																<td>${classlist_std.class_no}</td>
																<td><a href="class_detail?class_no=${classlist_std.class_no}"><img src="${pageContext.request.contextPath}/resources\image\FoodImg/${classlist_std.class_thumbnail}"  
																					style="height: 100px; width: 100px;"/></a></td>
																<td><a href="class_detail?class_no=${classlist_std.class_no}">${classlist_std.class_title}</a></td>
																<td>${classlist_std.class_price}</td>
																<td>${classlist_std.payinfo.pay_info_date}</td>
															</tr>
														</c:forEach>
													</tbody>
												</table>
									
									           </ul>
									      </div>
									  </div>
									</div>
                                </div><!-- 수강클래스 끝 -->
                                
                                                            
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</section>
  <!--마이페이지 End -->

 
  
 </app-root> 
 
</body>
</html>

5. 기타 기능 구현

1) 로그인 시 쉐프와 일반인 마이페이지 분기 나누기

- tiles의 header와 aaa/bbb/index 에서 분기 나누기

header.jsp / index.jsp

더보기
더보기

<li _ngcontent-efm-c6="" class="menu-item">
<c:choose>
<c:when test="${sessionScope.memGrade_no == '일반인'}"><a ngcontent-efm-c6="" href="Mypage">MyPage</a></c:when>
<c:when test="${sessionScope.memGrade_no == '쉐프'}"><a ngcontent-efm-c6="" href="Mypage_chef">Mypage_chef</a></c:when>
</c:choose>
</li>

2) 로그인 안하면 마이페이지 안뜨게 하기 -> 확인해보기

 

3)contact_us 페이지 구현 - 지도

contact_us.jsp

더보기
더보기

- contact_us.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>contact_us</title>
<!--   <base href=""> -->
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="./resources/img/favicon.ico">
  

<link rel="stylesheet" type="text/css" href="./resources/css/header.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/main.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/style.css" media="all" />


<!-- 따로 추가 -->
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.3.1/css/all.min.css" rel="stylesheet">
<!------ Include the above in your HEAD tag ---------->

<!-- 
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/bootstrap.min.css" media="all" /> 

 
<link rel="stylesheet" type="text/css" href="./resources/css/primary-skin.css" media="all" />

<link rel="stylesheet" type="text/css" href="./resources/css/plugins/animate.min.css" media="all" />



<link rel="stylesheet" type="text/css" href="./resources/css/plugins/magnific-popup.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick.css" media="all" />
<link rel="stylesheet" type="text/css" href="./resources/css/plugins/slick-theme.css" media="all" />
<!--

-->


  
  <!--********** 【 js 링크 걸기 】********** -->

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.min.js"></script>
<script src="./resources/js/main.js" type="text/javascript" charset="utf-8"></script>

<script src="./resources/js/plugins/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>



<script src="./resources/js/plugins/isotope.pkgd.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.countdown.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.magnific-popup.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.slimScroll.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery.steps.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/jquery-3.4.1.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/popper.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/slick.min.js" type="text/javascript" charset="utf-8"></script>
<script src="./resources/js/plugins/waypoint.js" type="text/javascript" charset="utf-8"></script>
  
  
<!--  
  -->
  
  
</head>
<body>
 
  
  <app-root>

<!-- Subheader Start -->
  <div class="subheader bg-cover dark-overlay dark-overlay-2" style="background-image: url('${pageContext.request.contextPath}/resources/img/bg/1.jpg')">
    <div class="container">
      <div class="subheader-inner">
        <h1>Contact Us</h1>
        <nav aria-label="breadcrumb">
          <ol class="breadcrumb">
            <li class="breadcrumb-item"><a href="index">Home</a></li>
            <li class="breadcrumb-item active" aria-current="page">Contact Us</li>
          </ol>
        </nav>
      </div>
    </div>
  </div>
  <!-- Subheader End -->

  <!-- Contact Info Start -->
  <div class="section section-padding">
    <div class="container">
      <div class="row">
        <div class="col-lg-6 col-md-6 col-sm-6">
          <div class="ct-info-box">
            <div class="ct-info-box-icon">
              <i class="flaticon-call"><span class="fas fa-phone"></span></i>
              <h5>Call Me</h5>
              <span>02-2025-8523</span>
            </div>
          </div>
        </div>
        <div class="col-lg-6 col-md-6 col-sm-6">
          <div class="ct-info-box">
            <div class="ct-info-box-icon">
              <i class="flaticon-email"><span class="fas fa-mail-bulk"></span></i>
              <h5>Mail Me</h5>
              <span>swkosmo@daum.net</span>
            </div>
          </div>
        </div>
        <div class="col-lg-12 col-md-12 col-sm-12">
          <div class="ct-info-box">
            <div class="ct-info-box-icon">
              <i class="flaticon-location"><span class="fas fa-map-marked-alt"></span></i>
              <h5>Find Me</h5>
              <span>(153-759) 서울시 금천구 가산동 426-5 월드메르디앙 2차 413호</span>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
  <!-- Contact Info End -->

  <!--Contact Form Start -->
  <section class="section pt-0">
    <div class="container">
   <div class="contact__map">
		<iframe
         src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3166.2302750067292!2d126.87673151530922!3d37.4788919798144!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x357b61e3354204f9%3A0x12b02f6401815f80!2z7ZWc6rWt7IaM7ZSE7Yq47Juo7Ja07J247J6s6rCc67Cc7JuQ!5e0!3m2!1sko!2skr!4v1609583631078!5m2!1sko!2skr"
              height="500" width="1100" style="border:0" allowfullscreen="">
        </iframe>
    </div>
</div>
  </section>
  <!--Contact Form End -->
 
 </app-root> 
 
</body>
</html>


반응형
LIST

댓글