웹스토어 로그인, 회원가입 페이지 예제

    DB 만들기

    member.sql

    use webstoredb;
    drop table if exists member;
    create table member(
    	id				varchar(10) not null,
    	password		varchar(10) not null,
    	name			varchar(10) not null,
    	gender			varchar(4),
    	birth			varchar(10),
    	mail			varchar(30),
    	phone			varchar(20),
    	address    		varchar(90),
    	registDay		varchar(50),
    	primary key(id)
    )default charset=utf8mb4;
    
    select * from member;

    메뉴 페이지 수정

    태그 라이브러리 추가 jstl

    session 추가 (로그인하면 계정으로 세션이 지정되어 진행이 계속 된다. id 데이터 세션에 저장)

    메뉴에 로그인이 되었을 경우와 되지 않았을 경우 화면 차이 두기

    파일경로 처리

    menu.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>    
    
    <%
    	request.setCharacterEncoding("UTF-8");
    	String sessionId = (String)session.getAttribute("sessionId");	//로그인 여부 판단
    %>
    
    <nav class="navbar navbar-expand navbar-dark bg-dark"><!-- 네비게이션 바를 만듬 -->
    	<div class="container">							  <!-- container라는 클래스부터 내용을 표시함 -->
    		<div class="navbar-header">					  <!-- 네비게이션 헤더 -->
    			<a class="navbar-brand" href="${pageContext.request.contextPath}/welcome.jsp">HOME</a>
    		</div>
    		
    		<!-- 네비게이션 바 요소를 추가등록 -->
    		<div>
    			<ul class="navbar-nav mr-auto">		<!-- mr-auto : 마진공간 자동설정 -->
    												<!--sessionId가 null이면 로그인으로 링크, 로그인 되어있다면-->
    				<c:choose>						
    					<c:when test="${empty sessionId }"> 
    						<li class="nav-item"><a class="nav-link" href='<c:url value="/member/loginMember.jsp" />'>로그인</a></li>
    						<li class="nav-item"><a class="nav-link" href='<c:url value="/member/addMember.jsp" />'>회원가입</a></li>
    					</c:when>
    					<c:otherwise> 
    						<li style="padding-top:7px; color:white;">[<%=sessionId %> 님]</li>
    						<li class="nav-item"><a class="nav-link" href='<c:url value="/member/logoutMember.jsp" />'>로그아웃</a></li>
    						<li class="nav-item"><a class="nav-link" href='<c:url value="/member/UpdateMember.jsp" />'>회원 수정</a></li>
    					</c:otherwise>
    					
    				</c:choose>
    				
    				<li class="nav-item"><a href="${pageContext.request.contextPath}/products.jsp" class="nav-link">상품목록</a></li>
    				<li class="nav-item"><a href="${pageContext.request.contextPath}/addProduct.jsp" class="nav-link">상품등록</a></li>
    				<li class="nav-item"><a href="${pageContext.request.contextPath}/editProduct.jsp?edit=update" class="nav-link">상품수정</a></li>
    				<li class="nav-item"><a href="${pageContext.request.contextPath}/editProduct.jsp?edit=delete" class="nav-link">상품삭제</a></li>
    			</ul>
    		</div>
    		
    	</div>
    </nav>

    로그인 페이지

    로그인 실패시 메시지 출력

    연속 로그인 실패시 예방조치 처리 

    loginMember.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>로그인 - WebStore</title>
      <link rel="stylesheet" href="../resources/css/bootstrap.min.css"> 
    </head>
    <body>
    	<jsp:include page="../menu.jsp"/>
    	
    	<div class="jumbotron">
    		<div class="container">
    			<h1 class="display-3">로그인</h1>
    		</div>
    	</div>
    	
    	<%! int cnt = 0;  %>
    	
    	
    	<div class="container" align="center">
    		<div class="col-md-4 col-md-offset-4">
    			<h3 class="form-signin-heading">Please sing in</h3>
    			<%
    				String error = request.getParameter("error");	/* 로그인 실패했을때 */
    				if(error != null) {								/* 에러발생 */ 
    					
    					if(cnt == 3) {
    						out.println("<div class='alert alert-danger'>");
    						out.println("3회 로그인 실패했습니다. 1분 후에 확인해 주세요!");
    						out.println("</div>");
    					}
    					else {
    						out.println("<div class='alert alert-danger'>");
    						out.println("로그인 실패했습니다. 아이디와 비밀번호를 확인해 주세요!");
    						out.println("</div>");
    					}
    				}
    				cnt++;
    			%>
    			
    			<form action="processLoginMember.jsp" method="post" class="form-signin">
    				<div class="form-group">
    					<label for="inputUserName" class="sr-only">User Name</label>
    					<input type="text" class="form-control" placeholder="아이디" name="id" required autofocus>
    				</div>
    				<div class="form-group">
    					<label for="inputUserName" class="sr-only">Password</label>
    					<input type="password" class="form-control" placeholder="비밀번호" name="password" required>
    				</div>
    			
    				<button class="btn btn-lg btn-success btn-block" type="submit">로그인</button>
    			</form>
    		</div>
    	</div>
    </body>
    </html>

    3회 로그인 실패시 화면


    로그인 처리 페이지

    jstl 태그 라이브러리 sql태그 이용하여 DB 접속

    정상적으로 로그인이 된다면 redirect로 파라미터 get방식 처리 (msg=2) 

    로그인값이 없다면 (error=1) 

    processLoginMember.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>	<!-- jstl를 사용하기위해서 taglib지시자 사용 -->
    <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
    
    <%
    	request.setCharacterEncoding("UTF-8");
    
    	String id = request.getParameter("id");
    	String password = request.getParameter("password");
    %>
    								<!-- jstl태그라이브러리의 sql태그 이용하여 DB 접속하는 코드 -->
    <sql:setDataSource var="dataSource"
    					url="jdbc:mysql://localhost:3306/webstoredb?serverTimezone=UTC"
    					driver="com.mysql.cj.jdbc.Driver"
    					user="root"
    					password="7496"/>
    								<!-- sql쿼리문 실행하는 코드, executeQuery()기능과 유사 -->	
    <sql:query dataSource="${dataSource}" var="resultSet"> 
    	select * from member where id = ? and password = ?
    	<sql:param value="<%=id %>" />
    	<sql:param value="<%=password %>" />
    </sql:query>					
    
    <c:forEach var="row" items="${resultSet.rows}">
    	<%
    		session.setAttribute("sessionId", id);			/* 로그인이 되면 사용자 아이디를 세션에 설정함(저장) */
    	%>
    	<c:redirect url="resultMember.jsp?msg=2"/>			<!-- 로그인 의미로 사용할 것이다. -->
    </c:forEach>
    
    <c:redirect url="loginMember.jsp?error=1"/>

    DB sql 데이터 추가

    admin 데이터, 예제데이터 추가

    member.sql

    use webstoredb;
    drop table if exists member;
    create table member(
    	id				varchar(10) not null,
    	password		varchar(10) not null,
    	name			varchar(10) not null,
    	gender			varchar(4),
    	birth			varchar(10),
    	mail			varchar(30),
    	phone			varchar(20),
    	address    		varchar(90),
    	registDay		varchar(50),
    	primary key(id)
    )default charset=utf8mb4;
    
    select * from member;
    
    insert into member values('gumi','0217','이방원','남','2000/01/01',
    'lee@ggmail.com', '010', '구미', '2021/02/03');
    
    insert into member values('admin','admin0217','관리자', '', '', '', '', '', '');
    

     

    회원정보 페이지 (로그인 직후 페이지)

    processLoginMember.jsp에서 파라미터 값을 받아서 처리(msg)

    resultMember.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>회원정보 - Webstore</title>
      <link rel="stylesheet" href="../resources/css/bootstrap.min.css"> 
    </head>
    <body>
    	<jsp:include page="../menu.jsp"/>
    	
    	<div class="jumbotron">
    		<div class="container">
    			<h1 class="display-3">회원 정보</h1>
    		</div>
    	</div>
    	
    	<div class="container">
    		<%
    			String msg = request.getParameter("msg");
    			if(msg != null) {
    				if(msg.equals("0")) {
    					out.println("<h2 class='alert alert-danger'> 회원 정보가 수정 되었습니다. </h2>");
    				}
    				else if(msg.equals("1")) {
    					out.println("<h2 class='alert alert-danger'> 회원 가입을 축하드립니다. 로그인해 주세요. </h2>");
    				}
    				else if(msg.equals("2")) {
    					String loginId = (String)session.getAttribute("sessionId");
    					out.println("<h2 class='alert alert-danger'> "+loginId+"님 환영합니다. </h2>");
    				}
    				else if(msg.equals("3")) {
    					out.println("<h2 class='alert alert-danger'> 로그아웃 하셨습니다. </h2>");
    				}
    			}
    			else {
    				out.println("<h2 class='alert alert-danger'> 회원 정보가 삭제되었습니다. </h2>");
    			}
    		%>
    	
    	</div>
    		
    </body>
    </html>

    로그인 후 화면
    로그인 직후 화면(파라미터값 msg=2로 출력된 결과)

     


    계정관리 처리 (메뉴 수정)

    등록, 수정, 삭제는 관리자만 쓰는 메뉴임으로 상황에 맞게 수정

    el에 ne 는 != 의 의미와 같다

    menu.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>    
    
    <%
    	request.setCharacterEncoding("UTF-8");
    	String sessionId = (String)session.getAttribute("sessionId");	//로그인 여부 판단
    %>
    
    <nav class="navbar navbar-expand navbar-dark bg-dark"><!-- 네비게이션 바를 만듬 -->
    	<div class="container">							  <!-- container라는 클래스부터 내용을 표시함 -->
    		<div class="navbar-header">					  <!-- 네비게이션 헤더 -->
    			<a class="navbar-brand" href="${pageContext.request.contextPath}/welcome.jsp">HOME</a>
    		</div>
    		
    		<!-- 네비게이션 바 요소를 추가등록 -->
    		<div>
    			<ul class="navbar-nav mr-auto">		<!-- mr-auto : 마진공간 자동설정 -->
    												<!--sessionId가 null이면 로그인으로 링크, 로그인 되어있다면-->
    				<c:choose>						
    					<c:when test="${empty sessionId }"> 
    						<li class="nav-item"><a class="nav-link" href='<c:url value="/member/loginMember.jsp" />'>로그인</a></li>
    						<li class="nav-item"><a class="nav-link" href='<c:url value="/member/addMember.jsp" />'>회원가입</a></li>
    					</c:when>
    					<c:otherwise> 
    						<li style="padding-top:7px; color:white;">[<%=sessionId %> 님]</li>
    						<li class="nav-item"><a class="nav-link" href='<c:url value="/member/logoutMember.jsp" />'>로그아웃</a></li>
    						<li class="nav-item"><a class="nav-link" href='<c:url value="/member/UpdateMember.jsp" />'>회원 수정</a></li>
    					</c:otherwise>
    					
    				</c:choose>
    				
    				<c:choose>
    					<c:when test="${sessionId ne 'admin' }">
    						<li class="nav-item"><a href="${pageContext.request.contextPath}/products.jsp" class="nav-link">상품목록</a></li>
    					</c:when>
    					<c:otherwise>
    						<li class="nav-item"><a href="${pageContext.request.contextPath}/products.jsp" class="nav-link">상품목록</a></li>
    						<li class="nav-item"><a href="${pageContext.request.contextPath}/addProduct.jsp" class="nav-link">상품등록</a></li>
    						<li class="nav-item"><a href="${pageContext.request.contextPath}/editProduct.jsp?edit=update" class="nav-link">상품수정</a></li>
    						<li class="nav-item"><a href="${pageContext.request.contextPath}/editProduct.jsp?edit=delete" class="nav-link">상품삭제</a></li>
    					</c:otherwise>
    				</c:choose>
    				
    			</ul>
    		</div>
    		
    	</div>
    </nav>

    로그인 전 화면
    admin  로그인
    일반 계정으로 로그인

     

     

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading