0.파일 구조
/src
├── Libraries
│ └── user
│ └── User.java
│ └── UserDAO.java
/src/main/webapp
├── META-INF
│ └── MANIFEST.MF
├── WEB-INF
│ └── web.xml
│ └── lib
├── css/
├── fonts/
├── js/
├── main.jsp
├── index.jsp
├── login.jsp
├── loginAction.jsp
├── logoutAction.jsp
├── join.jsp
├── joinAction.jsp
└── index.jsp
1.Session
Session(세션)이란?
클라이언트와 서버 간의 상호작용을 추적 및 관리하기 위해 사용되는 일시적 연결 기술로, 웹 서버에 상태를 유지하기 위한 정보를 저장하고 요청/응답 헤더를 통해 전송합니다.
Session을 사용하는 이유?
HTTP는 본래 상태를 유지하지 않는 stateless 프로토콜로 연결이 끝난다면 이전 요청을 저장하지 않으므로, 세션을 활용하여 이전 정보를 유지합니다.
Session 생성 코드
아래는 userID라는 세션을 생성하는 코드로 joinAction.jsp, loginAction.jsp에 각각 회원가입 성공 및 로그인 성공 상태에 세션을 부여하도록 작성합니다.
session.setAttribute("userID", user.getUserID());
logoutAction.jsp
로그아웃을 수행하고 세션을 폐기하는 기능을 수행합니다.
①webapp 에서 'New' - 'jsp' - Filename에 'logoutAction.jsp' 입력

②코드 작성
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Searcher</title>
</head>
<body>
<%
session.invalidate(); // 세션 만료
%>
<script>
location.href = 'main.jsp';
</script>
</body>
</html>
loginAction.jsp/joinAction.jsp 세션 관리
만약 로그인한 상태에서 로그인/회원가입 기능을 하는 페이지를 동작시키면 안되기 때문에, 유효한 세션이 존재한다면 이미 로그인되었다는 메시지를 출력하고 main.jsp로 되돌아가게 하도록 구현해야 합니다.
①추가 코드
...
<body>
<%
String userID = null;
if (session.getAttribute("userID") != null) {
userID = (String) session.getAttribute("userID");
}
if (userID != null) {
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('you are already loged in')");
script.println("location.href='main.jsp'");
script.println("</script>");
}
...
2.Main page
Index.jsp
path 없이 BSS로 접속한 사용자들에게 출력되는 페이지로, main.jsp 리다이렉트를 수행합니다.
①webapp 에서 'New' - 'jsp' - Filename에 'index.jsp' 입력

②코드 작성
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Board site</title>
</head>
<body>
<script>
location.href='main.jsp';
</script>
</body>
</html>
main.jsp
①webapp 에서 'New' - 'jsp' - Filename에 'main.jsp' 입력

②코드 작성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.PrintWriter" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width", initial-scale="1">
<link rel="stylesheet" href="css/bootstrap.css">
<title>JSP Board</title>
</head>
<body>
<%
String userID = null;
if (session.getAttribute("userID") != null) { // 로그인 유무 확인
userID = (String) session.getAttribute("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 Board</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">Main</a>
<li><a href="bbs.jsp">Board</a>
</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">Access<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="login.jsp">Login</a></li>
<li><a href="join.jsp">Sign up</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">My page<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="logoutAction.jsp">Logout</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>
③동작 확인
로그인하지 않은 상태에서는 "Access" 메뉴에 나타나는 항목이 "Login"과 "Sign up"인 반면, 로그인을 했다면 메뉴도 "My page"로 변경되고 항목은 "Logout"으로 나타납니다.


'project > JSP+Oracle_DB+Apache_Tomcat' 카테고리의 다른 글
| [JSP/OracleDB/Tomcat/Eclipse]글쓰기 기능 (0) | 2025.03.09 |
|---|---|
| [JSP/OracleDB/Tomcat/Eclipse]게시판 기능 (0) | 2025.03.05 |
| [JSP/OracleDB/Tomcat/Eclipse]Sign up 기능 (0) | 2025.02.28 |
| [JSP/OracleDB/Tomcat/Eclipse]Login 기능 (0) | 2025.02.22 |
| [JSP/OracleDB/Tomcat/Eclipse]환경 설정과 여러가지 에러들 (5) | 2024.12.27 |