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

51. JSP 액션 태그의 사용 (2)

by Jint 2022. 6. 22.

2. <jsp:useBean>의 활용

- MemberList.jsp

회원 목록 화면을 만드는 MemberList.jsp에 <jsp:useBean> 액션 태그를 적용해본다.

MemberList.jsp 파일에서 request로부터 "members" 객체를 꺼내는 코드를 제거한다. 대신 다음과 같이 <jsp:useBean> 액션 태그를 삽입한다.

<jsp:useBean id="members"
			 scope="request"
			 class="java.util.ArrayList" 
			 type="java.util.ArrayList<spms.vo.Member>"/>
<%
//ArrayList<Member> members = (ArrayList<Member>)request.getAttribute("members");
for(Member member : members) {
%>

회원 목록 화면을 테스트하기 전에 로그인(/auth/login)을 먼저 수행한다. 로그인을 하지 않으면 회원 목록을 출력할 때 오류가 발생한다. Header.jsp에서 세션에 저장된 Member 객체를 찾기 때문이다. 회원 목록 화면(/member/list)을 테스트하면 정상적으로 실행된다(그림 1).

그림 1 (회원 목록 화면 (/member/list))

 

- Header.jsp

Header.jsp에도 세션으로부터 로그인 사용자 정보를 꺼내는 자바 코드가 있다. 이 부분에 <jsp:useBean> 액션 태그를 적용한다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="spms.vo.Member"%>
<jsp:useBean id="member"
			 scope="session"
			 class="spms.vo.Member"/>
<%
//세션 객체를 가져와 member 객체로 넣음
//Member member = (Member)session.getAttribute("member");
%>
<div style="background-color:#00008b; color:#ffffff; height:20px; padding:5px;">
	SPMS(Simple Project Management System)
	<% if(member.getEmail() != null) { %>
		<span style="float:right;">
			<%=member.getName()%>
			<a style="color:white;" href="<%=request.getContextPath()%>/auth/logout">로그아웃</a>
		</span>
	<% } %>
</div>

세션에서 Member 객체를 꺼내는 자바 코드를 제거하고 <jsp:useBean> 액션 태그를 한다.

<jsp:useBean id="member"
             scope="session"
             class="spms.vo.Member"/>

만약 로그인을 하지 않아 HttpSession 보관소에 "member"라는 이름으로 등록된 객체가 없다면, 새로 Member 객체를 생성하고, HttpSession 보관소에 저장한다. 로그인을 하지 않았을 경우 사용자 정보를 출력하지 않도록 조건문을 추가한다.

<% if(member.getEmail() != null) { %>
...
<% } %>

정상적으로 로그인했다면 Member 객체에 이메일 값이 들어 있을 것이다. 이것을 검사하는 코드다. 즉 이메일 값이 있을 때만 로그인 사용자의 이름과 '로그아웃' 링크를 출력하는 것이다. 이제부터 로그인하지 않고 회원 목록을 출력하더라도 오류가 발생하지 않을 것이다.

 

3. JSP 액션 태그의 존재 의의

<jsp:useBean> 액션을 사용하면 자바 객체를 생성하거나 request 객체에서 값을 꺼내는 작업을 쉽게 처리할 수 있다. 이렇게 JSP 액션 태그를 사용하면 자바 언어를 모르는 웹 디자이너나 웹 퍼블리셔들도 손쉽게 웹 페이지를 만들 수 있다. 즉 비즈니스 로직을 처리하는 부분과 화면을 처리하는 부분을 나눠서 개발할 수 있다. 이럴 목적으로 만든 기술이 JSP 이다(그림 2).

그림 2 (JSP 액션 태그와 업무의 분리)

JSP 액션 태그를 잘 활용한다면 앞의 그림과 같이 컨트롤러와 모델 쪽 코딩은 자바 개발자가 담당하고, 컨트롤러에서 준비한 데이터를 가지고 화면을 만드는 작업은 웹 디자이너와 웹 퍼블리셔가 담당할 수 있다. 그러나 현실은 이것과 거리가 멀다. 실무에서 JSP 페이지를 살펴보면 자바 코드들이 덕지덕지 붙어 있어 웹 디자이너나 웹 퍼블리셔가 손댈 수 있는 상황이 아니다.

 

<jsp:useBean>이라는 액션 태그 외에도 JSP가 기본적으로 제공하는 태그가 여럿 있다. 실무에서는 웹 브라우저가 출력할 화면을 만들 때 JSP 액션 태그보다는 오히려 HTML, CSS, JavaScript 기술이 더 요구된다. JSP 전용 태그를 많이 쓰면 쓸수록 JSP 기술에 더 종속된다. 특정 기술에 종속되는 것은 시스템 유지보수를 어렵게 하고 다른 플랫폼으로 이전하는 것을 힘들게 만든다. 가능한 서버 측 기술에 독립적인 HTML, CSS, JavaScript와 같은 표준 웹 기술을 배우는데 더 많은 노력을 기울여야 한다.

 

회원 목록을 출력하는 MemberListServlet 클래스처럼 회원 등록, 변경, 삭제 서블릿도 JSP를 도입하여 뷰 컴포넌트를 분리했다.

1) 회원 등록 - MemberAddServlet 클래스에서 입력 화면을 생성하는 코드를 제거하고, MemberForm.jsp를 만들어 화면 출력을 위임했다. 또한, MemberAddServlet 클래스에서 회원 정보를 등록하다가 오류가 발생했을 때 /Error.jsp로 위임했다.

2) 회원 삭제 - MemberDeleteServlet 클래스에서 삭제를 수행하다가 오류가 발생하면 /Error.jsp로 위임했다.

3) 회원 상세 정보 조회 및 변경 - MemberUpdateServlet 클래스에서 상세 정보 출력을 MemberUpdateForm.jsp에게 포워딩했다. 예외 처리는 /Error.jsp에게 위임했다.

 

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

 

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

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

freelec.co.kr

'교재 실습 > 자바 웹 개발 워크북' 카테고리의 다른 글

53. EL 사용하기 (2)  (0) 2022.06.25
52. EL 사용하기 (1)  (0) 2022.06.23
50. JSP 액션 태그의 사용 (1)  (0) 2022.06.21
49. 데이터 보관소 (5)  (0) 2022.06.20
48. 데이터 보관소 (4)  (0) 2022.06.19

댓글