JSP/JSP게시판 만들기

JSP 게시판 만들기 / 접속한 회원 세션 관리하기 [동빈나님 강의.7]

양상추상츄 2021. 9. 28. 22:49

https://www.youtube.com/watch?v=eJRB__ErXd4&list=PLRx0vPvlEmdAZv_okJzox5wj2gG_fNh_6&index=7 

 

세션이란 현재 접속한 회원에 할당하는 고유한 ID이다.

웹서버는 한명의 회원을 세션ID로 구분할 수 있다.

따라서 로그인에 성공했을때 세션ID를 부여하는것으로 부터 세션관리가 시작된다고 할 수 있다.

 

로그인 회원가입을 포함 세션관리는 보안등에 있어서 중요하여 숙지할 필요가 있다.

 

1. loginAction.jsp / joinAction.jsp에 로그인에 성공한 회원에 세션할당 기능추가

3. loginAction.jsp / joinAction.jsp에 재로그인이 안되게 코드 추가

 

loginAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="user.UserDAO" %>
<%@ page import="java.io.PrintWriter" %> <!-- 자바코드 쓸수 있게 해줌 -->
<% request.setCharacterEncoding("UTF-8"); %>
<jsp:useBean id="user" class="user.User" scope="page" />
<jsp:setProperty name="user" property="userID" />
<jsp:setProperty name="user" property="userPassword" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
    <%
        String userID = null;
        if(session.getAttribute("userID") != null) { //user가 접속이 되어있다면 세션값이 할당되어 있다면
            userID = (String) session.getAttribute("userID");
        } 
        if (userID != null) { //로그인 되어있는 사람이 재로그인 되지 않도록함
            PrintWriter script = response.getWriter();
            script.println("<script>");
            script.println("alert('이미 로그인이 되어있습니다.')");
            script.println("location.href = 'main.jsp'"); // 메인페이지로 보냄
            script.println("</script>");
        }
        UserDAO userDAO = new UserDAO();
        int result = userDAO.login(user.getUserID(), user.getUserPassword());
        if (result == 1) {
            session.setAttribute("userID", user.getUserID());//userID를 세션값할당
            PrintWriter script = response.getWriter();
            script.println("<script>");
            script.println("location.href = 'main.jsp'"); // 로그인 되면 이동할페이지
            script.println("</script>");
        } else if (result == 0) { // 비밀번호 불일치시
            PrintWriter script = response.getWriter();
            script.println("<script>");
            script.println("alert('비밀번호가 틀립니다.')");
            script.println("history.back()");
            script.println("</script>");
        } else if (result == -1) { 
            PrintWriter script = response.getWriter();
            script.println("<script>");
            script.println("alert('존재하지 않는 아이디입니다.')");
            script.println("history.back()");
            script.println("</script>");
        } else if (result == -2) { 
            PrintWriter script = response.getWriter();
            script.println("<script>");
            script.println("alert('데이터베이스 오류가 발생했습니다.')");
            script.println("history.back()");
            script.println("</script>");
        }
    %>
</body>
</html>

 

 joinAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="user.UserDAO" %>
<%@ page import="java.io.PrintWriter" %>
<% request.setCharacterEncoding("UTF-8"); %>
<!-- 밑의 코드를 써야 내용 받을 수 있음 -->
<!-- 각각의 정보를 가져와 user라는 객체완성 -->
<jsp:useBean id="user" class="user.User" scope="page" />
<jsp:setProperty name="user" property="userID" />
<jsp:setProperty name="user" property="userPassword" />
<jsp:setProperty name="user" property="userName" />
<jsp:setProperty name="user" property="userGender" />
<jsp:setProperty name="user" property="userEmail" />

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
    <%
        String userID = null;
        if(session.getAttribute("userID") != null) { //user가 접속이 되어있다면 세션값이 할당되어 있다면
            userID = (String) session.getAttribute("userID");
        } 
        if (userID != null) { //로그인 되어있는 사람이 재로그인 되지 않도록함
            PrintWriter script = response.getWriter();
            script.println("<script>");
            script.println("alert('이미 로그인이 되어있습니다.')");
            script.println("location.href = 'main.jsp'");
            script.println("</script>");
        }

        //빈공간에 대한 처리, 입력안했을때
        if (user.getUserID() == null || user.getUserPassword() == null || user.getUserName() == null 
            || user.getUserGender() == null || user.getUserEmail() == null) {
            PrintWriter script = response.getWriter();
            script.println("<script>");
            script.println("alert('입력이 안 된 사항이 있습니다.')");
            script.println("history.back()"); // 뒤로가기
            script.println("</script>");
        } else {
            UserDAO userDAO = new UserDAO(); //데이터 베이스에 접근 가능한 객체생성
            int result = userDAO.join(user);
            if (result == -1) {
                PrintWriter script = response.getWriter();
                script.println("<script>");
                script.println("alert('이미 존재하는 아이디입니다.')");
                script.println("history.back()");
                script.println("</script>");
            } else { // 회원가입이 되었을때 로그인 페이지로 넘어감,-1이 아닌경우 전부 넘어가도록함
                session.setAttribute("userID", user.getUserID());//userID를 세션값으로
                PrintWriter script = response.getWriter();
                script.println("<script>");
                script.println("location.href = 'main.jsp'");
                script.println("</script>");
        }
    }
%>
</body>
</html>

 

2. logoutAction.jsp 생성 이 페이지에서 세션할당 해지할 수 있음

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
    <%
        session.invalidate(); //현재 이 페이지에 접속한 회원이 세션을 빼앗기게함
    %>
    <script>
        location.href = 'main.jsp'; //다시 메인페이지로 보냄
    </script>
</body>
</html>

 

4. main.jsp 만들기

index.jsp에 login.jsp를 main.jsp로 변경해놓는다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!-- 스크립트 문장 실행시 필요한 라이브러리 -->
<%@ page import="java.io.PrintWriter" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width", initial-scale="1">
<link rel="stylesheet" href="css/bootstrap.css">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
    <%
        String userID = null;
        if(session.getAttribute("userID") != null) {
            userID = (String) session.getAttribute("userID"); //로그인한 사람들은 해당아이디가 userID에 저장
        }
    %>
    <nav class="navbar navbar-default">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed"
                data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"
                aria-expanded="false">
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="main.jsp">JSP 게시판 웹 사이트</a>
        </div>
        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav">
                <li class="active"><a href="main.jsp">메인</a></li> <!-- 현재 페이지가 메인임을 알려줌 -->
                <li><a href="bbs.jsp">게시판</a></li>
            </ul>

            <% // 로그인이 되어있지 않은 사람들만 로그인 회원가입 보이게
                if(userID == null) {
            %>
            <ul class="nav navbar-nav navbar-right"> // 오른쪽 토글
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle"
                        data-toggle="dropdown" role="button" aria-haspopup="true"
                        aria-expanded="false">접속하기<span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="login.jsp">로그인</a></li>
                        <li><a href="join.jsp">회원가입</a></li>
                    </ul>
                </li>
            </ul>
            <%//로그인이 되어있다면
               } else {
            %>
            <ul class="nav navbar-nav navbar-right">
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle"
                       data-toggle="dropdown" role="button" aria-haspopup="true"
                       aria-expanded="false">회원관리<span class="caret"></span></a>
                   <ul class="dropdown-menu">
                       <li><a href="logoutAction.jsp">로그아웃</a></li>
                   </ul>
                </li>
            </ul>
            <%
                }
            %>
        </div>
    </nav>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="js/bootstrap.js"></script>
</body>
</html>

 

 

 

*테스트

main.jsp

 

로그인이 안된상태에서 접속하기를 누르면 로그인과 회원가입이 보인다.

 

로그인이 된 경우 토글이 회원관리로 바뀌고 로그인이 사라짐

 

로그아웃을 누르면 다시 처음 main.jsp로 돌아옴