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
'SPRING > Servlet || JSP' 카테고리의 다른 글
5.(JSP) MVC 패턴(model1,model2) (0) | 2021.03.04 |
---|---|
4.JSP/서블릿 RequestDispatcher // response.sendRedirect() 데이터 갱신문제 (0) | 2021.02.25 |
2.5 JSP (0) | 2021.02.07 |
2.(서블릿)GET / POST 의 한글 인코딩 방법 (0) | 2021.02.06 |
1.서블릿 (0) | 2021.02.06 |