ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HttpSession
    JAVA/웹 프로그래밍 - 서블릿 2020. 11. 2. 19:40

     

    HttpSession에 대하여 알아보자.

    우선은 ServletContext에 대해 알아보고 오자.

    designatedroom87.tistory.com/272?category=899787

     

    ServletContext

    ServletContext의 필요 이유는 값을 기억할 필요가 있을 때 필요하다. 계산기 처럼 어떤 값을 연산한 결과를 기억해야할 경우에 그렇다. 그리고 태그에서 name이 중요하다. 그리고 디버깅을 해

    designatedroom87.tistory.com

    ServletContext는 전역 변수와 같음을 위에서 보았다.

    이와 같은 방법말고 다른 방법이 있다. 이것이 HttpSession을 이용하면 된다.

    세션은 사용자가 접속해오면 공용으로 사용하는 것이 아니라 별도의 저장소가 만들어진다.  

    즉, 공간 분리가 된다. 로그인 시에 아이디를 저장할 때 쓴다. 
    ServletContext와 HttpSession는 서버에서 저장이 된다는 것이 공통점이다.

     

    위에서 만든 Add4.java에서 기존의 ServletContext대신에 HttpSession를 활용해보자.

    나머지 내용은 기존의 Add4.java와 같다. 

    Add4.java 전체 내용

    더보기
    package com.iot.web;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    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("/Add4")
    public class Add4 extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	protected void service(HttpServletRequest request, 
    			HttpServletResponse response) throws ServletException, IOException 
    	{
    		//	서블릿이 끝나고 나서도 값을 유지할 수 있는 저장공간 만들기
    		//	ServletContext application = request.getServletContext();
    		
    		HttpSession session = request.getSession();
    		
    		response.setCharacterEncoding("UTF-8");
    		response.setContentType("text/html;charset=UTF-8");
    		PrintWriter out = response.getWriter();
    		
    		String value_ = request.getParameter("value");
    		String operator = request.getParameter("operator");
    		
    		int value = 0;
    		
    		if (!value_.equals(""))		value = Integer.parseInt(value_);
    		
    		//	아래의 두 if문은 첫 데이터를 저장 시에 대한 예외처리로 한 묶음으로 가지고 간다.
    		{
    			//	저장소가 비어있으면 0으로 초기화
    			if (session.getAttribute("result") == null)
    			{
    				session.setAttribute("result", 0);
    			}
    			
    			//	기본 연산자는 "+"로 초기화
    			if (session.getAttribute("operator") == null)
    			{
    				session.setAttribute("operator", "+");
    			}
    		}
    			
    		//	연산 후 출력
    		if (operator.equals("="))
    		{
    			//	이전에 저장되어 있는 연산자를 가지고 와서 계산을 해야 한다.
    			int result = 0;
    			
    			if (session.getAttribute("operator").equals("+"))
    			{
    				result = (Integer)session.getAttribute("result") + value; 
    			}
    			else if (session.getAttribute("operator").equals("-"))
    			{
    				result = (Integer)session.getAttribute("result") - value; 
    			}
    			
    			out.println("결과 : " +result);
    			session.removeAttribute("result");		//	누적된 값들을 초기화
    			session.removeAttribute("operator");	//	누적된 값들을 초기화
    		}
    		//	이전에 저장되어 있는 연산자를가지고 와서 연산만 한다.
    		else
    		{
    			//	결과를 임시 저장해야 한다.
    			if (session.getAttribute("operator").equals("+"))
    			{
    				session.setAttribute("result", 
    					(Integer)session.getAttribute("result") + value);
    			}
    			else if (session.getAttribute("operator").equals("-"))
    			{
    				session.setAttribute("result", 
    						(Integer)session.getAttribute("result") - value);
    			}
    			
    			//	실시간으로 저장소에 저장된 값을 학인
    			System.out.println(session.getAttribute("result"));
    			
    			session.setAttribute("operator",operator);
    		}
    	}
    }

     

     

    add4.html 전체 내용

    더보기
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<form action="Add4" method="post">
    		<input type="text" name="value">
    		
    	<input type="submit" name="operator" value="+">
    	<input type="submit" name="operator" value="-">
    	<input type="submit" name="operator" value="=">
    	<br>
    		결과 : 0	
    	</form>	
    </body>
    </html>

     

     

    서버를  실행하고, Chrome 창과 Edge창을 띄워보자.

    두 웹 브라우저의 주소를 localhost:9090/add4.html로 접속을 하자.

    Chorome 창에서 입력 칸에 5를 입력하고  "+" 버튼을 선택하고

    Edge 창에서 입력 칸에 3을 입력하고 "-" 버튼을 선택하고 

    다시 Chrome 창에서 입력 칸에 10을 입력하고 "=" 버튼 선택해보자.

    그러면 위의 결과와 마찬가지로 -2가 나오는지를 확인하면 된다.

    -2가 나오지 않는다. 즉, 별도의 저장소가 만들어진다. 

     

    위에서 ServletContext와 HttpSession는 서버에서 저장이 된다고 하였다.

    반대로 쿠키는 클라이언트(웹 브라우저)가 저장하는데 생성은 서버가 한다.
    쿠키의 생성은 서버에서 해서 클라이언트에게 던진다.
    클라이언트가 쿠키를 받을지 말지를 결정한다. 
    쿠키는 배열로 생성해서 배열로 받는다. 

     

    아래에서 Cookie에 대한 내용을 알아보자.

    designatedroom87.tistory.com/277?category=899787

     

    Cookie

    ServletContext와 HttpSession과 달리 아래에서 ServletContext와 HttpSession에 대한 내용을 참고해보자. designatedroom87.tistory.com/276?category=899787 HttpSession HttpSession에 대하여 알아보자. 우선은..

    designatedroom87.tistory.com

     

    'JAVA > 웹 프로그래밍 - 서블릿' 카테고리의 다른 글

    RequestDispatcher  (0) 2020.11.03
    Cookie  (0) 2020.11.02
    ServletContext  (0) 2020.11.01
    웹 브라우저에서 수의 덧셈을하고 출력하기  (0) 2020.11.01
    Filter  (0) 2020.10.30

    댓글

Designed by Tistory.