본문 바로가기

웹 개발 한걸음

[Servlet] EL과 데이터 저장소

 

** 기존의 프로젝트를 자바 코드와 html 영역을 완전히 나누기 위해 servlet을 쓰려고 한다.

오랜만에 servlet을 써보려니 조금 헷갈려서 테스트 서블릿을 직접 만들어 정리를 한번 해보았다.

 


*** EL (Expression Language)이란?

 

  • JSP 페이지에서 저장소(request, session, application) 영역에 담긴 내용을 편하게 "출력"할 때 사용한다.
  • JSP에서 내용을 가져올 때 아래와 같이 사용한다.
${ 저장한 키값 }

 

  • 저장한 키값으로만으로도 저장소 상관없이 가져올 수 있으나 혹시나 저장소별 키값이 같은 경우 아래와 같이 scope로 범위를 정확히 지정할 수 있다.
${requestScope.키 값}
${sessionScope.키 값}
${applicationScope.키 값}

 


 

*** 데이터 저장소

  • 여기서는 서블릿과 서블릿 사이, 서블릿과 JSP 사이에 요청이나 값 등을 주고 받을 때 저장하고 꺼내오는 저장소를 말한다.
  • 서블릿의 데이터 저장소는 총 pageContext, request, session, application 4개로 나눌 수 있다.

** request

  • 클라이언트로부터의 요청을 서블릿으로 전달하는 역할.
  • forward 시 값을 유지하고자 할 때 사용.
  • request를 받는 리소스에서만 공유 가능.
  • JSP -> request 내장 객체 사용.
  • Servlet -> HttpServletRequest 객체 사용
  • 생명 주기 : 클라이언트 요청이 response되기 전까지 살아있음.

** session 

  • 클라이언트 데이터를 유지하는 역할.
  • 로그인 여부처럼 사용자별로 유지 되어야할 정보가 있을 때 사용.
  • 모든 서블릿 사이에서 데이터 공유가 가능.
  • JSP -> session 내장 객체 사용.
  • Servlet -> HttpServletRequest에서 getSession 메서드로 꺼내서 사용
  • 생명 주기 : 브라우저가 종료되기 전까지 살아있음.

** Application (Servlet Context)

  • 서블릿 컨테이너와 서블릿 사이를 연결하는 역할.
  • 모든 클라이언트가 공통으로 사용해야하할 값들이 있을 때 사용
  • 모든 서블릿 사이에서 데이터 공유가 가능.
  • JSP -> application 내장 객체 사용.
  • Servlet -> getServletContext() 메서드로 꺼내서 사용.
  • 생명 주기 : 서버가 종료되기 전까지 살아있음.

 


 

 

 

*** 테스트 코드

@WebServlet("/test")
public class test extends HttpServlet{

	
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
		String test1 = "Hello! request";
		String test2 = "Hello! session";
		String test3 = "Hello! application";
		
		
		request.setAttribute("requestTest", test1);
		
		HttpSession session = request.getSession();
		session.setAttribute("sessionTest", test2);
		
		ServletContext application = this.getServletContext();
		application.setAttribute("applicationTest", test3);
		
		request.getRequestDispatcher("/WEB-INF/test.jsp").forward(request, response);
		
	}
}

 

테스트 서블릿의 코드

 

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>	
		<p>request 값 : ${requestTest}</p>
		<p>session: ${sessionTest}</p>
		<p>application : ${applicationTest}</p>		
		<br>
		<p>스코프 적용 request 값 : ${requestScope.requestTest}</p>
		<p>스코프 적용 session: ${sessionScope.sessionTest}</p>
		<p>스코프 적용 application : ${applicationScope.applicationTest}</p>
		<br>

</body>
</html>

테스트 JSP 코드

 

결과 화면

 

 


 

 

 

 

 

 

♣ 참고 및 인용