-
Session객체 (feat.Application과의 차이점)Servlet-JSP 2022. 1. 13. 18:12
**유튜브 뉴렉쳐님의 강의를 들으면서 공부하고 정리한 내용입니다.
Application객체로 만든 예제를 Session 객체를 사용해서 만들어보자
@WebServlet("/calc2") public class calc2 extends HttpServlet{ @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext application = request.getServletContext(); HttpSession session = request.getSession();//session을 변수화 하는 방법.import response.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF8"); //사용자에게 전달하는 값은 하나만 사용한다. 그리고 오퍼레이터값을 같이 전달한다. String v_ = request.getParameter("v"); String op = request.getParameter("operator"); int v = 0; //기본값 설정. 값을 입력하지 않았을 경우 0으로 대처 //조건검사를 해준다. //만약에(if) x가 가진것이 빈 문자열이 아니다. 그럴 경우에는 x값을 대체해준다(x = ). 형변환 해서 x값을 대입해준다. if(!v_.equals("")) v = Integer.parseInt(v_); //덧뺄셈 버튼을 누를수도 결과값을 보여주는 = 버튼을 누르게 될 수도 있다. //op가 무엇이냐에 따라서 저장을 해야할수도 계산을 해야 할 수도 있다. //우선 =로 해 본다.그 이유는 +,-는 하는 일이 값하고 op후 저장인데 =의 역할은 저장이다. //계산 if(op.equals("=")) { //=이 오면 계산하는걸로한다. //int x = (Integer)application.getAttribute("value"); //앞에 입력한 값을 꺼내서 x라고 하고 빨간줄은 형변환해준다 int x = (Integer)session.getAttribute("value"); int y =v; //지금 사용자가 저장한 value 값이라 v로 //String operator = (String)application.getAttribute("op"); //이걸 어플리케이션 저장소에서 읽어와야하니깐 섭ㄹ릿콘텍스트를 맨 위로 빼준다. String operator = (String)session.getAttribute("op"); int result = 0; //여기에 더하기 값을 담아 줄 것이고. //앞에 저장한 값을 꺼내서 +할지 -할지는 =말고 op값을 꺼내서 확인해야하는 것 if(operator.equals("+")) result = x+y; else result = x-y; //result를 출력하기 위해서 response해서 getWriter를 얻어서 포멧팅 후 출력 response.getWriter().printf(" 값 : %d\n", result ); } else { //+,-은 저장하는 걸로 하고 //이 값을 저장 해야함. request.getServletContext()는 어플리케이션의 저장소이기때문에 //ServletContext라는 변수를 하나 만들어서 application이름을 저장하고 거기에 담아준다. //어떻게 저장하느나. 컬랙션이라고 생각해주고 아래와 같이 작성해준다.이 내용을 두고두고 꺼내서 쓸 수 있게 된다. //application.setAttribute("value", v); //application.setAttribute("op", op); session.setAttribute("value", v); session.setAttribute("op", op); } } }어플리케이션 선언 밑에 session 객체를 HttpSession session = request.getSession(); 선언 해 주고
application이 들어갔던 자리를 session으로 바궈주면 된다.
사용법과 동작되는것은 동일하고
Application객체와 Session객체의 차이점
차이점은 이름에서도 알 수 있듯이 Application 객체는 Application 전역에서 사용이 가능한것이고 Session은 Session 범주에서만 사용 가능하다.
Session은 현재 접속한 사용자를 뜻하는 것이다. 그래서 현재 접속한 사용자마다 그 공간이 달라질 수 있다는 의미이다.
위에 만든 calc2라는 html 파일을 크롬에서 계산을 먼저 해보고 다음에 웨일에서 calc2파일을 연 후에 연산값을 하나만 누르고 = 버튼을 누르게 되면 null포인터가 뜨면서 에러가 발생한다.
그 이유는 다른 브라우저를 사용하게 되면 다른 session으로 인식하고 크롬에서 먼저 입력했던 연산자값이 사라지게 되어서 null이 뜨게 되는 것이다.
하지만 크롬을 두개 열어서 연산값을 하나씩 입력 후 두번쨰 페이지에서 = 버튼을 누르면 null이 뜨지 않고 연산값이 출력된다.

작업관리자를 켜서 확인 해 보면 크롬을 여러창을 켜도 같은 스레드 안에 속하는 것을 확인 할 수 있다. 이 스레드들은 서로 공유하기 떄문에 같은 session으로 인식이 되는 것이다.
'Servlet-JSP' 카테고리의 다른 글
Cookie의 maxAge 옵션 (0) 2022.01.14 Cookie 객체 (0) 2022.01.14 Application객체와 서블릿Context (0) 2022.01.13 상태 유지의 필요성 application, session, cookie (0) 2022.01.13 배열로 입력받기 (0) 2022.01.13