재밌고 어려운 IT를 이해해보자~!

JSP practice 본문

코리아IT핀테크과정

JSP practice

언제나즐거운IT 2024. 1. 6. 22:59

JSP! 
모든 언어가 섞여있는 그곳 ~_~ 너무좋다

프론트엔드가고싶은 마음이 싹사라지게 만드는녀석이다~~~~~

 

과제받은거에 현재 진행중인 프로젝트에 필요한 부분도 넣어서 만들어 보려고 했는데,,,,정확한 지식이 너무없어서 해매다보니 참 힘들었다! 결국 과제관련된건 뭔가 없는듯...
그래도 jsp에 대한 이해는 많이 한 것 같다!!!!!!!!!!

Session에는 어떤 유저정보를 저장해야할까 ..? 잘 모르겠다.

하지만 Nickname으로 하는 건 아닌 것 같았다...

 

만든파일목록

CTRL
MemberBean.java 

MODEL
MemberDAO.java - CRUD 및 Query
MemberDTO.java - 전달가방
MEMBER.sql - DB테이블 생성 및 테스트 sql
JDBCUtil.java - DB연결

VIEW
home.jsp - 홈화면 (로그인 및 회원가입)
register.jsp - 회원가입 화면 (self POST)
logincheck.jsp - 로그인시 아이디 비번 POST 전달받아 확인 후 main화면으로 옮기는 로직
main.jsp - 메인화면 (게시글올린 유저정보조회, 마이페이지, 로그아웃)
mypage.jsp - 내정보 (정보조회및, 닉네임, 비번 변경가능)
logout.jsp - 로그아웃 (세션데이터 모두삭제 후 home이동)
updateNicknamePopup.jsp - 닉네임 변경 (닉네임 중복 검사 후 변경)
updatePasswordPopup.jsp - 비번 변경 (현재비번 새비번 새비번확인 입력받은 후 변경)
userInfo.jsp - 다른유저정보조회 
withdrawPopup.jsp - 회원 탈퇴 (비번입력받아 탈퇴, 등급이 탈퇴로 변경)

 

MemberBean.java

package ctrl;

import java.util.Date;

//여기는 ....DAO DTO로부터 데이터를 받아 
//필요한 메서드, 멤버변수를 선언해서 계산을 하는곳! 기능구현
//CTRL 같은 느낌 ..?
import model.MemberDAO;
import model.MemberDTO;

public class MemberBean {
	// 회원가입하려면 멤버변수 댕많이필요하다
	// 웹브라우저에 출력하기위한 msg 변수 하나선언~
	private int memberNum; // PK
	private String id;
	private String pw;
	private String updatePw;
	private String name;

	private String nickname;
	private String updateNickname;

	private String birthday;
	private int ph;
	private String profile;
	private String grade;
	
	private String msg = "";
	public String getUpdatePw() {
		return updatePw;
	}
	
	public void setUpdatePw(String updatePw) {
		this.updatePw = updatePw;
	}

	public String getUpdateNickname() {
		return updateNickname;
	}
	
	public void setUpdateNickname(String updateNickname) {
		this.updateNickname = updateNickname;
	}
	public String getGrade() {
		return grade;
	}

	public void setGrade(String grade) {
		this.grade = grade;
	}

	
	public String getProfile() {
		return profile;
	}

	public void setProfile(String profile) {
		this.profile = profile;
	}

	// private String grade; -> grade는 쿼리문에 의해 '신입'으로 고정


	// 회원가입해서 DB에 데이터넣기!
	public boolean register() {
		
		// 회원가입창 들어갔을때, register.jsp 스스로에게 POST방식으로 전달하기 때문에
		// 처음 입력안된 상태가 INSERT가 되어버려 cannot insert NULL 에러가 나온다.
		MemberDAO mDAO = new MemberDAO();
		MemberDTO mDTO = new MemberDTO();

		if (id == null) {
			msg = "";
			return false;
		}
		mDTO.setId(id);
		mDTO.setPw(pw);
		mDTO.setName(name);
		mDTO.setNickname(nickname);
		mDTO.setBirthday(birthday);
		mDTO.setPh(ph);
		mDTO.setProfile(profile);
		mDTO.setGrade(grade);
		boolean flag = mDAO.insert(mDTO);
		if (!flag) {
			msg = "<font color='green'>회원가입 실패 :(</font>";
			return false;
		} else {
			msg = "<font color='red'>회원가입 성공! :D</font>";
			return true;
		}

	}

	public MemberDTO login() {
		MemberDAO mDAO = new MemberDAO();
		MemberDTO mDTO = new MemberDTO();
		mDTO.setSearchCondition("login");
		mDTO.setId(id);
		mDTO.setPw(pw);
		mDTO = mDAO.selectOne(mDTO);
		if (mDTO == null) {
			msg = "<font color='red'>로그인 실패</font>";
			return mDTO;
		} else {
			msg = "<font color='green'로그인성공~ :D</font>";
			return mDTO;
		}

	}

	public MemberDTO myInfo() {
		MemberDAO mDAO = new MemberDAO();
		MemberDTO mDTO = new MemberDTO();
		mDTO.setSearchCondition("userCheck");
		mDTO.setNickname(nickname);
		mDTO = mDAO.selectOne(mDTO);
		return mDTO;
	}
	
	

	public boolean updateNickname() {
		if (updateNickname == null) {
			msg = "";
			return false;
		}
		MemberDAO mDAO = new MemberDAO();
		MemberDTO mDTO = new MemberDTO();
		MemberDTO data = new MemberDTO();
		mDTO.setSearchCondition("userCheck");
		mDTO.setNickname(updateNickname);
		data = mDAO.selectOne(mDTO);
		if (data == null) {
			mDTO.setNickname(nickname);
			mDTO.setUpdateNickname(updateNickname);
			mDTO.setSearchCondition("updateNickname");
 			mDAO.update(mDTO);
			return true;
		} else {
			msg = "<font color='red'>중복된 닉네임</font>";
			System.out.println(msg);
			return false;
		
		}
	}
	
	public int updatePw() {
		if (pw == null) {
			msg = "";
			return -1;
		}
		MemberDAO mDAO = new MemberDAO();
		MemberDTO mDTO = new MemberDTO();
		MemberDTO data = new MemberDTO();
		mDTO.setSearchCondition("userCheck");
		mDTO.setNickname(nickname);
		data=mDAO.selectOne(mDTO);
		mDTO.setPw(pw);
		if (mDTO.getPw().equals(data.getPw())) {
			mDTO.setSearchCondition("updatePw");
			mDTO.setPw(updatePw);
			boolean flag = mDAO.update(mDTO);
			if (!flag) {
				msg = "<font color='red'>틀린 비밀번호</font>";
				return 0;
			} else {
				msg = "<font color='red'>변경 성공</font>";
				return 1;
			}
		}
		return 0;
	}

	public boolean withdraw() {
		if (pw == null) {
			msg = "";
			return false;
		}
		MemberDAO mDAO = new MemberDAO();
		MemberDTO mDTO = new MemberDTO();
		mDTO.setSearchCondition("withdraw");
		mDTO.setNickname(nickname);
		mDTO.setPw(pw);
		boolean flag = mDAO.update(mDTO);
		if (!flag) {
			msg = "<font color='red'>틀린 비밀번호</font>";
			return false;
		} else {
			msg = "<font color='red'>탈퇴 성공</font>";
			return true;
		}
	}

	public int getMemberNum() {
		return memberNum;
	}

	public void setMemberNum(int memberNum) {
		this.memberNum = memberNum;
	}

	public String getPw() {
		return pw;
	}

	public void setPw(String pw) {
		this.pw = pw;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getNickname() {
		return nickname;
	}

	public void setNickname(String nickname) {
		this.nickname = nickname;
	}

	public String getBirthday() {
		return birthday;
	}

	public void setBirthday(String birthday) {
		this.birthday = birthday;
	}

	public int getPh() {
		return ph;
	}

	public void setPh(int ph) {
		this.ph = ph;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

}

Bean에는 다양한 메서드와 멥버변수를 정의해놨고, 뭔가 필요하다?! 싶을때마다 만들어서 사용했는데

쓸때없는 것도 너무 많고 정돈이 너무 안되어있다...
-> 앞으로 CTRL은 JSP파일에 하나 만들자! HTML 다지우고 ..

MemberDAO.java

package model;

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

public class MemberDAO {

	private Connection conn; // DB와의 연결을 담당
	private PreparedStatement pstmt; // CRUD 수행을 담당

	private static final String SELECTALL = "";
	// 로그인성공시 닉네임을 세션에 저장하기 위해 닉네임만 가져온다!
	private static final String SELECTONE_LOGIN = "SELECT NICKNAME FROM MEMBER WHERE ID=? AND PW=?";
	private static final String SELECTONE_USERCHECK = "SELECT ID, PW, NAME, NICKNAME, BIRTHDAY, PH, PROFILE, GRADE FROM MEMBER WHERE NICKNAME=?";

	private static final String INSERT = "INSERT INTO MEMBER (MEMBERNUM,ID, PW, NAME, NICKNAME, BIRTHDAY, PH, PROFILE, GRADE) VALUES((SELECT NVL(MAX(MEMBERNUM),0)+1 FROM MEMBER),?,?,?,?,?,?,?,'신입')";
	private static final String UPDATE_WITHDRAW = "UPDATE MEMBER SET GRADE='탈퇴' WHERE NICKNAME=? AND PW=?";
	private static final String UPDATE_PW = "UPDATE MEMBER SET PW=? WHERE NICKNAME=?";
	private static final String UPDATE_NICKNAME = "UPDATE MEMBER SET NICKNAME=? WHERE NICKNAME=?";
	private static final String UPDATE_PH = "UPDATE MEMBER SET PH=? WHERE ID=?";
	private static final String DELETE = "DELETE FROM MEMBER WHERE NICKNAME=? PW=?";

	public ArrayList<MemberDTO> selectAll(MemberDTO mDTO) {
		ArrayList<MemberDTO> datas = new ArrayList<MemberDTO>();

		return datas;
	}

	public MemberDTO selectOne(MemberDTO mDTO) {
		MemberDTO data = null;
		conn = JDBCUtil.connect();
		if (mDTO.getSearchCondition().equals("login")) {

			try {
				pstmt = conn.prepareStatement(SELECTONE_LOGIN);
				pstmt.setString(1, mDTO.getId());
				pstmt.setString(2, mDTO.getPw());
				ResultSet rs = pstmt.executeQuery();
				if (rs.next()) {
					data = new MemberDTO();
					data.setNickname(rs.getString("NICKNAME"));
				}
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				JDBCUtil.disconnect(pstmt, conn);
			}
		}

		else if (mDTO.getSearchCondition().equals("userCheck")) {
			try {
				pstmt = conn.prepareStatement(SELECTONE_USERCHECK);
				pstmt.setString(1, mDTO.getNickname());
				ResultSet rs = pstmt.executeQuery();
				if (rs.next()) {
					data = new MemberDTO();
					data.setId(rs.getString("ID"));
					data.setPw(rs.getString("PW"));
					data.setName(rs.getString("NAME"));
					data.setNickname(rs.getString("NICKNAME"));
					data.setPh(rs.getInt("PH"));
					data.setProfile(rs.getString("PROFILE"));
					
					data.setGrade(rs.getString("GRADE"));
				}
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				JDBCUtil.disconnect(pstmt, conn);
			}
		}

		return data;

	}

	public boolean insert(MemberDTO mDTO) {
		conn = JDBCUtil.connect();

		try {
			pstmt = conn.prepareStatement(INSERT);
			pstmt.setString(1, mDTO.getId());
			pstmt.setString(2, mDTO.getPw());
			pstmt.setString(3, mDTO.getName());
			pstmt.setString(4, mDTO.getNickname());
			pstmt.setString(5, mDTO.getBirthday());
			pstmt.setInt(6, mDTO.getPh());
			pstmt.setString(7, mDTO.getProfile());

			int result = pstmt.executeUpdate();
			if (result <= 0) {
				return false;
			}
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		} finally {
			JDBCUtil.disconnect(pstmt, conn);
		}
		return true;
	}

	public boolean update(MemberDTO mDTO) {
		conn = JDBCUtil.connect();
		if (mDTO.getSearchCondition().equals("withdraw")) {
			try {
				pstmt = conn.prepareStatement(UPDATE_WITHDRAW);
				pstmt.setString(1, mDTO.getPw());
				pstmt.setString(2, mDTO.getNickname());
				int result = pstmt.executeUpdate();
				if (result <= 0) {
					return false;
				}
			} catch (SQLException e) {
				e.printStackTrace();
				return false;
			} finally {
				JDBCUtil.disconnect(pstmt, conn);
			}
		} else if (mDTO.getSearchCondition().equals("updatePw")) {
			try {
				pstmt = conn.prepareStatement(UPDATE_PW);
				pstmt.setString(1, mDTO.getPw());
				pstmt.setString(2, mDTO.getNickname());
				int result = pstmt.executeUpdate();
				if (result <= 0) {
					return false;
				}
			} catch (SQLException e) {
				e.printStackTrace();
				return false;
			} finally {
				JDBCUtil.disconnect(pstmt, conn);
			}
		} else if (mDTO.getSearchCondition().equals("updateNickname")) {
			try {
				pstmt = conn.prepareStatement(UPDATE_NICKNAME);
				pstmt.setString(1, mDTO.getUpdateNickname());
				pstmt.setString(2, mDTO.getNickname());
				int result = pstmt.executeUpdate();
				if (result <= 0) {
					return false;
				}
			} catch (SQLException e) {
				e.printStackTrace();
				return false;
			} finally {
				JDBCUtil.disconnect(pstmt, conn);
			}
		}
		return true;
	}

	private boolean delete(MemberDTO mDTO) {
		return false;
	}

}

SearchCondition() 이 필요했을까..? 쿼리문도 저렇게 많이 사용할 필요가 있을까 의문이든다. 예를들어

ID, PW를 입력받아 모든정보를 return하는 쿼리문 , iD만 입력받아 닉네임만 return하는 쿼리문 
PW를 입력받아 닉네임, 전화번호, 주소가 필요한 쿼리문...이런것들이 있을때, 
조금만 달라져도 그거에 맞는 쿼리문과 그것에 맞는 CRUD를 만들어야할까 ..? 데이터보호차원에선
필요한 데이터만 주고받는게 맞긴한데,, 너무비효율적인 것 같기도 하다. 

MemberDTO.java

package model;

public class MemberDTO {
	private int memberNum; // PK
	private String id;
	private String pw;
	private String name;
	private String nickname;
	private String updateNickname; 
	// nickname만 세션에 저장하는 바람에 ...
	// nickname변경할때 매우힘들어서 생성 ㅜ	

	private String birthday;
	private int ph;
	private String profile;
	private String grade;
	
	//유저닉네임으로 검색해서 마이페이지 가져오기
	//유저ID,PW 검색해서 로그인하기 
	//둘다 SelectOne 이다. 따라서 컨디션으로 구분
	private String searchCondition;
	

	
	public String getUpdateNickname() {
		return updateNickname;
	}
	
	public void setUpdateNickname(String updateNickname) {
		this.updateNickname = updateNickname;
	}
	public String getSearchCondition() {
		return searchCondition;
	}

	public void setSearchCondition(String searchCondition) {
		this.searchCondition = searchCondition;
	}

	public String getProfile() {
		return profile;
	}

	public void setProfile(String profile) {
		this.profile = profile;
	}

	public String getBirthday() {
		return birthday;
	}

	public void setBirthday(String birthday) {
		this.birthday = birthday;
	}

	public int getPh() {
		return ph;
	}

	public void setPh(int ph) {
		this.ph = ph;
	}

	public int getMemberNum() {
		return memberNum;
	}

	public void setMemberNum(int memberNum) {
		this.memberNum = memberNum;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPw() {
		return pw;
	}

	public void setPw(String pw) {
		this.pw = pw;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getNickname() {
		return nickname;
	}

	public void setNickname(String nickname) {
		this.nickname = nickname;
	}

	public String getGrade() {
		return grade;
	}

	public void setGrade(String grade) {
		this.grade = grade;
	}
}

 

가방~ jsp파일에 가끔 DTO객체 만들어서 사용했는데 괜찮은걸까 ..?

home.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<jsp:useBean id="cm" class="ctrl.MemberBean" />
<jsp:setProperty name="cm" property="*" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME SWEET HOME</title>
</head>
<body>

	<h1>LOGIN</h1>
<% 
	if(session.isNew()){
		out.println("<script>alert('세션 생성! 로그인하면 세션 10초간 유지 ');</script>");
		
		// 기본 제공 시간 30분 (맞음!)
	}

%>
	<form method="POST" action="logincheck.jsp">
		<input type="text" name="id" placeholder="아이디" required><br>
		<input type="password" name="pw" placeholder="비밀번호" required><br>
		<br> <input type="submit" value="로그인">
	</form>
	<form method="POST" action="register.jsp">
		<input type="submit" value="회원가입">
	</form>




</body>
</html>

logincheck.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<jsp:useBean id="cm" class="ctrl.MemberBean" />
<jsp:setProperty name="cm" property="*" />
<!-- 이 setProperty는 home에서 보낸 id랑 pw를 cm객체에 set 해준것이다! 
페이지끼리의 데이터 전달시에 사용하는 것 인가보다-->

<!-- MemberBean의 login() 메서드에서 MemberBean 객체를 만든 후에 
그 객체를 cm에게 대입해도 되지만, DTO가 전달하는 가방 처럼 쓰이는 게 맞는 것 같아서
DTO를 사용해 사용자가 입력한 id,pw를 가지고있는 사람의 "nickname"만 가져왔다. 
MemberDAO의 쿼리문 참고-->
<jsp:useBean id="mDTO" class="model.MemberDTO" />

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 체크</title>
</head>
<body>

<%

if(cm.login()!=null){ 
	mDTO=cm.login();
	//로그인 하는 순간 세션은 10초만 유지됩니다.
	//10초가 끝나면 자동으로 로그아웃되고 세션이 초기화 됩니다.
	//따라서 로그인 이후 기능들을 사용할 수 없습니다.
	//다른 창으로 이동하게 되면 세션유지가 계속 초기화된다!
	//ex) 로그인 후 마이페이지를 왔다갔다하면 세션 종료가 안됨.
	//따라서 로그인 후 아무것도 안하면 5초간 유지.
		session.setAttribute("nickname", mDTO.getNickname());
		session.setMaxInactiveInterval(5); //1분간 아이디 유지
		out.println("<script>alert('세션은 20초간 유지됩니다.');</script>");

%>
<script>location.href="main.jsp";</script>

<% } else {%>
<script>
	alert('로그인실패');
	history.go(-1);
</script> 
<% } %>


</body>
</html>

register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
	<% request.setCharacterEncoding("UTF-8"); %>
    	 <jsp:useBean id="cm" class="ctrl.MemberBean"/>
	 <jsp:setProperty name="cm" property="*" />

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입~</title>
</head>
<body>

<% 

if(cm.register()) { 
	%>
   <script>
   //alert는 페이지가 하나 넘어간 것 이므로 history(-1)을하면 alert창 나온 이전으로 돌아간다.
   alert('회원가입 성공! :D');
   history.go(-2);
   </script>
 <% } else { 
 %>
      <script>
      document.getElementById('cmMsg').hidden = true; 
     </script>
<% }%>  
	
	
	
	<h1>REGISTER</h1>
	<form method="POST">
	<input type="email" name="id" placeholder="이메일" required><br> 
	<input type="password" name="pw" placeholder="비밀번호" required><br> 
	<input type="text" name="name" placeholder="이름" required><br> 
	<input type="text" name="nickname" placeholder="닉네임" required><br> 
	<input type="text" name="birthday" placeholder="생년월일" ><br> 
	<input type="text" name="ph" placeholder="핸드폰번호" ><br>
	<input type="text" name="profile" placeholder="프로필사진" ><br> 
	<input type="submit" value="회원가입" >
	</form>
	<!--회원가입을 버튼을 눌러 실패했을때 회원가입 페이지내에서 실패했다는 
	메세지를 출력해주기 위해서 HTML에 cm.getMsg를 미리 출력해두고 
	스크립트를 사용해서 숨겨놨습니다. 이후에 cm.register() 값을 확인해서
	실패하면 숨겨짐을 해제하여 cm.getMsg를 가져오고, 아니라면 alert를 띄운후에
	로그인 화면으로 돌아갑니다.-->
	
	  <div id="cmMsg"><%=cm.getMsg()%> </div>
	 <script>
	  document.getElementById('cmMsg').hidden = false;
	  </script> 
</body>
</html>

main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<% if (session.getAttribute("nickname") == null) {%>
		<script>
		document.write(session.getAttribute("nickname"));
		alert('세션 종료 !!!');
		session.invalidate();
		/* location.href="logout.jsp"; */
		</script>
	<%} %>
	<!-- //"POST" 로 전달할 경우 마이페이지에서 닉네임 변경 후 새로고침시 에러발생 -->
	<button onclick="location.href='mypage.jsp'">마이페이지</button>
	 
	  <h1><%= session.getAttribute("nickname") %>님 <small>반갑습니다.</small></h1>   <a href="logout.jsp">로그아웃</a>
	  <br><br>
	  게시글 : 카메라 무료나눔 없나요 ㅠ       - <a href="userInfo.jsp?userName=사진찍는팬더">사진찍는팬더</a>
     
	
</body>
</html>

<%-- <% // seesion.getAttribute"(nickname)"은 object 타입이기때문에 string으로 캐스팅!
cm.setNickname((String)session.getAttribute("nickname"));
mDTO=cm.myInfo();
%>	 --%>

mypage.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <jsp:useBean id="cm" class="ctrl.MemberBean" />
	<jsp:useBean id="mDTO" class="model.MemberDTO" />
	<%-- <%@page isErrorPage="true" %>  <%@page errorPage="mypage.jsp" %> --%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>USER INFO</title>
</head>
<body>

<!--  // 인증된 세션이 없는경우, 해당페이지를 볼 수 없게 함.  -->
<% if (session.getAttribute("nickname") == null) { %>
 <!--    out.println("<script>alert('세션종료~');</script>");
	 response.sendRedirect("logout.jsp"); 
	   와 ㅡ,,,,,,여기선 왜 스크립트가 안먹냐 java코드로 하니까 됩니다!!!!!!!ㅜㅜㅜㅜㅜㅜㅜ
	 userInfo.jsp에선 js코드로 써도 잘만되던데 ,,,,,,,,,,,,,,,,,ㅜㅜㅜㅜㅜㅜㅜㅜㅜ 가아니라..
	 session에 저장된 정보가 null이 된 순간에 null을 mDTO에 넣어서  null 값을 반환하기 때문에
	 mDTO.getProfile()를 화면에 가져오는 시점에서 바로 에러가 일어난다. 따라서 null이 아닐떄만!
	 mDTO.getProfile()을 화면에 가져올 수 있도록 처리를 해주자! 너무어렵다 -->
	    <script>
		alert('세션 종료 !!!');
		location.href="logout.jsp";
		</script>  
<% 	} %>

<%
// seesion.getAttribute"(nickname)"은 object 타입이기때문에 string으로 캐스팅!
cm.setNickname((String)session.getAttribute("nickname"));
mDTO=cm.myInfo();
%>	 
<% if (session.getAttribute("nickname")!=null) { %>
프로필 사진 :<a><img src="<%=mDTO.getProfile()%>" style="width:200px; height:200px;"> </a><br>
닉네임 : <%=mDTO.getNickname()%> <button type="button">
  <img src="https://cdn-icons-png.flaticon.com/512/2541/2541991.png" style="width:10px; height:10px;"alt="닉네임변경" onclick="openUpdateNicknamePopUp()" >
</button> <br>
아이디 : <%=mDTO.getId()%> <br>
비밀번호 : <%=mDTO.getPw()%> <button type="button">
  <img src="https://cdn-icons-png.flaticon.com/512/2541/2541991.png" style="width:10px; height:10px;"alt="비밀번호변경" onclick="openUpdatePasswordPopUp()" >
</button> <br>
전화번호 : <%=mDTO.getPh()%> <button type="button">
  <img src="https://cdn-icons-png.flaticon.com/512/2541/2541991.png" style="width:10px; height:10px;"alt="폰넘버 변경" onclick="openUpdatePhonenumberPopUp()" >
</button> <br>
등급 : <%=mDTO.getGrade()%> <br>
<% } %>

내가 쓴 글 조회 <br>
<!-- #은 최상위 루트를 가리켜서 페이지가 없거나 index.jsp가 나온다. -->
<!-- 리턴값이 true이면 href로 연결된 링크로 이동하고 false이면 이동을 하지 않는다. -->
<!-- 무조건 팝업을 띄울것이기 떄문에 false! -->
<a href="#" onclick="return openWithdrawPopUp();">회원탈퇴</a>



 	<!-- <a><img src="https://media.bunjang.co.kr/images/crop/796975615_w320.jpg"</a>  -->
 <script>
	function openWithdrawPopUp() {
		// 함수 동작 테스트 
		//alert("팝업 테스트");
		
		//window.open("[팝업을 띄울 파일명 path]", "[별칭]", "[팝업 옵션]")
		 window.open("withdrawPopup.jsp", "withdrawPopup", "width=450, height=250, top=150, left=200");
		return false;
	}
</script>

 <script>
	function openUpdateNicknamePopUp() {
		 window.open("updateNicknamePopup.jsp", "updateNicknamePopup", "width=450, height=250, top=150, left=200");
		return false;
	}
</script>

 <script>
	function openUpdatePasswordPopUp() {
		 window.open("updatePasswordPopup.jsp", "updatePasswordPopup", "width=450, height=250, top=150, left=200");
		return false;
	}
</script>

 <script>
	function openUpdatePhonenumberPopUp() {
		 window.open("updatePhonenumberPopup.jsp", "updatePhonenumberPopup", "width=450, height=250, top=150, left=200");
		return false;
	}
</script>
 
 
 

</body>
</html>

logout.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
    // 1: 기존의 세션 데이터를 모두 삭제
    session.invalidate();
    // 2: 로그인 페이지로 이동시킴.
    response.sendRedirect("home.jsp");
%>
</body>
</html>

logout.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <jsp:useBean id="cm" class="ctrl.MemberBean" />
	<jsp:useBean id="mDTO" class="model.MemberDTO" />
	<%-- <%@page isErrorPage="true" %>  <%@page errorPage="mypage.jsp" %> --%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>USER INFO</title>
</head>
<body>
<!--  // 인증된 세션이 없는경우, 해당페이지를 볼 수 없게 함.  -->
<% if (session.getAttribute("nickname") == null) { %>
		<script>
		alert('세션 종료 !!!');
		location.href="logout.jsp";
		</script>
	<%} %>

	
<% // seesion.getAttribute"(nickname)"은 object 타입이기때문에 string으로 캐스팅!
System.out.println(session.getAttribute("nickname"));
String userName = request.getParameter("userName");
cm.setNickname(userName);
mDTO=cm.myInfo();
%>	
<!-- 여기는 세션이 종료 되어도 mDTO에는 다른 유저의 정보가 전화면에서 넘어온 것 뿐이 때문에 세션 종료와 관계 없어서 에러 안난다. -->
프로필 사진 :<a><img src="<%=mDTO.getProfile()%>" style="width:200px; height:200px;"> </a><br>
닉네임 : <%=mDTO.getNickname()%> <button type="button">
  <img src="https://cdn-icons-png.flaticon.com/512/2541/2541991.png" style="width:10px; height:10px;"alt="닉네임변경" onclick="openUpdateNicknamePopUp()" >
</button> <br>
아이디 : <%=mDTO.getId()%> <br>
비밀번호 : <%=mDTO.getPw()%> <button type="button">
  <img src="https://cdn-icons-png.flaticon.com/512/2541/2541991.png" style="width:10px; height:10px;"alt="비밀번호변경" onclick="openUpdatePasswordPopUp()" >
</button> <br>
전화번호 : <%=mDTO.getPh()%> <button type="button">
  <img src="https://cdn-icons-png.flaticon.com/512/2541/2541991.png" style="width:10px; height:10px;"alt="폰넘버 변경" onclick="openUpdatePhonenumberPopUp()" >
</button> <br>
등급 : <%=mDTO.getGrade()%> <br>
내가 쓴 글 조회 <br>
<!-- #은 최상위 루트를 가리켜서 페이지가 없거나 index.jsp가 나온다. -->
<!-- 리턴값이 true이면 href로 연결된 링크로 이동하고 false이면 이동을 하지 않는다. -->
<!-- 무조건 팝업을 띄울것이기 떄문에 false! -->
<a href="#" onclick="return openWithdrawPopUp();">회원탈퇴</a>

 	<!-- <a><img src="https://media.bunjang.co.kr/images/crop/796975615_w320.jpg"</a>  -->
 <script>
	function openWithdrawPopUp() {
		// 함수 동작 테스트 
		//alert("팝업 테스트");
		
		//window.open("[팝업을 띄울 파일명 path]", "[별칭]", "[팝업 옵션]")
		 window.open("withdrawPopup.jsp", "withdrawPopup", "width=450, height=250, top=150, left=200");
		return false;
	}
</script>

 <script>
	function openUpdateNicknamePopUp() {
		 window.open("updateNicknamePopup.jsp", "updateNicknamePopup", "width=450, height=250, top=150, left=200");
		return false;
	}
</script>

 <script>
	function openUpdatePasswordPopUp() {
		 window.open("updatePasswordPopup.jsp", "updatePasswordPopup", "width=450, height=250, top=150, left=200");
		return false;
	}
</script>

 <script>
	function openUpdatePhonenumberPopUp() {
		 window.open("updatePhonenumberPopup.jsp", "updatePhonenumberPopup", "width=450, height=250, top=150, left=200");
		return false;
	}
</script>
 
 
 

</body>
</html>

updateNicknamePopup.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <% request.setCharacterEncoding("UTF-8"); %>
     <jsp:useBean id="cm" class="ctrl.MemberBean" />
     <jsp:setProperty name="cm" property="*" />

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>닉네임변경 팝업창</title>
</head>

<body>
<%-- 알아두면 좋은거 onunload="closePopup()" 
-> 'x'를 눌러도 '확인'버튼과 동일하게 작동되도록 해줌 --%>
<% if (session.getAttribute("nickname") == null) { %>
		<script>alert('세션 종료 !!!')
		location.href="logout.jsp"
		</script>
<%} %>

<% 
//페이지 새로고쳐서 닉네임 변경 적용이 바로되는건 모르겠음
cm.setNickname((String)session.getAttribute("nickname"));
if(cm.updateNickname()) { %>
	<script>
	window.close();
	alert('닉네임 변경 완료 :D');
	</script>
	
<% } else {%> 
	<%=cm.getMsg() %>
<% } %>


<br><br>변경하실 닉네임을 입력해주세요.<br>

<form method="POST">
	<input type="text" name="updateNickname" required><br>
	<input type="submit" value="확인" >
</form>
<input type="button" value="취소" onclick="window.close()">

</body>
</html>

updatePasswordPopup.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
     <jsp:useBean id="cm" class="ctrl.MemberBean" />
     <jsp:setProperty name="cm" property="*" />

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원탈퇴 확인 팝업창</title>
</head>

<body>
<%-- 알아두면 좋은거 onunload="closePopup()" 
-> 'x'를 눌러도 '확인'버튼과 동일하게 작동되도록 해줌 --%>
<% if (session.getAttribute("nickname") == null) { %>
		<script>alert('세션 종료 !!!')
		location.href="logout.jsp"
		</script>
<%} %>

<%
cm.setNickname((String)session.getAttribute("nickname"));

if(cm.updatePw()==1) { %>
 	
	<script>
	window.close();
	opener.parent.location="logout.jsp";
	alert('비번 변경완료 :D');
	
	
	</script>
	session.invalidate();
	
<% } else if (cm.updatePw()==0) {%> 
	<script>
	alert('현재 비밀번호 틀림 :D');
	</script>
<% } %>

	<script>
    // 유효성 검증 예정 
    // 비밀번호 일치 확인 VIEW에서 진행
    window.onload = function() {
        document.frm.onsubmit = function() {
            if(document.frm.updatePw.value !== document.frm.pwChk.value) {
                alert("비밀번호 일치여부를 확인하세요")
                return false;
            }
        }
    }
</script>

</head>
<body>
    <form name="frm" method="post">
        <p>현재 비밀번호 :  <input type="password" name="pw" required></p>
        <p>비밀번호 : <input type="password" name="updatePw" required></p>
        <p>비밀번호 확인 : <input type="password" name="pwChk" required></p>
	<input type="submit" value="확인" >
</form>
<input type="button" value="취소" onclick="window.close()">
	
	
	 <script>
	  document.getElementById('cmMsg').hidden = false;
	  </script>
</body>
</html>

withdrawPopuppdatePasswordPopup.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
     <jsp:useBean id="cm" class="ctrl.MemberBean" />
     <jsp:setProperty name="cm" property="*" />

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원탈퇴 확인 팝업창</title>
</head>

<body> 
<%-- 알아두면 좋은거 onunload="closePopup()" 
-> 'x'를 눌러도 '확인'버튼과 동일하게 작동되도록 해줌 --%>
<% if (session.getAttribute("nickname") == null) { %>
		<script>alert('세션 종료 !!!')
		location.href="logout.jsp"
		</script>
<%} %>

<%
cm.setNickname((String)session.getAttribute("nickname"));

if(cm.withdraw()) { %>
 	
	<script>
	window.close();
	opener.parent.location="logout.jsp";
	alert('잘가라~! :D');
	
	
	</script>
	session.invalidate();
	
<% } else {%> 
	<%=cm.getMsg() %>
<% } %>


<br><br>정말 탈퇴하시겠습니까?<br><br>
비밀번호를 입력해주세요.
<form method="POST" >
	<input type="password" name="pw" required><br>
	<input type="submit" value="확인" >
</form>
<input type="button" value="취소" onclick="window.close()">
	
	
</body>
</html>

'코리아IT핀테크과정' 카테고리의 다른 글

JSP, Servlet Mapping  (2) 2024.01.10
JSP 3  (0) 2024.01.08
JSP2  (0) 2024.01.05
JSP  (2) 2024.01.04
JavaScript  (3) 2024.01.04
Comments