[JSP] 15. Jsp/Servlet(MVC) - Session(세션) 프로젝트(로그인) - (2)
1부에 이어서 "JSP/Servlet 기반의 세션 프로젝트"를 진행하도록 하겠다.
[JSP] 14. Jsp/Servlet(MVC) - Session(세션) 프로젝트(로그인) - (1), 2020-09-25
10. View - Login.jsp
/member/login.do에 관한 페이지이다.
생성해야 할 경로 위치: /src/main/webapp/WEB-INF/views/member
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 - Member Login(세션 - Session)</title>
<style>
a {
text-decoration:none
}
body{
font-size:12px;
font-family:'Arial';
}
#memberTbl{
width:700px;
border:1px solid #e2e2e2;
text-align:center;
margin:auto;
}
div{
text-align:center;
}
</style>
</head>
<body>
<div>
<h3>로그인 페이지(Login - Page) - 세션(Session)</h3>
<!-- 본문 -->
<form action="process.do" method="POST">
<table id="memberTbl">
<tr>
<td style="width:20%; text-align:center;">
아이디(userID)
</td>
<td style="border-left:1px solid #e2e2e2; text-align:center;">
<input type="text" name="userID" style="width:90%">
</td>
</tr>
<tr>
<td style="width:20%; border-top:1px solid #e2e2e2; text-align:center;">
비밀번호(password)
</td>
<td style="border-left:1px solid #e2e2e2; border-top:1px solid #e2e2e2; text-align:center;">
<input type="text" name="password" style="width:90%">
</td>
</tr>
<tr>
<td colspan="2" style="border-top:1px solid #e2e2e2; text-align:center;">
<input type="submit" value="로그인(Login)" style="width:90%">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
파일명: login.jsp
[첨부(Attachments)]
11. View - error_alert.jsp
에러 페이지에 관한 것이다.
시중 책을 보면, ServletController 내에 PrintWriter 함수로 구현되어 있는데, 해당 부분을 아예 분리시켰다.
생성해야 할 경로 위치: /src/main/webapp/WEB-INF/views/member
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 구현 영역(서버 사이드) -->
<%
String msg = (String)session.getAttribute("member_error_msg");
String redirect_url = (String)session.getAttribute("member_redirect_url");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>에러 - 페이지(Error - Page / Session)</title>
<script>
alert('<%= msg %>');
location.href('<%= redirect_url %>');
</script>
</head>
<body>
</body>
</html>
파일명: error_alert.jsp
[첨부(Attachments)]
12. View - logon.jsp
logon.jsp 페이지에 관한 것이다.
생성해야 할 경로 위치: /src/main/webapp/WEB-INF/views/member
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 구현 -->
<%
String userID = (String)session.getAttribute("userID");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 상태 - <%= userID %> 세션(Session)</title>
<style>
<!-- 바디 영역 -->
body{
font-family:'Arial';
font-size:13px;
}
#memberTbl{
font-family:'Arial';
font-size:13px;
width:700px;
border:2px solid #e2e2e2;
text-align:center;
margin:auto;
}
a {
text-decoration:none
}
div{
text-align:center;
}
</style>
<script>
function welcome(){
alert("Hello World");
}
function logout(){
location.href ('logout.do');
}
</script>
</head>
<body>
<div>
<h3>로그인 상태 출력 - 페이지(Session)</h3>
<!-- 화면 출력 -->
<table id="memberTbl">
<tr>
<td style="width:20%">
아이디(ID)
</td>
<td style="border-left:2px solid #e2e2e2;">
<%= userID %>
</td>
</tr>
<tr>
<td colspan="2" style="border-top:2px solid #e2e2e2;">
<a href="javascript:welcome();">인사말 출력</a>
<a href="javascript:logout();">로그아웃</a>
</td>
</tr>
</table>
</div>
</body>
</html>
파일명: logon.jsp
[첨부(Attachments)]
13. Controller - MemberLoginController.java
MemberLoginController.java에 관한 것이다.
로그인 시작 페이지에 대한 처리 내용을 기술한 영역이다.
package com.member.web.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MemberLoginController implements Controller {
public void execute(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
HttpUtil.forward(req, res, "/WEB-INF/views/member/login.jsp");
}
}
파일명: MemberLoginController.jsp
[첨부(Attachments)]
14. Controller - MemberProcessController.java
로그인 과정에 대한 처리 내용을 기술한 영역이다.
package com.member.web.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class MemberProcessController implements Controller {
public void execute(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
String id;
String passwd;
String charset;
HttpSession session;
charset = (String) req.getAttribute("charset");
req.setCharacterEncoding(charset);
id = req.getParameter("userID");
passwd = req.getParameter("password");
// System.out.println("userID:" + id);
// System.out.println("password:" + passwd);
// 세션 정보
session = req.getSession();
// 세션 생성
if ( id.equals("user") && passwd.equals("1234") ) {
session.setAttribute("userID", id);
session.setAttribute("userName", "회원");
res.sendRedirect("logon.do");
}
else {
session.setAttribute("member_error_msg", "아이디와 비밀번호를 확인하세요.");
session.setAttribute("member_redirect_url", "login.do");
res.sendRedirect("errorAlert.do");
}
}
}
파일명: MemberProcessController.jsp
[첨부(Attachments)]
15. Controller - MemberLogonController.java
로그인이 되었을 때 출력되는 화면에 관한 것이다.
package com.member.web.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class MemberLogonController implements Controller {
public void execute(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
HttpSession session = req.getSession();
String userID = (String) session.getAttribute("userID");
// 세션이 존재할 때
if ( userID != null )
{
System.out.println("세션 존재 - 로그인");
HttpUtil.forward(req, res, "/WEB-INF/views/member/logon.jsp");
}
else {
System.out.println("세션 없음.");
session.setAttribute("member_error_msg", "로그인 상태를 확인해주세요.");
session.setAttribute("member_redirect_url", "login.do");
res.sendRedirect("errorAlert.do");
} // end of if
}
}
파일명: MemberLogonController.jsp
[첨부(Attachments)]
16. Controller - MemberLogoutController.java
로그아웃 처리에 관한 기술이다.
package com.member.web.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class MemberLogoutController implements Controller {
public void execute(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
HttpSession session = req.getSession();
String userID = (String)session.getAttribute("userID");
// 세션이 존재할 때
if ( userID != null ) {
session.removeAttribute("userID");
session.removeAttribute("userName");
System.out.println("세션 존재: 삭제완료");
res.sendRedirect("login.do");
}
}
}
파일명: MemberLogoutController.jsp
[첨부(Attachments)]
17. Controller - MemberSessionAllKillController.java
세션 종료에 관한 영역이다.
package com.member.web.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class MemberSessionAllKillController implements Controller {
public void execute(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
HttpSession session = req.getSession();
String userID = (String)session.getAttribute("userID");
// 세션 종료
if ( userID != null ) {
session.invalidate();
System.out.println("세션 종료");
res.sendRedirect("login.do");
}
}
}
파일명: MemberSessionAllKillController.jsp
[첨부(Attachments)]
MemberSessionAllKillController.zip
18. Controller - MemberErrorAlertController.java
Error Alert에 관한 내용을 기술하였다.
특이한 점은 오류가 하나라도 발생하면, 모든 세션을 파괴시키는 형태로 구현하였다.
물론 실제 비즈니스 로직 상에서 오류 하나가 발생했다고 전부 세션을 파괴하는 행위는 하진 않을 것이다.
package com.member.web.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class MemberErrorAlertController implements Controller {
@Override
public void execute(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
HttpUtil.forward(req, res, "/WEB-INF/views/member/error_alert.jsp");
HttpSession session = req.getSession();
session.invalidate();
}
}
파일명: MemberErrorAlertController.jsp
[첨부(Attachments)]
MemberErrorAlertController.zip
19. 결론(Conclusion)
세션 구현 방법론은 알겠는데, 코드로 구현하려고 하면 아이디어가 떠오르지 않을 때 참고해서 사용하면 좋을 것으로 보인다.
* 참고 자료(References)
1. JSP & Servlet 에서 세션 사용하는 방법, https://juns0201.tistory.com/115, Accessed by 2020-09-25, Last Modified 2012-08-07.
-> 추천(50점): 세션 사용 방법에 대해서 자세히 잘 나와있다.
'소프트웨어(SW) > JSP' 카테고리의 다른 글
[JSP] 17. JSP/Servlet MVC2 - 페이징네이션과 검색 그리고 오라클 프로젝트 (1) (2) | 2020.09.30 |
---|---|
[JSP] 16. 쿠키(Cookie) - 프로젝트(생성, 조회, 삭제) (2) | 2020.09.26 |
[JSP] 14. Jsp/Servlet(MVC) - Session(세션) 프로젝트(로그인) - (1) (2) | 2020.09.25 |
[JSP] 13. Jsp/Servlet(MVC) Maven 기반의 다중 파일 업로드, 다운로드 구현(2) (2) | 2020.09.25 |
[JSP] 12. Jsp/Servlet(MVC) Maven 기반의 다중 파일 업로드, 다운로드 구현(1) (2) | 2020.09.24 |