본문으로 바로가기

3.JSP/서블릿 Session 개발이슈!

category SPRING/Servlet || JSP 2021. 2. 22. 04:29
728x90
반응형
SMALL

1.로그인 세션 분리(회원,비회원,관리자)

 -로그인 종류에 따라서 로그인 --> Login 서블릿 로직을 거쳐서- ----> 최종 메인 페이지

뿌려주는 형식이며,  받는 Session에 따라서 나타나는 메뉴가 달라야한다.

 


*Main.jsp 일부코드 발췌

<% 

   	
   	
    MemberDTO info=(MemberDTO)session.getAttribute("info");
    AdminDTO adinfo=(AdminDTO)session.getAttribute("adinfo");
    
    //일반회원 로그인시
   	if(info!=null && adinfo==null){
   		
   		%>
   	  <h3><%=info.getEmail() %>님 환영합니다</h3>
   	  <a href="Logout">로그아웃</a>
      <a href="update.jsp">개인정보수정</a>
      

   	<% 
   	//관리자 로그인시
   	}else if(info==null && adinfo!=null){
   		%>
   		<a href="update.jsp"> 회원정보 관리</a>
    	<a href="update.jsp"> 메시지 관리</a>
    	<a href="AdminPRpage.jsp"> 상품관리</a>		
    	<a href="Logout"> 로그아웃</a>

   	<%}else if(info==null && adinfo==null){%>
   		 <a class="menu" href="login.jsp">로그인</a>
   	<%}%>

 

-본 코드같은 경우 메인 페이지에서 세션에서 받는 조건에 따라서 생성되는 메뉴가 달라짐. 

 

*이슈1.

Session은 과연 원하는 해당 페이지로 서블릿이 이동해야만 전달이되는가?

 

*로그인.서블릿

package com.controller;

import java.io.IOException; 


import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.model.AdminDTO;
import com.model.MemberDAO;
import com.model.MemberDTO;


@WebServlet("/LoginServiceCon")
public class LoginServiceCon extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
		RequestDispatcher dispatcher=request.getRequestDispatcher("index.jsp");
		HttpSession session=request.getSession();
		
		String email=request.getParameter("email");
		String pw=request.getParameter("pw");
	
		//1.사용자 입력 정보 가져오기 test
//		System.out.println(email);
//		System.out.println(pw);
		
		
		MemberDAO dao=new MemberDAO();
		
		//관리자 정보가 db에 있는지? 확인
		int admin=dao.AdminCheck(email, pw);
		//일반회원 정보가 db에 있는지? 확인
		int guest =dao.LoginCheck(email, pw);
		
		//DB로 부터 값을 가져왔는지? 콘솔 테스트
		System.out.println("LoginServiceCon admin: "+admin);
		System.out.println("LoginServiceCon guest: "+guest);
		
		//어드민계정이 존재하며 회원의 아이디가 없는경우 1:로그인 성공 2:비번틀림 3:아이디 없음
		if(admin>0 && guest==3) {
		if(admin==1) {
			AdminDTO adinfo=dao.AdminLogin(email); 
			session.setAttribute("adinfo",adinfo);
			
			request.setAttribute("admin", 1);
			System.out.println("관리자 로그인 성공");
			System.out.println("관리자 정보 넘기는 값: "+adinfo);
			chk.setCheck(1);
		}else if(admin==2) {
			System.out.println("비밀번호 불 일치");
			request.setAttribute("admin", 2);
		}else if(admin==3) {
			System.out.println("아이디가 없어요");
			request.setAttribute("admin", 3);
			
		}else { //디폴트값 아무것도 출력 안함
			request.setAttribute("admin", 0);
		}
		
		}
		
		//회원계정이 존재하며 어드민 아이디가 없는경우 1:로그인 성공 2:비번틀림 3:아이디 없음
		if(guest>0 && admin==3) {
		if(guest==1) {
			MemberDTO info=dao.Login(email); 
			System.out.println("로그인 성공");
			System.out.println("사용자 정보넘기는 값"+info);
			session.setAttribute("info",info);
			
			request.setAttribute("guest", 1);
			
			chk.setCheck(1);
		}else if(guest==2) {
			System.out.println("비밀번호 불 일치");
			request.setAttribute("guest", 2);
		}else if(guest==3) {
			System.out.println("아이디가 없어요");
			request.setAttribute("guest", 3);
			
		}else { //디폴트값 아무것도 출력 안함
			request.setAttribute("guest", 0);
		}
		
		}
	
		dispatcher.forward(request, response);

		
	}
	

}

 

*생각

첫째로 페이지 이동 dispatcher.forward(request, response);

이 쓰여야지만 Session이 전달되는줄 알았으나 아니였다.

오로지 session.setAttribute("object",object); 를 써준다면 세션이 서버내에 적용되며

어느 페이지에서든지 세션을 불러오면 사용이 가능하다는 것이였다.

 

*결과

덕분에 Session은 하나의 메뉴.jsp을 생성하여 거기서 세션조건에 따라서 메뉴를 생성하고Main.jsp 에서 include로 메뉴.jsp만을 불러와    가독성과 코드를 더욱더 간편히 만들수 있었다.

 

*메뉴.jsp

<%@page import="com.model.AdminDTO"%>
<%@page import="com.model.MemberDTO"%>
<%@page import="java.util.ArrayList"%>

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
    <meta charset="EUC-KR">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
<!DOCTYPE html>
<style>

	@font-face {

		font-family: 'NanumSquareB';
		src: url("fonts/NanumSquareB.ttf") format('truetype'); 

	}

	@font-face {

		font-family: 'NanumSquareEB';
		src: url("fonts/NanumSquareEB.ttf") format('truetype'); 

	}
    @font-face {

		font-family: 'NanumSquareRoundB';
		src: url("fonts/NanumSquareRoundB.ttf") format('truetype'); 

	}

    @font-face {

        font-family: 'NanumSquare_ac';
		src:url("fonts/NanumSquare_ac.ttf") format('truetype'); 

	}

    @font-face {

        font-family: 'KakaoBold';
		src:url("fonts/KakaoBold.ttf") format('truetype'); 

	}

    @font-face {

        font-family: 'KakaoRegular';
		src:url("fonts/KakaoRegular.ttf") format('truetype'); 

	}

    body{

        padding-top : 140px;
        margin:auto;
        font-size : 12px;

    }

    button:focus{border: none;outline:none;}

    .linktokakao:link{text-decoration: none;color:#3A1D1D;}

    .linktokakao:visited{text-decoration: none;color:#3A1D1D;}

    .linktokakao:active{text-decoration: none;color:#3A1D1D;}

    .linktokakao:hover{text-decoration: none;color:#3A1D1D;}

	.header{
        margin:auto;
        opacity: 85%;
        z-index : 1;
        position:fixed;
        width:100%;
		height : 130px;
        top:-5px;
		background-color:black;
        transition: all 0.9s;
	}
    .header:hover{
        height:170px;
        opacity: 95%;
        transition: all 0.5s;
    }
    .header:hover .blank{
        height:10px;
        transition: all 0.5s;
    }
    .header:hover .header_menu{
        font-size:25px;
        transition: all 0.5s;
    }
    .titlelogo{
        height:85px;
        transition: all 0.5s;
    }
    .header:hover .titlelogo{
        height:90px;
        transition: all 0.5s;
    }
    .logo_title{
        font-family:'NanumSquareRoundB';
        font-size:25px;
        color:white;
    }
    .logo_subtitle{
        font-family:'NanumSquare_ac';
        font-size:15px;
        color:white;
    }

    .header_menu:active{
        border:none;
    }
    .blank{
        height:0px;
        transition: all 0.9s;
    }
    .header_menu{
        background:none;
        color:whitesmoke;
        border:none;
        width:120px;
        height:40px;
        font-family: 'NanumSquare_ac';
		font-size:22px;
        margin-left:5px;
        margin-right:5px;
        transition: all 0.9s;
    }
    .header_menu:hover{
        width:140px;
        color:#FF9966;
        transition: all 0.8s;
    }
    .header_index{
        width:1200px;
    }
    .sidemenu{
        position:fixed;
        top:180px;
        right:-100px;
        z-index: 1;
        width:200px;
        height:100px;
        border:1px solid lightgray;
        background-color:#FDFDFD;
        transition: all 0.5s;
        display:flex;
        opacity:70%;
    }



    .sidemenu:hover{
        background-color:#F7E600;
        border:none;
        right:0%;
        opacity:100%;
        transition: all 0.5s;
    }

 

    .sidemenu_img{
        width:100px;
        height:100px;
    }
    .sidemenu span{
        margin-top:20px;
        font-family: 'KakaoBold';
        opacity:0;
        transition: all 0.5s;
    }

    .sidemenu:hover span{
	   opacity:100%;
	   transition: all 0.5s;
    }

 

    

</style>

 

<!-- Header -->

<div class="header" align = "center"> 

	

	<div class="header_index">
        <div class="blank"></div>
        <a href="index.html">
        <img src="images/smhrd_titlelogo.png" class="titlelogo">
        </a>
    <br>
    <div class="blank"></div>
<!-- 로고 이미지 -->

    <!-- 메뉴바 -->

 	<a href="#"><button class="header_menu">견적</button></a> 

	<a href=categoryCon?product=cpu><button class="header_menu">카테고리</button></a> 

	<a href="#"><button class="header_menu">공지사항</button></a> 

	<a href="#"><button class="header_menu">이벤트</button></a>  

	<a href="#"><button class="header_menu">커뮤니티</button></a> 

	<a href="support.html"><button class="header_menu">고객센터</button></a>

     <!-- /메뉴바 -->

        
        
        
             <% 
/*      check chk = new check();
      int abc = 0;

 		int open = 0;
     	int guest = 0;
     	AdminDTO adinfo = null;
     	MemberDTO info = null;
    System.out.println("하이");
    
    
   	if(chk.getCheck()== 1){
   		
  	if(open == 1){
  		
  		 adinfo=(AdminDTO)session.getAttribute("adinfo");
  		 
  	}
    if (open == 2 ){
    info=(MemberDTO)session.getAttribute("info");
    guest = (Integer)request.getAttribute("guest");}
   	} */
   	
   	
    MemberDTO info=(MemberDTO)session.getAttribute("info");
    AdminDTO adinfo=(AdminDTO)session.getAttribute("adinfo");
    
    //일반회원 로그인시
   	
        if(info!=null && adinfo==null){
   		
   		%>
   	  <h3><%=info.getEmail() %>님 환영합니다</h3>
          <a href="Logout"><button class="header_menu">로그아웃</button></a>
          <a href="User_View/Mypage.jsp"><button class="header_menu">마이페이지</button></a> 
          <a href="User_View/AskCenter.jsp"><button class="header_menu">고객센터 문의</button></a> 
   	<% 
   	//관리자 로그인시
   	}else if(info==null && adinfo!=null){
   		%>
        
   		<a href="Admin_View/Member.jsp"><button class="header_menu">회원정보 관리</button></a>
    	<a href="Admin_View/AskList.jsp"><button class="header_menu">고객센터 관리</button></a>
    	<a href="Admin_View/PrList.jsp"><button class="header_menu">상품재고 관리</button></a>		
    	<a href="Logout"> 로그아웃</a>

   	<%}else if(info==null && adinfo==null){%>
        <a href="Admin_View/PrList.jsp"><button class="header_menu">로그인</button></a>	
   	<%}%>
        
        
        
        
        
        
        
        
        
        
        
        
        
	</div>

</div> 

<a href="http://pf.kakao.com/_xhHADK" class="linktokakao">

<div class="sidemenu">

        <div class="sidemenu_img"><img src="images/SMHRD_kakao.png" width="100px" height="100px"></div>

        <span>

            <font size="4">

            스마트

            <br>

            본체개발원

            </font>

            <br><br>

            <font size="2">

            플러스친구

            </font>

        </span>


</div>

</a>

 

원래는 main.jsp 에 있던 코드를 메뉴.jsp로 분활하고

main.jsp 에서 <%@ include file="/Menu.jsp" %>

한줄의 코드만 씀으로서 활용할수 있게된다.

728x90
반응형
LIST