○ 로그인 후 기존 페이지로 이동
방법1) javascript:history.go() 이용
- history.go(이동할 페이지 수) → history.go(-2) : 2페이지 이전으로 이동
- 문제점 : 로그인 시 네이게이션 바의 '로그인'이 '마이페이지'로 변경되어야 하는데,
history(-2)는 기존 페이지의 세션정보도 그대로 가지고 있기 때문에
새로고침 하지 않으면 네이게이션 바가 그대로 '로그인'인 상태로 페이지가 넘어감
@RequestMapping(value = "/login.do", method = RequestMethod.POST)
public ModelAndView login(HttpServletRequest req, HttpServletResponse resp) {
//일부 코드 생략 (아래 전체코드 참고)
msg+="<script>";
msg+=" alert('로그인 되었습니다');";
msg+=" location.href='javascript:history.go(-2);'";
msg+="</script>";
mav.addObject("msg", msg);
mav.setViewName("m_manage/msgView");
return mav;
}
방법2) document.referrer 이용
① 뷰단 : login.jsp → 로그인 페이지로 넘어오기 전 페이지 정보를 'id=referrer'에 가져가기
<form name="loginfrm" id="loginfrm" method="post"
action="<%=request.getContextPath()%>/login.do" onsubmit="return">
<input type="hidden" name="referrer" id="referrer">
</form>
<script>
var referrer= document.referrer;
$('#referrer').attr('value', referrer);
</script>
② 컨트롤러
@RequestMapping(value = "/login.do", method = RequestMethod.POST)
public ModelAndView login(HttpServletRequest req, HttpServletResponse resp) {
//일부 코드 생략 (아래 전체코드 참고)
String referrer=req.getParameter("referrer");
msg+="<script>";
msg+=" alert('로그인 되었습니다');";
msg+=" location.href='"+referrer+"';";
msg+="</script>";
mav.addObject("msg", msg);
mav.setViewName("m_manage/msgView");
return mav;
}
○ 전체코드 : DAO/DTO
① MemberDTO.java
package kr.co.opot.member;
public class MemberDTO {
private String mem_id;
private String mem_pw;
private String mem_phone;
private String mem_email;
private String mem_lv;
private String mem_reg;
private String mem_birth;
private String new_pw;
public MemberDTO() {}
//Getters Setters 생략
}//class end
② MemberDAO.java : loginRead()
public String loginRead(String mem_id, String mem_pw) {
String mem_lv=null;
try {
con=dbopen.getConnection();//DB연결
sql=new StringBuilder();
sql.append(" SELECT mem_lv ");
sql.append(" FROM member_info ");
sql.append(" WHERE mem_id=? AND mem_pw=? ");
sql.append(" AND mem_lv IN ('A', 'B') ");
pstmt = con.prepareStatement(sql.toString());
pstmt.setString(1, mem_id);
pstmt.setString(2, mem_pw);
rs = pstmt.executeQuery();
if(rs.next()) {
mem_lv=rs.getString("mem_lv");
}//if end
} catch (Exception e) {
System.out.println("로그인 실패: " + e);
}finally{
DBclose.close(con, pstmt, rs);;
}//try end
return mem_lv;
}//loginRead() end
○ 전체코드 : 뷰단
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ include file="../header.jsp"%>
<!-- 본문시작 login.jsp -->
<div class="container text-center">
<div class="pagetitle">
<br>
<span><img src="/images/person_icon.png" alt="person" width="50px"></span>
<span><strong> LOGIN </strong></span>
<br>
</div>
<c:set var="s_mem_id" value="${ s_mem_id }"></c:set>
<c:set var="s_mem_pw" value="${ s_mem_pw }"></c:set>
<c:set var="s_mem_lv" value="${ s_mem_lv }"></c:set>
<c:choose>
<c:when test="${ s_mem_id==null || s_mem_pw==null || s_mem_lv==null }">
<!-- 게스트일 때, 로그인 폼 출력 -->
<form name="loginfrm" id="loginfrm" method="post"
action="<%=request.getContextPath()%>/login.do" onsubmit="return">
<input type="hidden" name="referrer" id="referrer">
<table class="table table-bordered" id="login_table" style="width:500px; margin:auto;">
<tr>
<td>
<input type="text" name="id" id="id" class="form-control"
placeholder="아이디" maxlength="10" value="${ c_id }" required>
</td>
<td rowspan="2" width="90px">
<input type="image" src="../images/login_btn_bk.png" width="85px">
</td>
</tr>
<tr>
<td>
<input type="password" name="passwd" id="passwd" class="form-control"
placeholder="비밀번호" maxlength="10" required>
</td>
</tr>
<tr>
<td colspan="2">
<c:choose>
<c:when test="${ c_id=='' }"><c:set var="check"></c:set></c:when>
<c:otherwise><c:set var="check">checked</c:set></c:otherwise>
</c:choose>
<label><input type="checkbox" name="c_id" value="SAVE" ${ check } >아이디 저장</label>
<a href="<%=request.getContextPath()%>/agreement.do">회원가입</a>
<a href="find_info.do">아이디/비밀번호찾기</a>
</td>
</tr>
</table>
</form>
</c:when>
<c:otherwise>
<!-- 로그인 상태일 때, 로그아웃 버튼 출력 -->
<form name="logoutfrm" id="logoutfrm" method="post" action="logout.do">
<strong>${ s_mem_id }</strong> 님
<br>
<input type="submit" value="로그아웃">
<br><br>
<a href='member_info.do'>[회원정보수정]</a>
<a href='member_retire.do'>[회원탈퇴]</a>
<br><br>
</form>
</c:otherwise>
</c:choose>
<script>
var referrer= document.referrer;
$('#referrer').attr('value', referrer);
</script>
</div>
<!-- 본문끝 -->
<%@ include file="../footer.jsp"%>
○ 전체코드 : 컨트롤러
@RequestMapping(value = "/login.do", method = RequestMethod.GET)
public ModelAndView login(HttpServletRequest req) {
ModelAndView mav =new ModelAndView();
Cookie[] cookies=req.getCookies();//사용자 PC에 저장된 모든 쿠키값 가져오기
String c_id="";
if(cookies!=null){
for(int i=0; i<cookies.length; i++){
Cookie cookie=cookies[i];
if(cookie.getName().equals("c_id")==true){
c_id=cookie.getValue();
}
}
}
mav.addObject("c_id", c_id);
mav.setViewName("m_manage/login");
return mav;
}
@RequestMapping(value = "/login.do", method = RequestMethod.POST)
public ModelAndView login(HttpServletRequest req, HttpServletResponse resp) {
ModelAndView mav =new ModelAndView();
HttpSession session = req.getSession();
String mem_id=req.getParameter("id").trim();
String mem_pw=req.getParameter("passwd").trim();
String referrer=req.getParameter("referrer");
String mem_lv=null;
mem_lv=dao.loginRead(mem_id, mem_pw);
String msg="";
if(mem_lv==null) {
msg+="<script>";
msg+=" alert('로그인 실패\\n아이디와 비밀번호를 확인해주세요');";
msg+=" location.href='javascript:history.back();'";
msg+="</script>";
}else {
session.setAttribute("s_mem_id", mem_id);
session.setAttribute("s_mem_pw", mem_pw);
session.setAttribute("s_mem_lv", mem_lv);
String c_id=Utility.checkNull(req.getParameter("c_id"));
Cookie cookie=null;
if(c_id.equals("SAVE")){//아이디 저장에 체크를 했다면
//쿠키변수선언 new Cookie("변수명", 값)
cookie=new Cookie("c_id", mem_id);
//쿠키의 생존기간 1개월
cookie.setMaxAge(60*60*24*30); //각 브라우저 쿠키 삭제의 영향을 받는다
}else{
cookie=new Cookie("c_id", "");
cookie.setMaxAge(0);
}//if end
resp.addCookie(cookie); //요청한 사용자 PC에 쿠키값을 저장
msg+="<script>";
msg+=" alert('로그인 되었습니다');";
msg+=" location.href='"+referrer+"';";
msg+="</script>";
}
mav.addObject("msg", msg);
mav.setViewName("m_manage/msgView");
return mav;
}
○ 프로젝트 전체 보기
https://github.com/jaebin0817/SOLDESK_FinalProject
GitHub - jaebin0817/SOLDESK_FinalProject
Contribute to jaebin0817/SOLDESK_FinalProject development by creating an account on GitHub.
github.com
http://opot.cafe24.com/home.do
OPOT
#어드벤처 #사랑스러운 #한획을 그은 #속도감있는 #스릴러 #예능 #애니메이션 #휴먼 볼까말까 고민된다면⁉ 오늘 이거 볼까요? 👀 범죄도시2 ★★★☆☆ 3.2 종이의 집
opot.cafe24.com
'Project > OPOT_SPRING' 카테고리의 다른 글
07. 개발 : 구독 OTT 정보 (FullCalendar에 DB내용 출력하기) (0) | 2022.07.27 |
---|---|
05. 개발 : 프로젝트 생성 (Spring Starter Project 생성, 의존성, 환경설정, DB연결) (0) | 2022.07.21 |
04. 화면설계 : UI가이드맵 (0) | 2022.07.20 |
03. DB : SQL (create문) (0) | 2022.07.19 |
02. DB : 테이블 시나리오, 테이블 정의서, E-R 다이어그램 (0) | 2022.07.18 |
댓글