초기에는 HTML 태그를 중심으로 자바를 이용해 화면을 구현했으나 화면에 대한 요구 사항이 복잡해ㅣ면서 자바 코드를 대체하는 액션 태그가 등장했습니다. 이어서 JSP2.0에서는 페이지 안에서 복잡한 자바 코드를 제거하는 쪽으로 발전했습니다. 디자이너 입장에서는 JSP페이지 안에 복잡한 자바 코드가 있으면 화면 작업을 하기가 어려웠기 때문입니다. 그리고 현재 JSP페이지는 스크립트 요소보다는 표현언어(EL, Expression Language)와 JSTL(JSP Standard Tag Library, JSP 표준 태그 라이브러리)을 사용해서 구현합니다.
JSP 페이지에서 표현식을 이용한 값 출력
표현언어의 특징?
기존 표현식보다 편리하게 값을 출력합니다.
변수와 여러 가지 연산자를 포함할 수 있습니다.
JSP의 내장 객체에 저장된 속성 및 자바의 빈 속성도 표현 언어에서 출력할 수 있습니다.
우선 <jsp:setProperty> 액션 태그와 <jsp:getProperty>액션 태그를 사용하는 방법을 표로 알아보겠습니다.
이름
정의
형식
setProperty
useBean의 속성에 값을 설정한느 태그
<jsp:setProperty name="자바 빈 이름" property="속성 이름" value="값" />
-name:<jsp:useBean> 액션 태그의 id속성에 지정한 이름
-value:속성에 설정할 속성 값
getProperty
useBean의 속성 값을 얻는 태그
<jsp:getProperty name="자바 빈 이름" property="속성 이름" />
- name:<jsp:useBean>액션 태그의 id속성에 지정한 이름
- property: 값을 얻을 속성 이름
이번에는 자바의 setter를 사용하지 않고 빈 속성을 설정해 보겠습니다.
member3~7.jsp 를 만들어 보겠습니다.
member3.jsp에서 <jsp:useBean> 액션 태그로 생성된 빈에 대해 <jsp:setProperty> 액션 태그를 이용해 비의 속성을 설정합니다. 이번에는 회원 가입창에서 전송한 회원정보를 자바 코드, 즉 setter를 사용해 일일이 설정하지 않았다는 것이 큰 차이입니다.
member3.jspmember3.jsp
실행 결과는 자바 빈을 사용했을때와 같습니다.
member4.jsp는 <jsp:setProperty> 액션 태그의 param속성을 이용해 회원 가입창에서 전달된 매개변수 이름으로 해당 useBean의 속성에 자동으로 값을 설정합니다.
member4.jsp
member5.jsp를 다음과 같이 작성합니다. <jsp:setProperty> 액션 테그에 param 속성을 생략하고 property 속성 이름만 지정하면 회원 가입창에서 전달받은 매개 변수 중 같은 매개변수 값을 자동으로 설정해 줍니다.
member5.jsp
head 아래 내용은 member4.jsp와 같기 때문에 직접 손코딩 하시는 분들은 member4를 참조하시면 좋습니다.
member6.jsp를 다음과 같이 작성합니다. <jsp:setProperty> 액션 태그의 property 속성에 *를 지정하면 JSP페이지에서 자동으로 매개변수 이름과 속성 이름을 비교한 후 같은 이름의 속성 이름에 전달된 값을 알아서 설정해 줍니다. 따라서 JSP나 HTML 페이지에서 전달된 데이터를 처리할 때 미리 매개변수 이름과 속성 이름을 동일하게 설정하여 편리하게 사용할 수 있습니다.
member6.jsp
member6.jsp의 화면 아래는 지금껏 코딩했던 것과 동일하여 생략하였습니다.
마지막으로 member7.jsp를 작성하겠습니다.
회원 가입창에서 전달받은 회원 정보를 일단 <jsp:setProperty> 액션 태그를 이용해 useBean 속성에 저장한 후 <jsp:getProperty> 액션 태그를 이용해 useBean의 속성에 접근하여 값을 출력합니다.
자바 빈은 웹 프로그램, 즉 java EE 프로그래밍 시 여러 객체를 거치면서 만들어지는 데이터를 저장하거나 전달하는 데 사용한다. 자바의 DTO클래스, VO클래스와 같은 개념이라 할 수 있다.
자바 빈의 특징은
속성의 접근 제한자는 private
각 속성(attribute, property)은 각각의 setter/getter를 가진다.
setter/getter 이름의 첫 글자는 반드시 소문자
인자 없는 생성자를 반드시 가지며 다른 생성자도 추가할 수 있다.
그럼 자바 빈을 이용해 회원 테이블의 회원 정보를 조회한 후 출력해 보겠습니다.
sec01.ex01 패키지 생성 후 MemberBean, MemberDAO 클래스를 추가 합니다. 그리고 member.jsp 파일과 memberForm.html을 생성하겠습니다.
# 오라클 회원테이블을 만들어주세요^^
회원 테이블을 참고해 MemberBean 클래스를 작성합니다. MemberBean 클래스의 속성은 회원 테이블의 각 컬럼 이름을 그대로 사용하며 자료형도 컬럼 이름의 자료형과 동일하게 선언합니다.
회원 가입창에서 회원 정보를 입력한 후 member.jsp로 전송하도록 memberForm.html을 작성하겠습니다.
전송된 회원 정보를 getParameter() 메서드를 이용해 가져온 후 MemberBean 객체를 생성하여 각 회원 정보를 속성에 설정합니다. 그런 다음 MemberDAO의 addMember() 메서드를 호출해 인자로 전달합니다. 새 회원을 추가한 후에는 다시 MemberDAO의 listMembers() 메서드를 호출해 모든 회원 정보를 조회하고 목록으로 출력합니다.
addMember() 메서드 호출 시 MemberBean 객체로 전달된 회원 정보를 getter를 이용해 가져온 후 insert문을 이용해 추가합니다.
1. 자식 JSP에 해당하는 park_image.jsp를 다음과 같이 작성합니다. 부모 JSP에서 포함 요청시 전달되는 이름과 이미지 파일을 getParameter() 메서드를 이용해 가져온 후 이름과 해당 이미지를 출력합니다.
park_image.jsp
부모 JSP인 include1.jsp를 다음과 같이 작성합니다. <jsp:include> 태그의 page 속성에 포함할 자식 JSP인 duke_image.jsp를 지정합니다. 그리고 <jsp:param> 태그<param 액션 태그>를 이용해 이름과 이미지 파일 이름을 동적으로 자식 JSP인 park_image.jsp로 포워딩합니다.
include1.jsp
이번에는 다른 부모 JSP인 include2.jsp를 다음과 같이 작성합니다. 자식 JSP로 다른 이름과 이미지 파일 이름을 전달합니다.
include2.jsp
브라우저에서 JSP파일을 요청하면 각각 다른 이미지와 이름이 출력하게 됩니다.
include1.jsp
이처럼 인클루드 액션 태그는 포함되는 자식 JSP에 데이터를 동적으로 전달해서 원하는 결과를 출력할 수 있습니다.