본문 바로가기
Java/Servlet & JSP

JSP) JSP에 데이터 전달 (setAttribute, getAttribute)

by 박채니 2022. 6. 20.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


사용자의 입력 값을 받아 해당 입력 값에 따라 추천 서비스를 제공해주었습니다.

 

 

setAttribute(String, Object) 

- key, value 

public class TestPersonServlet3 extends HttpServlet{
	/**
	 * POST 요청 처리 시 doPost 오버라이드
	 */
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 1. 인코딩 처리 (POST 요청 시 필수)
		request.setCharacterEncoding("utf-8");
		
		// 2. 사용자 입력 값 처리
		String name = request.getParameter("name");
		String color = request.getParameter("color");
		String animal = request.getParameter("animal");
		String[] foods = request.getParameterValues("food");
		
		System.out.println("name = " + name);
		System.out.println("color = " + color);
		System.out.println("animal = " + animal);
		System.out.println("foods = " + (foods!=null?Arrays.toString(foods):null));
		
		// 3. 업무로직
		// 추천서비스
		String recommendation = "";
		switch(color) {
		case "빨강" : recommendation="빨간 초장을 버무린 회덮밥"; break;
		case "노랑" : recommendation="산뜻한 노란 우산"; break;
		case "초록" : recommendation="초록색 배춧잎"; break;
		case "파랑" : recommendation="파랑색 시원한 죠스바"; break;
		}
		
		// 4. 응답메세지 작성 -> JSP에게 위임
		// jsp에 데이터 전달 : request 속성 등록
		request.setAttribute("recommendation", recommendation);
		
		RequestDispatcher reqDispatcher = request.getRequestDispatcher("/testPersonResult.jsp");
		reqDispatcher.forward(request, response);
	}
}

사용자가 입력한 color에 따라 추천 서비스를 제공해주었고, jsp에 직접 전달을 해줄 수 없기 때문에 우회하여 request의 속성에 해당 값을 등록하였습니다.

 

getAttribute(String)

- key

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.Arrays"%>
<%
	// jsp scriptlet - java 영역
	// request, response 객체는 선언없이 접근 가능!(forward에서 매개인자로 넘겨줌)
	String name = request.getParameter("name");
	String color = request.getParameter("color");
	String animal = request.getParameter("animal");
	String[] foods = request.getParameterValues("food");
	
	System.out.println("name@jsp = " + name);
	System.out.println("color@jsp = " + color);
	System.out.println("animal@jsp = " + animal);
	System.out.println("foods@jsp = " + (foods!=null?Arrays.toString(foods):null));
	
%>

<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>개인취향검사결과</title>
</head>
<body>
<h1>개인취향검사결과 <%=request.getMethod() %></h1>
<p>이름 : <%= name %></p>
<p>선호색상 : <%= color %></p>
<p>선호동물 : <%= animal %></p>
<p>선호중국음식 : <%= foods!=null?Arrays.toString(foods):"없음" %></p>
<h2><span><%= name %></span>님, 오늘은 <mark><%= request.getAttribute("recommendation") %></mark> 어떠세요?</h2>
</body>
</html>

jsp에서는 request에 등록 되어있는 속성을 가져오는 getAttribute()를 이용하여 등록된 값을 가져올 수 있습니다.

만약 변수에 담아서 사용한다면, getAttribute()는 반드시 Object를 리턴하기 때문에 다운캐스팅이 필요합니다.

 

위와 같은 구조를 갖고 있습니다.

tomcat이 미리 request, response객체를 생성하고 servlet을 생성하여 doPost를 호출할 때 request와 response를 받습니다.

중요한 기능인 recommendation을 생성하였지만, forward 시 직접 jsp에게 전달할 수 없기 때문에 우회하여 tomcat이 만들어놓은 request 객체의 속성으로 recommendation을 key, value값으로 저장을 하고,

jsp에서 request 객체에 접근하여 등록해놓은 recommendation을 가져와 사용한 후 HTML로 변환하여 client에게 제공해주었습니다.