국비 47일차 Servlet scope
2021. 3. 16. 22:49
2021.03.16 국비교육 47일차
scope
- request는 독립시행이다. 시행할 때 마다 새로운게 요청되기 때문에 데이터도 다시 담아야함
request 영역 scope
사용자 --(request)--> set(request 데이터 저장) --(request) --> get(set에서 저장한걸 뽑아 사용함)
setAttribute와 getAttribute를 통해 이용하며
//저장 setAttribute("key", object)
request.setAttribute("req", "홍길동"); // request에 개발자 필요한 값을 저장 할 수 있음 setAtrribute("key", object)
//사용 getAttribute("key")
System.out.println("setServlet setting request : 홍길동");
String data = (String)request.getAttribute("req");
System.out.println(request.getAttribute("req")); //홍길동
System.out.println(data); // 홍길동
대충 이런 형태를 유지함
session 영역 scope
request의 경우 새로운 request가 발생하면 변수의 공유가 어렵기 때문에 session이라는 객체를 만들어서 변수를 관리한다. ex)로그인정보, 장바구니 같은 원리
세션은 30분정도 유지되며 이때 웹 브라우저간의 탭 간에는 세션정보가 공유된다.
브라우저를 껐다가 다시 키면 세션 사라짐
session.setAttribute("key", object); 데이터 삽입
session.getAttribute("key"); 데이터 출력
session.getAttributeName() - Enumeration 사용해서 출력
session.removeAttribute("key") // key에 해당하는 데이터 삭제
session.invalidate(); //session에 들어간 모든 객체 삭제 (remove all)
nullpointException 항상 주의할것
실습
- setscope
package com.controller;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/SetScopeServlet")
public class SetScopeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//저장 setAttribute("key", object)
request.setAttribute("req", "홍길동"); // request에 개발자 필요한 값을 저장 할 수 있음 setAtrribute("key", object)
//사용 getAttribute("key")
System.out.println("setServlet setting request : 홍길동");
// String data = (String)request.getAttribute("req");
// System.out.println(request.getAttribute("req")); //홍길동
// System.out.println(data); // 홍길동
//Session Scope에 저장 - 사용브라우저생기는 객체 : 30분 생성, 브라우저 마다 여는 페이지에서 같은 세션 사용
HttpSession session = request.getSession(); // 세션 객체 생성
session.setAttribute("sess", "이순신");
System.out.println("session scope : " +session.getAttribute("sess"));
//application scope에 저장 : 서버가 구동하는 동안 / context가 실행되는 동안 context의 모든 서블릿이 같은 Context사용
ServletContext ctx= getServletContext(); //1. servletcontext얻기
ctx.setAttribute("application", "유관순"); //2. servletcontext에 set attribute
System.out.println("application scope : " + ctx.getAttribute("application"));
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
- getscope
package com.controller;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/GetScopeServlet")
public class GetScopeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//request scope
String data = (String)request.getAttribute("req");
System.out.println(request.getAttribute("req")); //홍길동
System.out.println(data); // 홍길동
//session scope
HttpSession session = request.getSession(); // 세션 객체 생성
System.out.println(session.getAttribute("sess"));
//application scope
ServletContext ctx= getServletContext();
System.out.println("application scope : " + ctx.getAttribute("application"));
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
session scope에서 attribute 여러개 뽑아오는법
- Enumeration을 사용해서 객체의 key값 다 뽑아온다음에 hasmoreelement 사용
package com.controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.dto.ProductDTO;
@WebServlet("/ProductListServlet")
public class ProductListServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//세션 얻어오기
HttpSession session = request.getSession();
Enumeration<String> keys = session.getAttributeNames();
//출력 창
PrintWriter out = response.getWriter();
out.print("<html><head><title>상품입력결과</title></head><body>");
out.print("<b>상품입력 결과<b><br><hr>");
String my = "<table border ='1'>";
my += "<tr>";
my += "<td>상품아이디</td>";
my += "<td>상품명</td>";
my += "<td>상품개수</td>";
my += "</tr>";
while(keys.hasMoreElements()) {
String id = keys.nextElement();
ProductDTO dto = (ProductDTO) session.getAttribute(id);
my += "<tr>";
my += "<td>" + dto.getId() + "</td>";
my += "<td>" + dto.getName() + "</td>";
my += "<td>" + dto.getAmount() + "</td>";
my += "</tr>";
}
my += "</table>";
out.print(my);
out.print("<a href ='productForm.html'>상품입력하기</a> ");
out.print("</body><html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
'ETC > 국비교육' 카테고리의 다른 글
국비 49일차 JSP 스크립팅요소, 내장객체 (0) | 2021.03.18 |
---|---|
국비 48일차 Servlet(init, context 파라미터 , filter, redirect, forward) (0) | 2021.03.17 |
국비 46일차 Servlet DB 연동 절차 (0) | 2021.03.15 |
국비 45일차 서블릿 파라미터 처리(values, names, map) (0) | 2021.03.12 |
국비 44일차 Servlet (라이프사이클, thread unsafe, 응답처리, 요청처리, 파라미터 처리) (0) | 2021.03.12 |