
"Request scope"는 웹 개발에서 사용되는 용어로, 각각의 HTTP 요청마다 새로 생성되며, 해당 요청 내에서만 유효한 객체나 데이터를 의미합니다. 이러한 "scope"는 요청의 수명 주기 동안 유지되며, 요청이 완료되면 소멸합니다.
"같은 request scope를 가졌다"는 표현은 같은 HTTP 요청 내에서 작동하는 여러 개체나 컴포넌트가 동일한 요청 범위(scope)를 가지고 있다는 것을 의미합니다. 이는 같은 요청 내에서 생성된 데이터나 상태를 공유하고, 이를 통해 정보를 교환할 수 있다는 것을 의미합니다.
쿠키 : 클라이언트에 저장(텍스트, 기본형, String)
세션 : 서버에 저장(Object)->광범위
stateless - cookieStart.jsp
C:\Users\사용자\AppData\Local\Google\Chrome\User Data\Default\Network


<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>stateless - cookieStart.jsp</title>
</head>
<body>
<h3><a href="/serverweb/setCookie">쿠키설정하기</a></h3>
<h3><a href="/serverweb/getCookie">쿠키가져오기</a></h3>
</body>
</html>
@WebServlet(name="setCookie", urlPatterns = {"/setCookie"})
public class SetCookieServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.쿠키로 클라이언트에 보내고 싶은 데이터를 셋팅해서 Cookie객체를 생성
//=>쿠키에 한글을 쓰는 경우 인코딩을 해야한다.
//URL에 한글이 포함된 경우 한글이 깨질 수 있으므로 %기호를 포함해서 변환
//인코딩은 데이터 형식을 변환하는 과정
//Cookie cookie = new Cookie("bookTitle", URLEncoder.encode("이클립스", "UTF-8"));//지금은 자동변환돼서 안해도되지만 해야하는곳도있음
Cookie cookie1 = new Cookie("bookTitle", "이클립스");
Cookie cookie2 = new Cookie("bookPage", "128");
//2. 쿠키에 옵션들을 설정
//1) 유효시간 - 초단위
cookie1.setMaxAge(60*60*24);
cookie2.setMaxAge(60*60*24);//60초 60분 24시간
//3.response에 쿠키를 저장하기
response.addCookie(cookie1);
response.addCookie(cookie2);
//4.요청재지정(jsp로 response하기)
response.sendRedirect("/serverweb/stateless/cookieStart.jsp");
}
}
@WebServlet(name="getCookie", urlPatterns = {"/getCookie"})
public class GetCookieServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. request메시지에 쿠키정보가 포함되어 요청되므로 request객체에서 쿠키정보를 추출
Cookie[] cookies= request.getCookies();
//2. Cookie[]에서 원하는 쿠키를 찾아 쿠키의 value를 저장
String bookTitle = "";
String bookPage = "";
for(Cookie cookie:cookies) {
if(cookie.getName().equals("bookTitle")) {
bookTitle = cookie.getValue();
}else if(cookie.getName().equals("bookPage")){
bookPage = cookie.getValue();
}
System.out.println(cookie.getName()+" : "+cookie.getValue());
}
//3.꺼낸 쿠키를 공유
request.setAttribute("bookTitle", bookTitle);
request.setAttribute("bookPage", bookPage);
//4.요청재지정
RequestDispatcher rd = request.getRequestDispatcher("/stateless/cookieResult.jsp");
rd.forward(request, response);
}
}
<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>cookieResult</title>
</head>
<body>
<%
//서블릿에서 공유한 데이터를 추출
String bookTitle = (String)request.getAttribute("bookTitle");
String bookPage = (String)request.getAttribute("bookPage");
//encoding된 데이터를 변경
//URLDecoder.decode(bookTitle,"UTF-8");
%>
<h2>최근에 보신 책의 제목은 <%=bookTitle %>이고 <%=bookPage %>페이지 까지 읽었습니다.</h2>
</body>
</html>
쿠키연습하기
쿠키 저장하기 - 아이디저장이라는 체크박스를 선택한 상태로 로그인이 성공하면 쿠키에 로그인한 사용자의 아이디를 id이름으로 저장될 수 있도록 LoginServlet을 수정하세요
2. login.jsp에서 쿠키에서 id 라는 이름으로 저장된 쿠키를 꺼내서 아이디를 입력하는 양식태그에 출력할 수 있도록 login.jsp를 수정하세요
@WebServlet(name = "login", urlPatterns = { "/member/mvc/login" })
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.요청정보추출
String id = request.getParameter("id");
String pass = request.getParameter("pass");
String check = request.getParameter("member_id_save");
//System.out.println(check);
//2.비지니스 메소드 호출
MemberDAO dao = new MemberDAOImpl();
MemberDTO user = dao.login(id, pass);
//로그인이 성공하고 체크박스에 체크가 된 상태면 로그인한 아이디를 저장
if(check!=null) {
if(user!=null & check.equals("T")) {
//쿠키 만들어 response에 add시키기
Cookie cookie = new Cookie("id", user.getId());
cookie.setMaxAge(60*60*24);
cookie.setPath("/serverweb");
response.addCookie(cookie);
}
}
System.out.println(user);
//3. 데이터 공유
request.setAttribute("loginUser", user);
//4. 요청재지정(응답페이지로 이동)
RequestDispatcher rd = request.getRequestDispatcher("/index.jsp");
rd.forward(request, response);
}
}
<%@page import="javax.sound.midi.SysexMessage"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<%
//쿠키를 추출해서 저장된 id정보 가져오기
String id = "";
Cookie[] cookies = request.getCookies();
if(cookies!=null){
for(Cookie cookie:cookies) {
if(cookie.getName().equals("id")) {
id = cookie.getValue();
}
System.out.println(cookie.getName()+":"+cookie.getValue());
}
}%>
</head>
<body>
<jsp:include page="../top.jsp"/>
<div class="container-fluid">
<div class="row">
<div class="col-lg-2 sidenav">
<jsp:include page="/layout/emp_menu.jsp"/>
</div>
<div class="col-lg-10">
<form name="login_frm" action="/serverweb/member/mvc/login" method="post">
<table cellpadding="0" cellspacing=5 width="815" bgcolor=#f3f3f3
border=0>
<tr>
<td bgcolor=#ffffff height=100% align=center valign=top>
<table cellpadding=0 cellspacing=0 border=0 width=710>
<tr>
<td>
<table cellpadding="0" cellspacing=0 width="100%"
bgcolor=#f7f7f7 border=0>
<tr>
<td bgcolor=#ffffff align=center>
<table cellpadding="0" cellspacing="0" border=0 align=center
width=678>
<tr>
<td align=center width=353>
<table cellpadding="0" cellspacing="0" border=0 width=353>
<tr>
<td>
<table cellpadding="0" cellspacing="0" border=0>
<tr>
<td colspan=3><img
src="/serverweb/images/page_login.gif"></td>
</tr>
<tr>
<td height=25></td>
</tr>
<tr>
<td background="/serverweb/images/inputBg.gif"><img
src="/serverweb/images/login_id.gif"></td>
<td background="/serverweb/images/inputBg.gif"><input
type="text" name="id" size="15" class="grayinput"
tabindex=1 style="width: 156;"
value="<%=id%>"></td>
<td rowspan=3 style="padding-left: 10" valign=bottom>
<input
type='image' src="/serverweb/images/btn_login.gif"
border="0" tabindex=3></td>
</tr>
<tr>
<td height=10></td>
</tr>
<tr>
<td background="/serverweb/images/inputBg.gif"><img
src="/serverweb/images/login_pass.gif"></td>
<td background="/serverweb/images/inputBg.gif"><input
type="password" name="pass" size="15"
class="grayinput" tabindex='2' style='width: 156;'>
</td>
</tr>
<tr>
<td colspan=3 align=right
style="padding-right: 9; padding-top: 12"><span
style="display: inline"><label
for="member_id_save">
<input type="checkbox"
name="member_id_save" id="member_id_save"
value="T"<%if(id.length()>1) %><%= "checked" %>/>아이디저장</label> </span></td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan=3></td>
</tr>
</table>
</td>
<td style="padding-left: 60; padding-top: 60"></td>
</tr>
<tr>
<td colspan=3 style="padding-top: 20" style=padding-left:40></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td height=30></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td height=49></td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</div>
</div>
</div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>sessionStart</title>
</head>
<body>
<h2><a href="/serverweb/sessionTest?id=myid">세션시작하기</a></h2>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>session_first</title>
</head>
<body>
<%
String mydata= (String)session.getAttribute("mydata");
%>
<h2>꺼낸 데이터:<%=mydata %></h2>
<hr/>
<h3><a href="/serverweb/stateless/session_second.jsp">데이터가 공유될까요?</a></h3>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>session_second.jsp</title>
</head>
<body>
<%
String mydata= (String)session.getAttribute("mydata");
%>
<h2>꺼낸 데이터(second문서 - 서블릿에서 공유한 데이터):<%=mydata %></h2>
<hr/>
<h3><a href="/serverweb/stateless/session_second.jsp">데이터가 공유될까요?</a></h3>
</body>
</html>
//세션테스트하기
@WebServlet(name="sessionTest", urlPatterns = {"/sessionTest"})
public class SessionTestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 요청정보 추출하기
String id = request.getParameter("id");
//2.데이터공유하기 - request는 한 번에 요청에 대해서만 데이터를 공유하므로 사이트를 서비스하는 기능을 사용하는 동안 데이터가 유지될 수 있도록 하기 어렵다.
//세션을 활용 - HttpSession객체를 만들어서 데이터를 공유
//request 객체가 제공하는 getSession메소드를 이용
//getSession() - 무조건 세션객체를 생성
//getSession(true) - getSession()과 동일
//getSession(false) - 사용하던 세션이 서버에 만들어져 있으면 해당 세션객체를 리턴하고 없으면 null을 리턴
HttpSession session = request.getSession();
session.setAttribute("mydata", id);
//3.요청재지정
RequestDispatcher rd = request.getRequestDispatcher("/stateless/session_first.jsp");
rd.forward(request, response);
}
}
세션을 이용해서 로그인 처리를 하세요
LoginServlet을 수정해서 로그인이 성공하면 세션을 생성하고 세션에 로그인 사용자의 정보를 저장
모든 jsp에서는 사용자의 정보를 세션에서 꺼내서 확인하기
@WebServlet(name = "login", urlPatterns = { "/member/mvc/login" })
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.요청정보추출
String id = request.getParameter("id");
String pass = request.getParameter("pass");
String check = request.getParameter("member_id_save");
//System.out.println(check);
//2.비지니스 메소드 호출
MemberDAO dao = new MemberDAOImpl();
MemberDTO user = dao.login(id, pass);
//로그인이 성공하고 체크박스에 체크가 된 상태면 로그인한 아이디를 저장
if(check!=null) {
if(user!=null & check.equals("T")) {
//쿠키 만들어 response에 add시키기
Cookie cookie = new Cookie("id", user.getId());
cookie.setMaxAge(60*60*24);
cookie.setPath("/serverweb");
response.addCookie(cookie);
}
}
System.out.println(user);
//3. 로그인 성공과 실패에 따라 다른 작업 처리
//로그인성공하면 세션을 생성하고 세션에 데이터를 공유
String path = "";
if(user!=null) {//로그인성공
HttpSession session = request.getSession();
session.setAttribute("loginUser", user);
//4. 요청재지정(응답페이지로 이동)
RequestDispatcher rd = request.getRequestDispatcher("/index.jsp");
rd.forward(request, response);
}else {//로그인 실패
response.sendRedirect("/serverweb/member_mvc/login.jsp");
}
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="member.MemberDTO"%>
<!DOCTYPE html>
<html>
<head>
<title>serverweb main</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<%MemberDTO loginUser = (MemberDTO)session.getAttribute("loginUser"); %>
<nav class="navbar navbar-inverse">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">자바나라</a>
</div>
<div class="collapse navbar-collapse" id="myNavbar">
<ul class="nav navbar-nav">
<li class="active"><a href="/serverweb/index.jsp">Home</a></li>
<!-- <li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">서블릿basic <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#">Page 1-1</a></li>
<li><a href="#">Page 1-2</a></li>
<li><a href="#">Page 1-3</a></li>
</ul>
</li> -->
<li><a href="#">서블릿 basic</a></li>
<li><a href="#">JSP basic</a></li>
<li><a href="#">부서관리</a></li>
<li><a href="/serverweb/member/mvc/list">인사관리</a></li>
<li><a href="#">고급기능</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<%if(loginUser==null){ %>
<%-- 로그인하지않아서 로그인유저가 널인상태 --%>
<li><a href="/serverweb/member_mvc/register.jsp"><span class="glyphicon glyphicon-user"></span> Sign Up</a></li>
<li><a href="/serverweb/member_mvc/login.jsp"><span class="glyphicon glyphicon-log-in"></span> Login</a></li>
<%}else{ %>
<%-- 로그인된 상태 --%>
<li><a href="/serverweb/member_mvc/login.jsp"><span class="glyphicon glyphicon-log-out"></span> Logout</a></li>
<%} %>
</ul>
</div>
</div>
</nav>
</body>
</html>
<%@page import="member.MemberDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%MemberDTO loginUser = (MemberDTO)session.getAttribute("loginUser"); %>
<h4>
<%if(loginUser==null){ %>
<small>즐거운 web</small>
<%}else{ %>
<small>즐거운 web(<%=loginUser.getName() %>님 환영합니다!)</small>
<%} %>
</h4>
<hr>
<div class="col-sm-10">
<div id="myCarousel" class="carousel slide" data-ride="carousel">
<!-- Indicators -->
<ol class="carousel-indicators">
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
<li data-target="#myCarousel" data-slide-to="1"></li>
</ol>
<!-- Wrapper for slides -->
<div class="carousel-inner" role="listbox">
<div class="item active">
<img src="/serverweb/images/m_garden01.jpg" alt="Image" width="800" height="320">
<div class="carousel-caption">
<h3>이번주는 기본 웹</h3>
<p>servlet,jsp 기본기능...</p>
</div>
</div>
<div class="item">
<img src="/serverweb/images/m_garden02.jpg" alt="Image" width="800" height="320">
<div class="carousel-caption">
<h3>다음주는 고급진 웹...</h3>
<p>Open API, Ajax..</p>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="left carousel-control" href="#myCarousel" role="button"
data-slide="prev"> <span
class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a> <a class="right carousel-control" href="#myCarousel" role="button"
data-slide="next"> <span
class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
<h5>
<span class="label label-success">Lorem</span>
</h5>
<br>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Excepteur sint occaecat cupidatat
non proident, sunt in culpa qui officia deserunt mollit anim id est
laborum consectetur adipiscing elit, sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat.</p>
<hr>
<h4>Leave a Comment:</h4>
<form role="form">
<div class="form-group">
<textarea class="form-control" rows="3" required></textarea>
</div>
<button type="submit" class="btn btn-success">Submit</button>
</form>
<br> <br>
</div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="member.MemberDTO"%>
<!DOCTYPE html>
<html>
<head>
<title>serverweb main</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<%MemberDTO loginUser = (MemberDTO)session.getAttribute("loginUser"); %>
<nav class="navbar navbar-inverse">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">자바나라</a>
</div>
<div class="collapse navbar-collapse" id="myNavbar">
<ul class="nav navbar-nav">
<li class="active"><a href="/serverweb/index.jsp">Home</a></li>
<!-- <li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">서블릿basic <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#">Page 1-1</a></li>
<li><a href="#">Page 1-2</a></li>
<li><a href="#">Page 1-3</a></li>
</ul>
</li> -->
<li><a href="#">서블릿 basic</a></li>
<li><a href="#">JSP basic</a></li>
<li><a href="#">부서관리</a></li>
<li><a href="/serverweb/member/mvc/list">인사관리</a></li>
<li><a href="#">고급기능</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<%if(loginUser==null){ %>
<%-- 로그인하지않아서 로그인유저가 널인상태 --%>
<li><a href="/serverweb/member_mvc/register.jsp"><span class="glyphicon glyphicon-user"></span> Sign Up</a></li>
<li><a href="/serverweb/member_mvc/login.jsp"><span class="glyphicon glyphicon-log-in"></span> Login</a></li>
<%}else{ %>
<%-- 로그인된 상태 --%>
<li><a href="/serverweb/member/mvc/logout"><span class="glyphicon glyphicon-log-out"></span> Logout</a></li>
<%} %>
</ul>
</div>
</div>
</nav>
</body>
</html>
@WebServlet(name = "logout", urlPatterns = { "/member/mvc/logout" })
public class LogoutServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//사용중인 세션을 받아오기
HttpSession ses = request.getSession(false);
if(ses!=null) {
//세션을 제거하기
ses.invalidate();
}
response.sendRedirect("/serverweb/index.jsp");
}
}
본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.