Servlet4

Servlet 데이터 저장 방식

HttpServletRequest

HttpSession

세션 생성 후 세션에 데이터를 저장하는 것이다. page 이동 방식과 무관하게 고유 user만을 위한 저장소다.

ServletContext

모든 user가 공유하는 객체이다. page 이동 방식과 무관하게 사용할 수 있다.

차이점


HTML

<form action="A" method="post">
	아이디 : <input type="text" name="id"><br>
	비밀번호 :  <input type="password" name="pw"><br>
	이름 :  <input type="text" name="name"><br>
	<input type="submit" value="로그인">
</form>

A.java

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	request.setCharacterEncoding("utf-8");
		
	// 요청 객체는 고유한 user만의 자원 forward로 화면 이동시에만 유지
	String id = request.getParameter("id");
	String name = request.getParameter("name");
	System.out.println(1+ " - 요청 객체의 데이터 : " + id);
	System.out.println(1+ " - 요청 객체의 데이터 : " + name);
		
	request.setAttribute("newData", "art");
		
	//세션 생성 후 세션에 데이터 저장
	//page이동 방식과 무관하게 고유 user만을 위한 원
	HttpSession session = request.getSession();
	session.setAttribute("idS", id);
	session.setAttribute("nameS", name);
	session.setAttribute("newData", "artSession");
	
	//모든 유저가 공유하는 객체
	ServletContext context = getServletContext();
	context.setAttribute("idC", id);
	context.setAttribute("nameC", name);
	context.setAttribute("newData", "artContext");
		
	request.getRequestDispatcher("B").forward(request, response);
}

B.java

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		System.out.println("-------------request---------------------");
		System.out.println(request.getAttribute("id"));
		System.out.println(request.getAttribute("name"));
		System.out.println(request.getAttribute("newData"));
		System.out.println(request.getParameter("id"));
		System.out.println(request.getParameter("name"));
		System.out.println(request.getParameter("newData"));
		System.out.println();
		System.out.println("-------------session---------------------");
		HttpSession session = request.getSession();
		System.out.println(session.getAttribute("idS"));
		System.out.println(session.getAttribute("nameS"));
		System.out.println(session.getAttribute("newData"));
		System.out.println();
		System.out.println("-------------context---------------------");
		ServletContext context = getServletContext();
		System.out.println(context.getAttribute("idC"));
		System.out.println(context.getAttribute("nameC"));
		System.out.println(context.getAttribute("newData"));
		System.out.println();
		
		response.sendRedirect("C");
	}

출력 결과

1 - 요청 객체의 데이터 : test
1 - 요청 객체의 데이터 : 최태열
-------------request---------------------
null
null
art
test
최태열
null

-------------session---------------------
test
최태열
artSession

-------------context---------------------
test
최태열
artContext

forward 방식으로 넘어왔기 때문에 request에 있던 부분들이 유지 되었다.

하지만 방식에 맞게 없는 값은 null로 출력된다. 또한, session과 context는 페이지 연결 방식에 관계 없기 때문에 바로 출력된다.


C.java

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	System.out.println("-------------request---------------------");
	System.out.println(request.getAttribute("id"));
	System.out.println(request.getAttribute("name"));
	System.out.println(request.getAttribute("newData"));
	System.out.println(request.getParameter("id"));
	System.out.println(request.getParameter("name"));
	System.out.println(request.getParameter("newData"));
	System.out.println();
	System.out.println("-------------session---------------------");
	HttpSession session = request.getSession();
	System.out.println(session.getAttribute("idS"));
	System.out.println(session.getAttribute("nameS"));
	System.out.println(session.getAttribute("newData"));
	System.out.println();
	System.out.println("-------------context---------------------");
	ServletContext context = getServletContext();
	System.out.println(context.getAttribute("idC"));
	System.out.println(context.getAttribute("nameC"));
	System.out.println(context.getAttribute("newData"));
	System.out.println();
}

출력 결과

-------------request---------------------
null
null
null
null
null
null

-------------session---------------------
test
최태열
artSession

-------------context---------------------
test
최태열
artContext

redirect 방식으로 넘어왔기 때문에 request에 있던 부분들이 유지되지 않았다

또한, session과 context는 페이지 연결 방식에 관계 없기 때문에 바로 출력된다.