반응형
SMALL

프론트엔드 단에서 자바스크립트만 열심히 만지다보니 이벤트나 메소드는 익숙해지고 있으나 서버단, 그리고 SQL 쿼리는 점차 까먹기에 이르렀다.

학원 다니면서 만들어봤던 쇼핑몰 프로젝트도 열심히 했지만, 여러명이서 나눠서 했기 때문에 디테일한 부분은 잘 모르는게 사실이다. 다시 복기시키는 겸, 요즘 열심히 하는 네이버 블로그의 폼을 따서 나만의 블로그(이지만 실상은 게시판인)를 만들어보기로 했다.

디자인은 크게 자신이 없어서 네이버 소스보기로 틀을 긁어오고, 나머지는 BootStrap을 사용할 예정이다.

회원가입/로그인 기능도 구글링해서 기본 테이블 제작 후, 후에 세부적으로 커스터마이징 하기로 마음먹었다.

하나하나 한걸 나눠서 전부 포스팅하면 좋을거라 생각하지만.... 로그인/회원가입 예제는 구글링에 잘 나와있어 참고한 링크만 걸어놓는다.


1. 초기 세팅

이클립스를 설치하고 DB를 세팅한다.

 

[Eclipse] 이클립스 (Eclipse) 설치 및 프로젝트 생성

● 이클립스 (Eclipse) 란? - 다양한 플랫폼에서 쓸 수 있으며, 자바를 비롯한 다양한 언어를 지원하는 프로그래밍 통합 개발 환경을 목적으로 시작하였으나, 현재는 OSGi를 도입하여, 범용 응용 소

daram2-everyday.tistory.com

 

[Eclipse] 이클립스 (Eclipse) - 테마 및 폰트 사이즈 변경

안녕하세요 오늘은 이클립스 테마(배경색) 및 글자 크기를 변경하려고 합니다 개발하시는 분들 입장에서 하얀색 배경과 검정 글자를 장시간보다 보면 눈이 금방 피로해지는데 저는 그래서 이클

daram2-everyday.tistory.com

 

[Eclipse] 톰캣(Tomcat) 이클립스에서 실행하기 - 간단 예제 JSP

이클립스에서 톰캣(WAS) 서버를 만든 후 간단한 예제를 통해 홈페이지에 "안녕하세요" 를 출력해보겠습니다. 1. 톰캣 연동 이클립스에서 Window -> Preferences 클릭 Server -> Runtime Environments -> Add.. 클릭 A

daram2-everyday.tistory.com

 

[Eclipse] JSP/HTML 실행결과 외부 웹 브라우저로 띄우기

JSP/HTML 실행 결과가 이클립스 말고 외부 웹브라우저 (ex: 익스플로러, 크롬 등)로 띄우기입니다. 바로 시작해보죠 Go Go 위와 같이 JSP 또는 HTML 실행 시 이클립스 내부 브라우저로 실행 결과가 출력

daram2-everyday.tistory.com

 

[JAVA] JDK 1.8 설치 및 환경변수 설정

● JDK란? - 자바 개발 키트(Java Development Kit, JDK)는 JAVA SE, JAVA EE, 또는 모바일 지원 JAVA ME 플랫폼 중 하나를 구현한 것으로 솔라리스, 리눅스, 맥 OS X, 윈도우 자바 개발자를 대상으로 오라클에 의해

daram2-everyday.tistory.com

이미 시스템 > 고급 시스템 설정 > 시스템속성 고급탭 > 환경변수 > jdk1.8.0_281 가 JAVA_HOME으로 등록되어있음.

환경변수 설정

DB는 예전에 설치한 SQL Developer 사용했다.

 

[Oracle] 계정 생성 및 권한 부여 방법

Oracle 11g 기준으로 작성된 글입니다. oracle 11g 설치를 다 하신 후에 cmd와 sql developer에서 oracle에 접근해 계정 설정이 가능합니다. 1. cmd에서 계정 설정하기 1) cmd에서 접속하기 sqlplus 로 접속하시면 u

ajdahrdl.tistory.com

계정은 system이 가장 상위이다. 12345 비번으로 되어있었음. cmd에서 새로 계정 만들고 권한주고 할 수 있음. BlogDB 계정을 따로 만들어서 거기서 작업해주자. 비밀번호도 재설정해주었다.

DB계정 설정

2. 회원가입/로그인 기본 기능 만들기

dynamic Web project로 진행함.

처음에는 그대로 따라서 만들었다.

 

웹서버 2일차 - Apache Tomcat9으로 웹서버 구현하기 - 회원가입 페이지 만들기-①

오늘의 영타는 315타 웹서버(Web Server)가 있다. 웹서버는 http라는 통신 규약을 사용하고 있다. 인터넷...

blog.naver.com

 

 

 

웹서버 3일차 - 회원가입 페이지 만들기 -②

오늘의 영타는 341타. (드디어 340타 돌파~) 2019.03.13 어제 하던 회원 가입 페이지 만들기 계속해서 진행...

blog.naver.com

이클립스 자동 정렬 Shrift + Ctrt + F

이클립스 자동 import Ctrl+ Shift + O

 

웹서버 4일차 - 회원가입 홈페이지 - ③

사용 프로그램 : 이클립스(Eclipse) 회원가입 홈페이지 만들기 - 좀 더 해보기  는 공백을 만들어...

blog.naver.com

me로 끝나는 가상페이지로 이동시켜서 컨트롤러에서 그에 해당하는 Action페이지로 갈 수 있게 한다. 실제 페이지 주소를 숨긴다.

 

웹서버 5일차 - 홈페이지 만들기 진행 중 - 수정 완료 - ④

어제까지 했던 부분이 회원가입을 누른다면 회원가입 페이지로 넘어가고 정보를 입력할 수 있도록 하는 부...

blog.naver.com

여기까지 회원가입 버튼 누르면 DB에 데이터 들어가는거까지 완료했다.

여기서 뭐가 안되나 했더니, context.xml에서 Resource name = “jdbc/oracleDB”로 되어있었는데 내 오라클 이름은 myora 였다. 이거 언제 어디서 설정했는지 모르겠음…몰?루ㅋㅋ

→ 찾았다. JdbcUtil 안에 DB 이름이 설정되어있다. 내 DB이름 어디서 설정했더라...

▼ 지금까지 과정 요약

더보기

dynamic Web Project 만들고 WebContent 아래에 화면 만들어서 각자 연결한다.

각 페이지 연결은 href로 각각 연결해주는 것도 있지만 Controller 단에서 가상의 페이지(.me)를 만든 뒤 만약 링크가 거기로 접속한다면 이리로 가라! 라는 식으로 연결해줬다. 로그인 가상창, 회원가입 가상창, 회원가입버튼 누를 시 액션을 취하는 가상창까지 만듦. input을 누르면 가상창으로 간다.

(컨트롤러에서 doGet부분만 doProcess로 가게 해줬는데, doPost도 doProcess(req,resp);를 추가해줬다.)

그래서 doProcess에서 주소 가져오고.로그인.me로 가면 로그인 창으로 이동해주고~ 회원가입 버튼 누르면 me로 가서 이동해주고~(여기서 경로 문제때문에 한참걸림 ./는 현 위치니까 /로 시작하면 루트 경로라고 생각하고 설정해주기.) 그 후 회원가입을 도와주는 Action.me도 연결은 했는데 여기서 SQL로 보내주는 것. 리모콘 역할.

VO : 사용할 변수 선언 및 getter/setter로 받고 보내줄 변수 준비 / actionForward에서는 어디로 이동할지에 대한 다이렉트 변수 선언

db : 자바와 오라클을 연결해줌. 접속 하고 해제하고 등등 쿼리문 전달도 함

DAO : 정보 넘겨주는 애. 자바랑 오라클 사이에서 전달해줌. 자바 → 오라클

svc : DAO가 고객정보를 DB로 전달해줬으면 얘가 그거 보고 가입 완료했는지 불가했는지 보고 잘 됐으면 DB 커밋하고 안되면 쿼리 롤백하고 DB와의 연결을 끊는다.

action : 입력할 목록 정해주고 vo에서 설정된 변수들을 받아서 목록에 대한 파라미터 설정과 등록이 안되면 alert를 띄우고 등록 잘되면 로그인 페이지로 이동시켜줌

controller : 이 위에서 흩어져있는거 다 가져온 다음에 대가리가 시킴. 야 foward 있으면 주소로 이동해. 가입하고 forward = action.execute(req, resp); 여기서 받은 action을 뜯어서 SQL로 보내준다.

그럼 SQL로 슝 가는것^_^ 예에~~!!


그다음 로그인 기능 구현 시작

 

웹서버 6일차 - 회원가입 정보로 로그인 처리 -⑤

오늘의 영타는 평균 331타. 지금까지 한 것) 멤버로그인으로 이동하게 되면 로그인폼으로 와지고 로그인페...

blog.naver.com

 

 

웹서버 7일차 - 회원가입 홈페이지 -⑥

어제한 것) 회원가입 후 DB에 저장된 정보로 로그인하기. 이번에 해볼 것) 관리자 계정으로 로그인 시, ...

blog.naver.com

회원가입 하고 나니까 로그인은 비슷하게 술술 넘어가네.

 

Connection이란

DBMS 내부의 Pool 속에 미리 생성되어 있는 Connection을 가져다가 사용하고, 사용이 끝나면 Connection을 Pool에 반환한다. pool 속에 미리 생성되어 있는 connection을 가져다가 사용하고, 사용이 끝나면 conne

ok4u.tistory.com

▼ 커넥션풀 / 인스턴스 / 싱글톤 패턴

더보기

커넥션 풀 : DB와 미리 연결해놓은 커넥션 객체들(도구들)을 풀에 저장해뒀다가 클라에서 요청오면 커넥션 객체 빌려주고(접근 가능 도구를 빌려주고) DB에 접근해서 쿼리 막 날린 뒤 볼일 끝나면 다시 커넥션을 반납받아 풀에 저장하는 방식 / 너무 많으면 메모리 차지하니까 주의.

원래 클라가 서버로 게시글 저장 요청을 하면 서버에서 가공해서~그걸 DB에 저장하기 위해 DB랑 커넥션 맺고~DB에 게시글 저장하고~다시 DB랑 커넥션 끊고~ 다시 응답 가공해서~ 클라이언트에게 전달하는 로직인데…. → 이걸 DB랑 커넥션 맺고 끊고 안하게 하기 위해서 미리 연결해놓은 공용 와이파이(?)만 접속하면 내가 거기랑 일일히 연결했다가 끊을 필요가 없다. 그러므로 성능이 향상되는 것.(100명이 각각 데이터 연결할 필요 없이 공용 wifi 쓰면 원래 연결되어있는 wifi 커넥션들을 딱 사용할만큼만 쓸 수 있음)

인스턴스 : 집합의 개별요소. 객체지향이면 어떤 클래스에 속하는 각 객체를 인스턴스라고 함. 만약 list라는 클래스에서 myList라는 객체를 생성(메모리할당)하면 그 클래스의 인스턴스가 생성된다.

예를 들어 붕어빵틀(Class)에 반죽과 팥(변수variable)을 각각 넣어 구우면(인스턴스화) 각각의 붕어빵(Instance)가 탄생한다. 각각의 붕어빵은 객체이면서 각각의 개성이 있는 인스턴스이다.

클래스는 객체를 만들기 위한 설계도 또는 틀이고, 연관된 변수와 메소드를 묶는 집합이다.

객체는 클래스에서 선언한 모양 그대로 생성된 실체이다. 사용될 대상을 의미(=클래스의 인스턴스). 모든 인스턴스를 대표하는 포괄적인 의미

인스턴스는 만들어진 객체를 소프트웨어에 실체화하면 각각의 개성이 있으므로 각각 메모리가 할당되며 객체를 설명할 때 쓴다. 객체의 추상적인 개념이고 관계에 대한 말을 할 때 쓴다.(ex. 객체는 클래스의 인스턴스이다.) 추상적이고 여러 개성이 있으므로 원본(추상적 개념)의 생성된 복제본을 말한다.

https://gmlwjd9405.github.io/2018/09/17/class-object-instance.html

싱글톤 : 객체가 인스턴스화가 되면서 메모리를 할당할 때 그 영역을 1개만 고정해서 쓰는 것(static). 객체의 인스턴스가 오직 1개만 생성되는 패턴이다. 메모리 낭비를 안하고 데이터 공유가 쉽다. 주소가 1개로 고정되니까. 오직 한 개의 인스턴스 생성을 보증한다.

커넥션풀처럼 공통된 객체를 여러개 생성해서 사용할 때에 싱글톤 패턴을 쓴다. DB에 데이터가 공통적으로 있고, 사람들이 로그인을 동시다발적으로 하면 커넥션 풀에서 DB랑 연결된 와이파이를 빌려줘서 필요한 정보만 뺴서 쓰는거니까 싱글톤 패턴을 사용한다고 볼 수 있다.


▼ JSTL 설치 및 세팅

더보기

▼ 이클립스와 Git 연동

더보기
 

웹서버 8일차 - 회원가입 홈페이지 만들기 -⑦

어제한 것) 관리자로 로그인 시, 회원 목록 나타냄. 오늘할 것) 관리자 로그인 후, 회원 목록 중 회원 누르...

blog.naver.com


여기까지 구현된 기능 : 회원가입 / 로그인 / 관리자 로그인 시 회원목록 나오고 관리자는 회원 목록에서 회원 삭제가 가능함.

3. 네이버 CSS 긁어오기

일단 회원가입 페이지 소스보기해서 html 다 긁어오고 style 하나하나 설정해볼 예정

-> 나중에 알고보니 css도 긁어올 수 있더라.

요소 클릭해서 보면
이렇게 css 다 나옴

처음엔 일일히 따서 css 긁어왔는데^^...그래도 뭐 좋은 공부였다.

갑자기 CSS가 안먹더라.

결론적으로는 css 를 인식하지 못하는 mime 문제였던 것 같다. 왜냐면 IE에서 열었을 때 [MIME 형식이 일치하지 않아 CSS가 무시되었습니다.] 라고 떴거든. type=text/css로 되어있는데 왜 안되나 싶은데…

web.xml에서 .css 파일을 읽을 수 있도록 mime 설정 해주니 해결됨. 해결하는데 한참 걸렸다.

 

이클립스(Eclipse) 갑자기 CSS가 안먹을 때

네이버 블로그를 만들어보는 프로젝트 진행중이다. CSS랑 HTML만 긁어서 디자인 만들어놓고 회원가입 및 로그인, 게시판 기능을 구현해보고 있다. 근데 갑자기 어느날 화면이 깨지기 시작함... 심

heannim-world.tistory.com

getter setter 단축키 : Alt + Shift + S → R

4. 테이블 컬럼 맞추고 DB연결

 

java.sql.SQLException:인덱스에서 누락된 IN 또는 OUT 매개변수

이 메세지 나올때는 ps.setString() 하는 부분이 제대로 되어있는지 살펴본다. method 매개인자 개수와 ps.setString 할때 숫자가 틀렸을때 혹은 변수가 틀릴때 나는 에러이다

learn-some-computer-basics1.tistory.com

에러발생...

java.sql.SQLException: 인덱스에서 누락된 IN 또는 OUT 매개변수:: 4 에러메시지 계속 나서 뭔가 했더니 ? 갯수도 맞고 set도 제대로 했는데 왜 안되나 했더니…숫자도 맞춰야하는데 그냥 복붙해서 그랬음..ㅋ

숫자 차례대로 맞춰줘야함.

근데 왜 날짜가 안들어가지? 이상하다...했는데

날짜가 안들어감

name값이 없어서였음. id값으로 가는게 아니라 name값으로 가는거다.

회원가입 부분에 유효성 검사가 생각보다 할게 많았다. ajax부터 다시 주석달면서 DB연결해줌.



여기까지 구글링 보고 기본 세팅 및 회원가입/로그인/회원리스트 출력 및 삭제까지 완료했다.

기본기는 여기 링크에 걸린 것들로 충분히 세팅할 수 있었고, ajax 통신부터 세부적인 부분은 따로 포스팅해볼 예정이다.

5. 회원가입/로그인 소스 정리

1) MEMBERINFO 테이블

MEMBERINFO 테이블

회원 정보를 담은 MEMBERINFO 테이블이다.

회원가입 시 해당 테이블에 데이터를 insert하고, 로그인 시 이 테이블에서 select하여 가입 여부를 확인한다.

▼자세한 소스 보기

더보기

- MemberDAO 에서 설정한 sql 구문

1) 회원가입 SQL 로직

//=========================== 회원가입하는 SQL로직 ===============================
	// MemberJoinService에서 회원가입할 때 DB와 JSP를 연결할 때 인자로 쓰임.
	public int insertMember(MemberBean member) {
		//회원가입 시 DB에 member 정보를 넣는 SQL문(DB 이름 확인하기***)
		//String sql = "insert into memberinfo() values (?,?,?,?,?,?,?,?,?)";
		//memberinfo 테이블이 언제 또 추가될지 모르니 따로 넣자.
		
		String sql = 
				"INSERT INTO memberinfo("
						+ "MEM_NO,"
						+ "MEM_ID,"
						+ "MEM_PWD,"
						+ "MEM_NAME,"
						+ "MEM_BIR_YY,"
						+ "MEM_BIR_MM,"
						+ "MEM_BIR_DD,"
						+ "MEM_GENDER,"
						+ "MEM_MAIL,"
						+ "MEM_PHONE,"
						+ "MEM_REGDATE,"
						+ "MEM_PIC"
				+ ") "
				+ "VALUES( "
						+ "(SELECT NVL(MAX(mem_no), 0) + 1 FROM memberinfo)," //MEM_NO
						+ "?," //MEM_ID
						+ "?," //MEM_PWD
						+ "?," //MEM_NAME
						+ "?," //MEM_BIR_YY
						+ "?," //MEM_BIR_MM
						+ "?," //MEM_BIR_DD
						+ "?," //MEM_GENDER
						+ "?," //MEM_MAIL
						+ "?,"//MEM_PHONE
						+ "TRUNC(SYSDATE)," //MEM_REGDATE
						+ "'default.jpg'" //MEM_PIC
				+ ")";
		
		int insertCount=0;

		try {
			pstmt = con.prepareStatement(sql); 
			//prepareStatement : SQL문 실행하는 기능을 갖는 객체(변수는 ?로, setString으로 아래에 지정함.)
			pstmt.setString(1, member.getMEMBER_ID());
			pstmt.setString(2, member.getMEMBER_PW());
			pstmt.setString(3, member.getMEMBER_NAME());
			pstmt.setString(4, member.getMEMBER_BIR_YY());
			pstmt.setString(5, member.getMEMBER_BIR_MM());
			pstmt.setString(6, member.getMEMBER_BIR_DD());
			pstmt.setString(7, member.getMEMBER_GENDER());
			pstmt.setString(8, member.getMEMBER_MAIL());
			pstmt.setString(9, member.getMEMBER_PHONE());
			insertCount=pstmt.executeUpdate(); //executeUpdate : 데이터베이스 변경할 때
			//select는 executeQuery()를 사용한다.
			// insert, update, delete는 executeUpdate()를 사용한다.
			System.out.println("MemberDAO : 성공");
		
			//이 것을수행해서 정상적으로 된다면 insertCount가 1이 된다.

		} catch (Exception ex) {
			System.out.println("JoinMember 에러 : " + ex);

		} finally {
			close(pstmt); // import static db.JdbcUtil.*;
		}
		return insertCount;
	}

2) 로그인 SQL 로직(select)

//=========================== 로그인하는 SQL로직 ===============================
	// MemberLoginService에서 로그인할 때 DB와 JSP를 연결할 때 인자로 쓰임.
	public String selectLoginId(MemberBean member) { 
		String loginId = null;
		// 로그인 시 사용자가 입력한 아이디와 패스워드로 디비에 저장된 아이디 확인하는 SQL문(DB 이름 확인하기***)
		String sql = "select MEM_ID from memberinfo " + "where MEM_ID=? and MEM_PWD=?";

		try {
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, member.getMEMBER_ID());
			pstmt.setString(2, member.getMEMBER_PW());
			rs = pstmt.executeQuery();
			//select는 executeQuery()를 사용한다.
			// insert, update, delete는 executeUpdate()를 사용한다.
			//쿼리문 처리결과 ResultSet의 객체인 rs에 저장.
			
			if (rs.next()) { 
				//rs객체에서 첫 번째 값 가져오기
				//가져올 값이 있다면~
				loginId = rs.getString("MEM_ID");  //DB 컬럼 이름 쓰기
				//member_id를 가져와서 loginId로 저장하겠다.
			}

		} catch (Exception ex) {
			System.out.println("LoginMember 에러: " + ex);
		} finally {
			close(rs);
			close(pstmt);
		}

		return loginId;
	}

2) Controller에서 Action 페이지로 보냄

회원가입 페이지, 로그인페이지 이동 및 처리할 Action 페이지로 연결한다.

▼자세한 소스 보기

더보기

- 각 분기별로 페이지를 연결해줌.

		//=============== 여기서부터 화원가입/로그인 페이지 연결해줌.  ===============
		
		ActionForward forward = null; 
		// Action이 모든 작업을 끝내고서 이동하는 위치을 가상적으로 지정한 것이 ActionForward이다.
		//ActionForward를 null로 리턴하면 이미 response에 응답을 끝냈다는 의미가 된다. 다른 어떤 페이지로도 이동하지 않는다.
		Action action = null; // execute라는 실행 메소드 return.

		//-------------------- 로그인 버튼 누르면 로그인 페이지로 이동 ---------------------------
		if(command.equals("/member/memberLogin.me")) {
			//전달된 명령이 memberLogin.me라면
			forward = new ActionForward();
			//객체 생성
			forward.setRedirect(true);
			//이동 허락
			forward.setPath("./login.jsp");
			//거기의 주소는 loginForm.jsp로 해라.(이동할 주소 저장)
		}
		
		//-------------------- 회원가입 버튼 누르면 회원가입 페이지로 이동 ---------------------------
		else if(command.equals("/member/memberJoin.me")) { //이거네...
			//member 폴더 안 login.jsp에서 전달된 명령이 member 폴더 안 memberJoin.me라면(컨트롤러 기준은 ROOT)
			forward = new ActionForward();
			//객체 생성
			forward.setRedirect(false);
			//이동 허락 안함
			forward.setPath("./joinUs.jsp");
			//거기 주소는 joinForm.jsp으로 해라.(이동할 주소 저장)
		}
		
		//-------------------- 회원가입을 처리할 memberJoinAction 페이지 생성 ---------------------------
		else if (command.equals("/member/memberJoinAction.me")) {
			
			action = new MemberJoinAction();
			try {
				forward = action.execute(req, resp); //받은 action을 뜯어서 SQL로 보내준다.
				System.out.printf("MemberFrontController : 회원가입 - SQL DB로 보내는 로직 실행 \n",req, resp);
				
				
				//메인페이지로 이동하자.
				//forward.setRedirect(true);
				//forward.setPath("../index.jsp");

			} catch (Exception e) {
				e.printStackTrace();
				System.out.println("MemberFrontController : 회원가입 - SQL DB로 보내는 로직 실패(위에 에러)");
			}
		} //회원가입을 하면 회원 가입이 되어야하는데 이를 DB에 저장도 할 수 있어야함. -> jdbcUtil에서 연결하고 DB로 보냄.
		

		//-------------------- 로그인을 처리할 memberLoginAction 페이지 생성 ---------------------------
		
		 else if(command.equals("/member/memberLoginAction.me")) {
	    	  action = new MemberLoginAction();
	    	  //MemberLoginAction : 로그인 처리 준비. DB접속 전 준비.
	    	  
	    	  try {
	    		  forward = action.execute(req, resp); //받은 action을 뜯어서 SQL로 보내준다.
					System.out.printf("MemberFrontController : 로그인 - SQL DB로 보내는 로직 실행 \n",req, resp);
	    	  }catch (Exception e) {
	    		  e.printStackTrace();
					System.out.println("MemberFrontController : 로그인 - SQL DB로 보내는 로직 실패(위에 에러)");
	    	  }
	      }

forward.setRedirect(true);
forward.setPath("./login.jsp");

를 통해 Path로 주소를 이동시킨다.

생성된 action 은 execute로 요청과 응답값을 받는데, execute() 메소드는 리턴값으로 스트링형을 반환하며, 반환되는 이 리턴값이 무엇이냐에 따라서 그 다음 로직이 어떻게 진행될지가 결정된다고 생각하면 된다.

3) Action 페이지에서 회원가입 처리

회원가입 시 클라이언트는 HTTP 프로토콜을 이용해서 서버로 데이터를 요청한다. 이 때 jsp 페이지에서 폼에 작성한 내용을 파라미터로 하여금 요청(request)에 끼워서 보낼 수 있다. 그래서 jsp 폼에 작성한 내용들이 서버로 전달되는 것.

이 전달된 값을 서버에서 읽기 위해 request.getParameter() 메소드를 사용한다.

반대로 서버에 있는 내용을 클라이언트인 jsp 페이지로 전달해줘야한다고 하면, 다른곳으로 정보를 넘겨주기 위해 request 객체의 attribute 속성을 사용한다. 서블릿 간에 주고받는 데이터들을 setAttribute 한 값을 getAttribute 등으로 꺼내 쓰는 것.

▼자세한 소스 보기

더보기
/* 인터페이스를 함께 추가했다. 회원가입 처리를 위한 클래스이다.*/
public class MemberJoinAction implements Action { //Action을 implements 해줌

	@Override
	public ActionForward execute(HttpServletRequest req, HttpServletResponse resp) throws Exception {

		MemberBean member = new MemberBean(); //vo에 선언한 변수들 import한거.
		//회원 정보를 저장하고 DB로 전달.
		//회원 정보를 가지고 있을 공간이 된다.
		
		
		boolean joinResult = false;
		
		//입력 목록 적어주기(vo에서 받아옴.)
		member.setMEMBER_ID(req.getParameter("MEMBER_ID"));
		member.setMEMBER_PW(req.getParameter("MEMBER_PW"));
		member.setMEMBER_NAME(req.getParameter("MEMBER_NAME"));
		member.setMEMBER_BIR_YY(req.getParameter("MEMBER_BIR_YY"));
		member.setMEMBER_BIR_MM(req.getParameter("MEMBER_BIR_MM"));
		member.setMEMBER_BIR_DD(req.getParameter("MEMBER_BIR_DD"));
		member.setMEMBER_GENDER(req.getParameter("MEMBER_GENDER"));
		member.setMEMBER_MAIL(req.getParameter("MEMBER_MAIL"));
		member.setMEMBER_PHONE(req.getParameter("MEMBER_PHONE"));
			

		MemberJoinService memberJoinService = new MemberJoinService();
		
		//서비스 svc에서 만들어준다. 아래에 회원가입 처리를 해주자.
		
		//=========================== 회원가입 처리 ================================
		joinResult = memberJoinService.joinMember(member);

		ActionForward forward = null;
		if (joinResult == false) { //회원가입 실패 시
			resp.setContentType("text/html;charset=UTF-8");
			PrintWriter out = resp.getWriter(); //위에 있음
			out.println("<script>");
			out.println("alert('회원등록실패')");
			out.println("history.back()");
			out.println("</script>");
		} else { //회원가입 성공 시
			forward = new ActionForward();
			forward.setRedirect(true);
			forward.setPath("./memberLogin.me");
		}
		
		return forward;
	}

}

4) Action 페이지에서 로그인 처리

로그인은 더 간단하게 id 비밀번호만 폼에서 받아서 SQL 검색대로 보내준다.

▼자세한 소스 보기

더보기
/* 인터페이스를 함께 추가했다. 로그인 처리를 위한 클래스이다.*/
public class MemberLoginAction implements Action { //Action을 implements 해줌
	

	@Override
	public ActionForward execute(HttpServletRequest req, HttpServletResponse resp) throws Exception {

		//session을 써서 서버 생성함.
		HttpSession session = req.getSession();
		//session - 페이지 로그인 유지 방법
		//**참고: cookie - 페이지 로그인 유지 방법, 클라이언트 생성. **
		
		
		// session상의 회원 등급은 존재하지 않음. ???
		// DB관리자의 회원 등급은 서로 다름. ???
		
		MemberBean member = new MemberBean();

		member.setMEMBER_ID(req.getParameter("MEMBER_ID"));
		member.setMEMBER_PW(req.getParameter("MEMBER_PW"));
		// vo의 MemberBean에서 아이디와 패스워드를 넘겨받아와라.

		
		
		MemberLoginService memberLoginService = new MemberLoginService();
		//서비스 svc에서 만들어준다. 아래에 로그인 처리를 해주자.
		

		//=========================== 로그인 처리 ================================
		boolean loginResult = memberLoginService.login(member);
		//사용자가 등록되어 있다면 true, 아니라면 false리턴.
		
		ActionForward forward = null; //어디로 갈지?

		if (loginResult) { //로그인 성공 시
			forward = new ActionForward();
			session.setAttribute("id", member.getMEMBER_ID());
			//session에 사용자의 ID 저장.
			forward.setRedirect(true);
			//Redirect유무
			forward.setPath("./memberListAction.me");
			//패스 지정
			
			// ++ 추가로 로그인 했다고 alert를 띄워줄꺼임.
//			resp.setContentType("text/html;charset=UTF-8");
//			PrintWriter out = resp.getWriter();
//			out.println("<script>");
//			out.println("alert('로그인성공');");
//			out.println("</script>");
			
		} else { //로그인 실패 시
			resp.setContentType("text/html;charset=UTF-8");
			PrintWriter out = resp.getWriter();
			out.println("<script>");
			out.println("alert('로그인실패');");
			out.println("location.href='./memberLogin.me';");
			//로그인 창으로 다시 이동하라.
			out.println("</script>");
			
		}//else는 로그인 실패 부분을 담당함.
		//자바 코드에서 문자열을 만들어내서 결과적으로 자바 스크립트로 생성하여 console.log에 표시함.

		return forward; //null이 아니라 forward로 가야지.
		//ActionForward를 null로 리턴하면 이미 response에 응답을 끝냈다는 의미가 된다. 다른 어떤 페이지로도 이동하지 않는다.
	}

}

 

회원가입 기능 구현
로그인 기능 구현

이 다음은 회원가입 기능 중 id 체크나 validation 관련된 기능을 구현해보겠습니다.

▼ 진행중인 gitHub 링크를 남깁니다.

 

GitHub - k-haein/BlogPrj: 회원가입/로그인/게시글 등록 등의 블로그를 처음부터 만듭니다.

회원가입/로그인/게시글 등록 등의 블로그를 처음부터 만듭니다. Contribute to k-haein/BlogPrj development by creating an account on GitHub.

github.com

반응형
LIST
반응형
SMALL

[구현 기능 요약]

1. 회원가입/로그인페이지 회원정보 CRUD

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

 

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

  1. 정보count - 숫자 세기 완료 / 단, 별점 필수
  2. 회원정보출력 - 세션scope로 잘 가져옴
  3. 프로필 사진 수정 - 이미지 첨부 및 저장 / 단, 다시 로그인해야 적용됨
  4. 최근 레시피 목록 출력 - 페이징 걸고 페이징 번호만 숨김. 따라서 최근 5개만 출력되도록 함
  5. 요리 클래스는 갯수가 한정적이라 페이징 안걸고 전부 출력
  6. (쉐프)클래스 - 쉐프 클래스는 자기가 운영하는 클래스로, 각각의 승인 상태가 표시됨. 상태값 데이터 가져와서 아이콘으로 표시

 

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

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

4. 기타 기능 구현

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

5. admin 페이지 대쉬보드

    1. DB 데이터를 불러와서 회원가입자, 요리클래스 신청자 등을 테이블에 표시

    2. 테이블에 표시된 데이터를 이용해서 chart.js를 이용해 그래프로 표시

 

6. admin 페이지 회원권한수정

    1. 회원가입자의 정보를 표시하고 해당 회원의 정보를 수정/삭제 할 수 있도록 함

    2. 그 회원의 게시글 리스트를 출력하고 클릭 시 해당 게시글로 이동함.

 

7. 데이터 스크래핑

   1. Ui-Path로 스크린 스크랩핑을 하여 해당 사이트의 Text를 스크랩핑 -> 요리정보 데이터 수집

   2. 요리 순위에 대해 데이터를 생성하기 어려워 BeautifulSoup 으로 사이트 요리순위 웹크롤링함.


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

반응형
SMALL

+ Recent posts

반응형
LIST