국비 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 {
    }

}

+ Recent posts