본문 바로가기
교재 실습/자바 웹 개발 워크북

42. 서블릿에서 뷰 분리하기 (3)

by Jint 2022. 6. 12.

5. 뷰 컴포넌트 만들기

MemberListServlet 클래스로부터 받은 회원 목록 데이터를 가지고 화면을 생성하는 JSP를 web05 프로젝트에서 webapp폴더 아래에 member 폴더를 만들고 MemberList.jsp를 생성한다.

<%@page import="spms.vo.Member"%>
<%@page import="java.util.ArrayList"%>
<%@page 
	language="java" 
	contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
	"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>회원 목록</title>
</head>
<body>
<h1>회원목록</h1>
<p><a href='add'>신규 회원</a></p>
<%
ArrayList<Member> members = (ArrayList<Member>)request.getAttribute("members");
for(Member member : members) {
%>
<%=member.getNo()%>,
<a href='update?no=<%=member.getNo()%>'><%=member.getName()%></a>,
<%=member.getEmail()%>,
<%=member.getCreatedDate()%>
<a href='delete?no=<%=member.getNo()%>'>[삭제]</a><br>
<%} %>
</body>
</html>

 

page 지시자의 import 속성은 JSP 엔진이 서블릿 소스 MemberList_jsp.java를 생성할 때 다음과 같이 import 코드를 만든다.

C:\javaide\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\web05\org\apache\jsp\member/MemberList_jsp.java

import spms.vo.Member;
import java.util.ArrayList;

 

JSP 페이지에 자바 코드를 넣고자 스크립트릿 태그를 사용하여 MemberListServlet 클래스가 넘겨준 회원 목록 데이터를 꺼내고자 getAttribute()를 호출하였다.

<%
ArrayList<Member> members = (ArrayList<Member>)request.getAttribute("members");
for(Member member : members) {
%>
<%} %>

request는 JSP 내장 객체라 불리며, _jspService() 메서드의 매개변수로 선언된 HttpServletRequest 객체다. 따라서 request는 변수 선언 없이 바로 사용할 수 있다.

 

request로부터 회원 목록을 꺼내고 나서 반복문을 사용하여 회원 정보를 출력한다. 출력 형식은 다음과 같다.

번호,

<a href='update?no=번호'>이름</a>,

이메일,

등록일,

<a href='delete?no=번호'>[삭제]</a><br>

위 형식으로 출력하기 위해 작성한 코드다.

<%=member.getNo()%>,
<a href='update?no=<%=member.getNo()%>'><%=member.getName()%></a>,
<%=member.getEmail()%>,
<%=member.getCreatedDate()%>
<a href='delete?no=<%=member.getNo()%>'>[삭제]</a><br>

번호와 이름, 이메일, 등록일을 출력하기 위해 JSP 표현식 <%=  %>을 사용했다.

 

6. 회원 목록 테스트

MemberListServlet 클래스로부터 출력 부분을 분리하여 MemberList.jsp로 이관하였다. 정상적으로 동작하는지 테스트한다. 톰캣 서버를 시작하고 http://localhost:9999/web05/member/list를 웹 브라우저로 테스트한다(그림 1).

그림 1 (뷰를 분리한 후 회원 목록 실행 화면)

이전과 같이 정상적으로 실행 된다. MemberList.jsp에서 만든 화면의 소스를 살펴본다. 웹 브라우저(크롬 기준)에서 우클릭하여 컨텍스트 메뉴를 띄워 '페이지 소스 보기'를 클릭하거나 Ctrl + U를 누른다(그림 2).

그림 2 (MemberList.jsp가 만든 화면의 일부 소스)

MemberList.jsp에서 출력한 형식 그대로 HTML이 생성되었음을 확인할 수 있다.

 

이렇게 서블릿에서 출력 작업을 분리하여 JSP에 위임하는 구조로 만들면 출력문을 작성하기도 쉽고, 소스 코드를 유지 보수하기도 편리하다. 이처럼 하나의 객체에게 많은 역할을 맡기기 보다 그 역할을 쪼개어 여러 객체에게 위임하는 것이 객체지향 프로그래밍을 잘 짜는 방법이다.

 

참고도서 : https://freelec.co.kr/book/1674/

 

[열혈강의] 자바 웹 개발 워크북

[열혈강의] 자바 웹 개발 워크북

freelec.co.kr

댓글