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).
- 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).
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 |
댓글