contents
PART 02 JSP 기본문법
chapter 03 디렉티브 태그: 한글 출력 및 페이지 모듈화하기
04.taglib 디렉티브 태그
05.북마켓 한글 출력 및 페이지 모듈화하기
chapter 04 액션 태그: 도서 목록 표시하기
01.액션 태그의 개요
02.forward 액션 태그
03.include 액션 태그
04.param 액션 태그
05.자바빈즈 액션 태그
06.북마켓 도서 목록 표시하기
---------------------------------------------
PART 02 JSP 기본문법
chapter 03 디렉티브 태그: 한글 출력 및 페이지 모듈화하기
04.taglib 디렉티브 태그
-taglib 디렉티브 태그는 현재 JSP 페이지에 표현 언어, JSTL, 사용자 정의 태그(custom tag) 등 태그 라이브러리를 설정하는 태그이며 형식은 다음과 같음
<%@ taglib uri="경로" prefix="태그 식별자" %> |
-여기서 uri 속성은 사용자가 정의한 태그의 설정 정보를 가진 경로 주소이고, prefix 속성은 uri에 설정한 사용자가 정의한 태그를 식별하기 위한 고유 이름임. 해당 JSP 페이지 내에서 uri 속성 값을 그대도 사용하면 복잡하므로 prefix 속성 값이 대신 식별할 수 있게 해주는 것임
-taglib 디렉티브 태그가 서블릿 프로그램으로 번역될 때 uri 속성 값은 JSP 컨테이너에 사용자가 정의한 태그 라이브러리의 위치를 알려줌. prefix 속성 값은 사용자가 정의한 태그 라이브러리의 접두어 태그가 무엇인지 JSP 컨테이너에 알려주는 역할을 함
-다음은 taglib 디렉티브 태그에 태그 라이브러리로 JSTL을 설정하는 예임. 여기서 uri 속성 값은 JSTL의 Core 태그 라이브러리의 위치를 나타내고, prefix 속성 값은 JSTL의 Core 태그를 식별하기 위한 접두어로 c를 사용함
◎JSTL 태그
-일반적으로 웹 애플리케이션에서 쉽게 쉽게 접할 수 있는 것은 JSTL 태그 라이브러리임. 유용한 JSP 태그의 모음인 JSTL은 자주 사용되는 핵심 기능을 제공함. 반복문, 조건문과 같은 논리적 구조 작업, XML 문서 조작, 국제화 태그 조작, SQL 조작 수행을 위한 태그 등을 지원함
-JSTL을 사용하려면 src/main/webapp/WEB-INF/lib/ 디렉터리의 위치에 jstl.jar 라이브러리 파일이 있어야 함. 이파일은 Apache Standard Taglib 페이지에서 다운로드할 수 있음
cf)다운로드한 파일 먼저 디렉터리 위치에 넣은 뒤 작업하기 -> 안그러면 오류 뜸
예제3-11.taglib 태그에 JSTL의 Core 태그를 설정하여 1부터 10까지 출력하기
JSPBook/src/main/webapp/ch03/taglib.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Directives Tag</title> </head> <body> <c:forEach var="k" begin="1" end="10" step="1"> <c:out value="${k}" /> </c:forEach> </body> </html> |
*<c:out/> 싱글태그 = <%= 변수 %>
실행 결과
![]() |
05.북마켓 한글 출력 및 페이지 모듈화하기
-JSP 디렉티브 태그를 적용하여 북마켓 시작 페이지에 한글을 출력함. 그리고 머리글인 메뉴바, 본문, 바닥글 등으로 웹 페이지를 모듈화함
예제3-12.한글 및 현재 접속 시각 출력하기: 본문
JSPBook/src/main/webapp/ch03/welcome.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <%@ page import="java.util.Date" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Welcome</title> <script src="https://kit.fontawesome.com/fa848000d2.js" crossorigin="anonymous"></script> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <%! String greeting = "도서 쇼핑몰에 오신 것을 환영합니다"; String tagline = "Welcome to Web Market!"; %> <div class="container py-4"> <%@ include file="menu.jsp" %> <div class="p-5 mb-4 bg-body-tertiary rounded-3"> <div class="container-fluid py-5"> <h1 class="display-5 fw-bold"><%= greeting %></h1> <p class="col-md-8 fs-4">BookMarket</p> </div> </div> <div class="row align-items-md-stretch text-center"> <div class="col-md-12"> <div class="h-100 p-5"> <h3><%= tagline %></h3> <% Date day=new java.util.Date(); String am_pm; int hour=day.getHours(); int minute=day.getMinutes(); int second=day.getSeconds(); if(hour / 12==0){ am_pm="AM"; }else{ am_pm="PM"; hour=hour - 12; } String CT=hour + ":" + minute + ":" + second + " " + am_pm; out.println("현재 접속 시각: " + CT + "\n"); %> </div> </div> </div> <%@ include file="footer.jsp" %> </div> </body> </html> |
예제3-13.웹 페이지 모듈화하기
1)머리글 JSP 페이지 작성하기
JSPBook/src/main/webapp/ch03/menu.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <header class="pb-3 mb-4 border-bottom"> <a> <svg><i class="fa-solid fa-house"></i></svg> <span class = "fs-4">Home</span> </a> </header> |
*<%@ page 속성 %>: 글자 깨짐 방지
2)바닥글 JSP 페이지 작성하기
JSPBook/src/main/webapp/ch03/footer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <footer class="pt-3 mt-4 text-body-secondary border-top"> © BookMarket </footer> |
*<%@ page 속성 %>: 글자 깨짐 방지
3)JSP 페이지 모듈화하기: <%@ include file %>
JSPBook/src/main/webapp/ch03/welcome.jsp
<div class="container py-4">
<%@ include file="menu.jsp" %> <div class="p-5 mb-4 bg-body-tertiary rounded-3"> <div class="container-fluid py-5"> <h1 class="display-5 fw-bold"><%= greeting %></h1> <p class="col-md-8 fs-4">BookMarket</p> </div> </div> <div class="row align-items-md-stretch text-center"> <div class="col-md-12"> <div class="h-100 p-5"> <h3><%= tagline %></h3> <% Date day=new java.util.Date(); String am_pm; int hour=day.getHours(); int minute=day.getMinutes(); int second=day.getSeconds(); if(hour / 12==0){ am_pm="AM"; }else{ am_pm="PM"; hour=hour - 12; } String CT=hour + ":" + minute + ":" + second + " " + am_pm; out.println("현재 접속 시각: " + CT + "\n"); %> </div> </div> </div> <%@ include file="footer.jsp" %> </div> </body> |
실행 결과
![]() |
chapter 04 액션 태그: 도서 목록 표시하기
01.액션 태그의 개요
-액션 태그는 서버나 클라이언트에게 어떤 행동을 하도록 명령하는 태그로 스크립트 태그, 주석, 디렉티브 태그와 함께 JSP 페이지를 구성하는 태그임. 액션 태그는 JSP 페이지에서 페이지와 페이지 사이를 제어하거나, 다른 페이지의 실행 결과 내용을 현재 페이지에 포함하거나, 자바빈즈(JavaBeans) 등의 다양한 기능을 제공함
-액션 태그에는 다양한 종류가 있으며, <% ··· %> 와 같은 스크립트 태그의 형식을 따르지 않고 XML 형식 <jsp: ··· />를 사용함. 액션 태그는 반드시 끝나는 태그 />로 마무리해야 함
◎액션 태그의 종류
액션 태그 | 형식 | 설명 |
forward | <jsp:forwoad ··· /> | 다른 페이지로의 이동과 같은 페이지 흐름을 제어함 |
include | <jsp:include ··· /> | 외부 페이지의 내용을 포함하거나 페이지를 모듈화함 |
useBean | >jsp:useBean ··· /> | JSP 페이지에 자바빈즈를 설정함 |
setProperty | <jsp:setProperty ··· /> | 자바빈즈의 프로퍼티 값을 설정함 |
getProperty | <jsp:getProperty ··· /> | 자바빈즈의 프로퍼티 값을 얻어옴 |
param | <jsp:param ··· /> | <jsp:forward>, <jsp:include>, <jsp:plgin> 태그에 인자를 추가함 |
plugin | <jsp:plugin ··· /> | 웹 브라우저에 자바 애플릿을 실행함. 자바 플러그인에 대한 OBJECT 또는 EMBED 태그를 만드는 브라우저별 코드를 생성함 |
element | <jsp:element ··· /> | 동적 XML 요소를 설정함 |
attribute | <jsp:attribute ··· /> | 동적으로 정의된 XML 요소의 속성을 설정함 |
body | <jsp:body ··· /> | 동적으로 정의된 XML 요소의 몸체를 설정함 |
text | <jsp:text ··· /> | JSP 페이지 및 문서에서 템플릿 텍스트를 작성함 |
02.forward 액션 태그
-forward 액션 태그는 현재 JSP 페이지에서 다른 페이지로 이동하는 태그로 형식은 다음과 같음. JSP 컨테이너는 현재 JSP 페이지에서 forward 액션 태그를 만나면 그전까지 출력버퍼에 저장되어 있던 내용을 모두 삭제함. 그리고 forward 액션 태그에 설정된 페이지로 프로그램의 제어가 이동함
<jsp:forward page="파일명" />(싱글태그) ························ 반드시 끝나는 태그가 있어야함 또는 <jsp:forward page="파일명"> </jsp:forward> |
*jsp:forward: 이름
cf)HTML 띄어쓰기: <이름 속성="값">
-여기서 page 속성 값은 현재 JSP 페이지에서 이동할 페이지의 외부 파일명임. 이때 외부 파일은 현재 JSP 페이지와 같은 디렉터리에 있으면 파일명만 설정하고, 그렇지 않으면 전체 URL(또는 상대 경로)을 설정해야 함
◎forward 액션 태그 사용 시 주의점
-웹 서버는 forward 액션 태그를 수행할 때 출력 버퍼를 지우므로 현재 페이지에서 forward 액션 태그가 선언된 지점 이전까지 생성된 HTML 코드가 손실됨. 그러나 현재 페이지가 이미 전달 버퍼로 채워진 경우에는 전달이 중단될 때까지 해당 내용을 웹 서버에서 응답으로 보냄. 이렇게 하면 잘못된 페이지가 클라이언트로 전송될 수 있음. 따라서 큰 출력을 생성하는 페이지에서 forward 액션 태그를 호출할 때는 신중해야 함
*출력버퍼(응답): 전달할 HTML을 보관하는 저장소
예제4-1.forward 액션 태그로 현재 날짜와 시각을 출력하는 페이지로 이동하기
JSPBook/src/main/webapp/ch04/forward.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h2>forward 액션 태그</h2> <jsp:forward page="forward_date.jsp" /> <p> -------------------------- </body> </html> |
JSPBook/src/main/webapp/ch04/forward_date.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Action Tag</title> </head> <body> <p> 오늘의 날짜 및 시간 <p> <%=(new java.util.Date()).toLocaleString() %> </body> </html> |
실행 결과
![]() |
◎액션 태그를 사용하는 이유
-액션 태그는 스크립트 태그와 마찬가지로 JSP 페이지에서 자바 코드를 삽입할 수 있는 태그를 의미함. 액션 태그는 스크립트 태그를 이용하여 JSP 페이지에 직접 자바 코드를 작성하는 것을 피하기 위해 사용함. 즉, JSP 페이지를 작성할 때 자바 코드의 삽입을 되도록 최소화하여 유지 보수를 효율적으로 하는 것이 목적임
*접히지 않음, 코드의 가독성/ <% 태그로 판단안 함
03.include 액션 태그
-include 액션 태그는 include 디렉티브 태그처럼 현재 JSP 페이지의 특정 영역에 외부 파일의 내용을 포함하는 태그로 형식은 다음과 같음. 현재 JSP 페이지에 포함할 수 있는 외부 파일에는 HTML, JSP, 서블릿 페이지 등이 있음
<jsp:include page="파일명" flush="false" /> |
-page 속성 값은 현재 JSP 페이지 내에 포함할 내용을 가진 외부 파일명임. 이때 외부 파일은 현재 JSP 페이지와 같은 디렉터리에 있으면 파일명만 설정하고, 그렇지 않으면 전제 URL(또는 상대 경로)을 설정해야 함
-flush 속성 값은 설정한 외부 파일로 제어가 이동할 때 현재 JSP 페이지가 지금까지 출력 버퍼에 저장한 결과를 처리함. 기본값은 false이고, true로 설정하면 외부 파일로 제어가 이동할 때 현재 JSP 페이지가 지금까지 출력 버퍼에 저장된 내용을 웹 브라우저에 출력하고 출력 버퍼를 비움
-include 액션 태그는 forward 액션 태그처럼 외부 파일을 포함한다는 점이 비슷하지만, 포함된 외부 파일이 실행된 후 현재 JSP 페이지로 제어를 반환하는 것에서 차이가 있음. 또한 JSP 컨테이너는 현재 JSP 페이지에서 include 액션 태그를 만나면 include 액션 태그에 설정된 외부 파일의 실행 내용이 현재 JSP 페이지의 출력 버퍼에 추가 저장되어 출력됨
◎flush 속성 값
-일반적으로 flush 속성은 false로 지정하는 것이 좋음. true로 지정하면 일단 출력 버퍼를 웹 브라우저에 전송하는데 이때 헤더 정보도 같이 전송됨. 헤더 정보가 웹 브라우저에 전송되고 나면 헤더 정보를 추가해도 결과가 반영되지 않음
◎include 액션 태그와 include 디렉티브 태그의 차이
-include 액션 태그와 include 디렉티브 태그는 현재 JSP 페이지에 다른 페이지를 포함하는 기능을 제공한다는 점이 비슷함. 그러나 include 디렉티브 태그는 단순하게 다른 페이지의 내용이 텍스트로 포함되지만, include 액션 태그는 다른 페이지의 처리 결과 내용을 포함함. 좀 더 자세히 살펴보면 include 액션 태그와 include 디렉티브 태그는 다음과 같은 차이가 있음
구분 | include 액션 태그 | include 디렉티브 태그 |
처리 시간 | 요청 시 자원(결과)을 포함함 | 번역시 자원(코드)을 포함함 |
기능 | 별도의 파일로 요청 처리 흐름을 이동함 | 현재 페이지에 삽입함 |
데이터 전달 방법 | request 기본 내장 객체나 param 액션 태그를 이용하여 파라미터를 전달함 | 페이지 내의 변수를 선언한 후 변수에 값을 저장함 피라미터 전달x, 이동x |
용도 | 화면 레이아웃의 일부분을 모듈화할 때 주로 사용함 | 다수의 JSP 웹 페이지에서 공통으로 사용되는 코드나 저작권과 같은 문장을 포함하는 경우에 사용함 |
기타 | 동적 페이지에 사용함 | 정적 페이지에 사용함 |
*include 액션 태그의 처리 과정:
1)HTTP 요청
2)first.jsp
<jsp:include page="second.jsp" flush="false> -> Java 코드 삽입x: Text/HTML
3)forward 이동
4)second.jsp 코드 해석 -> Text/HTML
5)HTML
6)first.jsp 나머지 부분 처리
7)HTTP 응답 삽입
04.param 액션 태그
-param 액션 태그는 현재 JSP 페이지에서 다른 페이지에 정보를 전달하는 태그로 형식은 다음과 같음
<jsp:forward page="파일명" /> <jsp:param name="매개변수명1" value="매개변수값1 " /> [<jsp:param name="매개변수명2" value="매개변수값2 " /> ··· ] </jsp:forward> |
-param 액션 태그는 단독으로 사용되지 못하며 <jsp:forward>나 <jsp:include> 태그의 내부에 사용됨. 또한 다른 페이지에 여러 개의 정보를 전송해야 할 때는 다중의 param 액션 태그를 사용할 수 있음
예제4-3.forward 액션 태그와 param 액션 태그에 아이디와 이름 전달하기
JSPBook/src/main/webapp/ch04/param01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Action Tag</title> </head> <body> <h3>param 액션 태그</h3> <jsp:forward page="param01_data.jsp"> <jsp:param name="id" value="admin" /> <jsp:param name="name" value='<%= java.net.URLEncoder.encode("관리자") %>'/> </jsp:forward> <p> Jakarta Server Page </body> </html> |
*URLEncoder: zip 압축
value=' "문자열" '/>
↑
<%= %>
JSPBook/src/main/webapp/ch04/param01_data.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Action Tag</title> </head> <body> <p> 아이디 : <%=request.getParameter("id") %> <% String name=request.getParameter("name"); %> <p> 이 름 : <%=java.net.URLDecoder.decode(name) %> </body> </html> |
*decode: un zip
실행 결과
![]() |
예제4-4.include 액션 태그와 param 액션 태그에 제목과 현재 날짜 전달하기
JSPBook/src/main/webapp/ch04/param02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Action Tag</title> </head> <body> <h3>param 액션 태그</h3> <jsp:include page="param02_data.jsp"> <jsp:param name="title" value='<%=java.net.URLEncoder.encode("오늘의 날짜와 시각") %>' /> <jsp:param name="date" value="<%=java.util.Calendar.getInstance().getTime() %>"/> </jsp:include> </body> </html> |
*코드 작성 밖에서 안으로: 1. <jsp:include /jsp:include> 2.<jsp:param name="" value='<%= /%>' /> 3.내용
JSPBook/src/main/webapp/ch04/param02_data.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Action Tag</title> </head> <body> <% String title=request.getParameter("title"); %> <h3><%=java.net.URLDecoder.decode(title) %></h3> Today id :<%=request.getParameter("date") %> </body> </html> |
실행 결과
![]() |
05.자바빈즈 액션 태그
-JSP 페이지의 주요 기능 중 하나는 데이터를 보여주는 것임. 그런데 하나의 JSP 페이지에서 데이터를 보여주기 위한 자바 코드와 단순히 화면을 출력하는 HTML 코드를 함께 작성하면 기능을 확장하거나 코드를 재사용하는 데 어려움이 있음. 따라서 프로그램의 효율을 높이기 위해 화면을 출력하는 부분과 데이터를 처리하는 로직 부분을 구분하여 작성하고, 로직 부분의 코드에는 자바빈즈라는 클래스를 사용함
1)자바빈즈의 개요
-자바빈즈는 동적 콘텐츠 개발을 위해 자바 코드를 사용하여 자바 클래스로 로직을 작성하는 방법임. 다시 말해 JSP 페이지에서 화면을 표현하기 위한 계산식이나 자료의 처리를 담당하는 자바 코드를 따로 분리하여 작성하는 것을 의미함
-자바빈즈는 데이터 표현을 목적으로 하는 자바 클래스이기 때문에 기존의 자바 클래스를 작성하는 방법과 동일함. 자바빈즈는 데이터를 담는멤버 변수인 프로퍼티(property)와 데이터를 가져오거나 저장하는 메서드로 구성됨. 자바빈즈를 작성할 때는 다음 규칙을 따라야 함
·자바 클래스는 java.io.Serializable 인터페이스를 구현해야함
·인수가 없는 기본 생성자가 있어야 함
·모든 멤버 변수인 프로퍼티는 private 접근 지정자로 설정해야 함
·모든 멤버 변수인 프로퍼티는 Getter/Setter() 메소드가 존재해야 함. Getter() 메소드는 멤버 변수에 저장된 값을 가져올 수 있는 메소드이고, Setter() 메소드는 멤버 변수에 값을 저장 할 수 있는 메소드임
*java.io.Serializable 인터페이스는 생략할 수 있지만 자바빈즈 규약에 명시된 내용으로, 자바빈즈에 저장된 프로퍼티를 포함한 채로 파일 시스템에 저장되거나 네트워크로 전송될 수 있도록 객체 직렬화를 제공해야 하므로 implememt 해야 함
[자바빈즈 작성 예]
package controller.dto;
public class MemberBean { private int id; private String name; //생성자 MemberBean(){} //getter, setter public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } |
1)멤버 변수(프로퍼티) 정의 2)기본 생성자 3)Getter/Setter() 메소드
cf)자바빈즈를 작성할 때 멤버 변수의 Getter/Setter() 메소드를 직접 작성하여 만들 수 있으나 멤버 변수가 많으면 상당히 번거로움. 이럴 때는 이클립스에서 [Source]-[Generate Getters and Setters] 메뉴를 선택하면 멤버 변수의 Getter/Setter() 메소드를 자동으로 추가할 수 있음
-이렇게 작성된 자바빈즈는 JSP 페이지에서 useBean, setProperty, getProperty 등의 자바빈즈 액션 태그와 스크립트 태그에 자바 코드와 같이 사용할 수 있음. 또한 폼 페이지의 입력 데이터나 HTML 페이지에서 넘어오는 데이터를 쉽게 자바빈즈 객체로 저장할 수 있음
2)useBean 액션 태그로 자바빈즈 사용하기
-useBean 액션 태그는 JSP 페이지에서 자바빈즈를 사용하기 위해 실제 자바 클래스를 선언하고 초기화하는 태그로 형식은 다음과 같음
<jsp:useBean id="자바빈즈 식별이름" class="자바빈즈 이름" scope="범위" /> |
cf)scope: 유통기한
-useBean 액션 태그는 설정된 id 속성과 scope 속성을 바탕으로 자바빈즈의 객체를 검색하고, 객체가 발견되지 않으면 빈 객체를 생성함
◎useBean 액션 태그의 속성
속성 | 설명 |
id | 자바빈즈를 식별하기 위한 이름임 -> 참조변수 |
))class | 패키지 이름을 포함한 자바빈즈 이름임. 자바빈즈는 인수가 없는 기존 생성자가 있어야 하며 추상 클래스를 사용할 수 있음 -> 생성할 객체 이름(fullname): 패키지.이름 |
scope | 자바빈즈가 저장되는 영역을 설정함. page(기본값), request, session, application 중 하나의 값을 사용함 page 안 1번만 이동 n번: 수동폐기 (~):무한대(서버 종료) |
-다음은 앞에서 작성한 자바빈즈 MemberBean을 JSP 페이지에서 사용하기 위해 useBean 액션 태그로 자바빈즈를 선언하고 초기화하는 예임
[useBean 액션 태그 사용 예]
<jsp:useBean id="member" class="controller.dto.MemberBean" scope="page" /> |
-위의 예는 다음 자바 코드와 동일함
MemberBean member=(MemberBean) request.getAttribute("member"; if(member==null) { member=new MemberBean(); request.setAttribute("member", member); } |
예제4-5.useBean 액션 태그에 클래스를 사용하여 현재 날짜와 시각 출력하기
JSPBook/src/main/webapp/ch04/useBean01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Action Tag</title> </head> <body> 변수명 데이터타입 <jsp:useBean id="date" class="java.util.Date" /> <-1개: 싱글톤(공통기능만 사용) <p> <% 데이터타입 변수명 java.util.Date date1 = new java.util.Date(); <- n개 instance out.print("오늘의 날짜 및 시각"); %> <p> <%=date %> <p> <%=date1 %> </body> </html> |
*session: n번 이동
request: 1번 이동
실행 결과
![]() |
예제4-6.자바빈즈 Calculator를 생성하고 useBean 액션 태그에 Calculator 클래스를 사용하여 숫자 출력하기
JSPBook/src/main/webapp/controller/dto/Calculator.java
package controller.dto;
public class Calculator { public int process(int n) { return n * n * n; } } |
JSPBook/src/main/webapp/ch04/useBean02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Action Tag</title> </head> <body> <jsp:useBean id="bean" class="controller.dto.Calculator" /> <% int m=bean.process(5); out.print("5의 3제곱 : " + m); %> </body> </html> |
실행 결과
![]() |
예제4-7.자바빈즈 Person을 생성하고 useBean 액션 태그에 Person 클래스를 사용하여 아이디와 이름 출력하기
JSPBook/src/main/webapp/controller/dto/Person.java
package controller.dto;
public class Person { private int id=20230821; private String name="홍길순"; public Person() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } |
JSPBook/src/main/webapp/ch04/useBean03.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> 객체 생성 <jsp:useBean id="person" class="controller.dto.Person" scope="request" /> <p> 아이디 : <%=person.getId() %> <p> 이 름 : <%=person.getName() %> <p> 아이디 : <jsp:getProperty name="person" property="id" />
<p> 이 름 : <jsp:getProperty name="person" property="name" / > </body> </html> |
실행 결과
![]() |
예제4-8.useBean 액션 태그에 [예제4-7]에서 생성한 자바빈즈 Person으로 아이디와 이름을 설정하여 출력하기
JSPBook/src/main/webapp/ch04/useBean04.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <jsp:useBean id="person" class="controller.dto.Person" scope="request" /> <p> 아이디 : <%=person.getId() %> <p> 이 름 : <%=person.getName() %> <% person.setId(20230824); person.setName("홍길동"); %> <jsp:setProperty name="person" property="id" value="2023824" />
<jsp:setProperty name="person" property="name" value="홍길동" /> </body> </html> |
실행 결과
![]() |
3)setProperty 액션 태그로 프로퍼티의 값 저장하기
-setProperty 액션 태그는 useBean 액션 태그와 함께 자바빈즈의 Setter() 메소드에 접근하여 자바빈즈의 멤버 변수인 프로퍼티의 값을 저장하는 태그로 형식은 다음과 같음. setProperty 태그로 폼 페이지로부터 전달되는 요청 파라미터의 값을 직접 저장하거나 자바빈즈의 프로퍼티로 변경하여 값을 저장할 수 있음. 또는 모든 자바빈즈 프로퍼티 이름과 동일하게 요청 파라미터를 설정할 수 있음
◎setProperty 액션 태그의 속성
속성 | 설명 |
name | useBean 태그에 id 속성 값으로 설정된 자바진즈를 식별하기 위한 이름임 |
property | 자바빈즈의 프로퍼티 이름임. 만약 프로퍼티 이름에 '*'를 사용하면 모든 요청 파라미터가 자바빈즈 프로퍼티의 Setter() 메소드에 전달됨을 의미함 |
value | 변경할 자바빈즈의 프로퍼티 값임. 만약 프로퍼티 값이 null이거나 존재하지 않는 요청 파라미터인 경우에는 setProperty 액션 태그가 무시됨 |
param | 자바빈즈의 프로퍼티 값을 전달하는 요청 파라미터의 이름임. param과 value를 동시에 모두 사용할 수 없으며 하나를 선택하여 사용하는 것은 가능함 |
<jsp:setProperty name="자바빈즈 식별이름" property="프로퍼티 이름" value="값" /> |
cf)= <% member.setId(" ")
[setProperty 액션 태그 사용 예]
<jsp:setProperty name="member" property="id" value="admin" /> |
[자바빈즈의 프로퍼티 값 출력 예]
<% out.println("아이디 : +member.getId()); %> |
4)getProperty 액션 태그로 프로퍼티의 값 가져오기
-getProperty 액션 태그는 useBean 액션 태그와 함께 자바빈즈의 Getter() 메소드에 접근하여 자바빈즈의 멤버 변수인 프로퍼티의 값을 가져오는 태그로 형식은 다음과 같음
<jsp:getProperty name="자바빈즈 식별이름" property="프로퍼티 이름" /> |
[getProperty 액션 태그 사용 예]
<jsp:getProperty name="member" property="name" /> |
[자바빈즈의 프로퍼티 값 출력 예]
<% out.println(member.getName()); %> |
◎getProperty 액션 태그의 속성
속성 | 설명 |
name | useBean 태그에 id 속성 값으로 설정된 자바빈즈를 식별하기 위한 이름임 |
property | 자바빈즈의 프로퍼티 이름임. 만약 프로퍼티 이름에 '*'를 사용하면 모든 요청 파라미터가 자바빈즈 프로퍼티의 Getter() 메소드에 전달됨을 의미함 |
06.북마켓 도서 목록 표시하기
-JSP 페이지에 데이터를 보여주기 위한 자바 클래스인 자바빈즈를 작성하고 자바빈즈 액션 태그를 적용하여 북마켓의 도서 목록을 출력함. 그리고 include 액션 태그를 적용하여 메뉴바와 본문, 바닥글 등으로 페이지를 모듈화함
예제4-12.도서 목록 표시하기
[도서 클래스 만들기]
1)도서 클래스 생성하기
2)멤버 변수 선언하기
3)기본 생성자 작성하기
4)모든 멤버 변수의 Setter/Getter() 메소드를 각각 추가 작성함
BookMarket/src/main/java/dto/Book.java
package dto;
public class Book { private static final long serialVersionUID=-4274700572038677000L; private String bookId; //도서 ID private String name; //도서명 private int unitPrice; //가격 private String Author; //저자 private String description; //설명 private String publisher; //출판사 private String category; //분류 private long unitsInStock; //재고개수 private String releaseDate; //출판일(월/년) private String condition; //신제품 or 구제품 or 리퍼브제품 public Book() { super(); } public Book(String bookId, String name, int unitPrice) { super(); this.bookId = bookId; this.name = name; this.unitPrice = unitPrice; } public String getBookId() { return bookId; } public void setBookId(String bookId) { this.bookId = bookId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getUnitPrice() { return unitPrice; } public void setUnitPrice(int unitPrice) { this.unitPrice = unitPrice; } public String getAuthor() { return Author; } public void setAuthour(String author) { Author = author; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getPublisher() { return publisher; } public void setPublisher(String publisher) { this.publisher = publisher; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } public long getUnitsInStock() { return unitsInStock; } public void setUnitsInStock(long unitsInStock) { this.unitsInStock = unitsInStock; } public String getReleaseDate() { return releaseDate; } public void setReleaseDate(String releaseDate) { this.releaseDate = releaseDate; } public String getCondition() { return condition; } public void setCondition(String condition) { this.condition = condition; } public static long getSerialversionuid() { return serialVersionUID; } } |
[자바빈즈로 사용할 도서 데이터 접근 클래스 만들기]
5)자바빈즈로 사용할 클래스 만들기
6)멤버 변수와 기본 생성자 만들기
7)도서 목록을 가져오는 메소드 만들기
BookMarket/src/main/java/dao/BookRepository.java
package dao;
import dto.Book; import java.util.ArrayList; public class BookRepository { private ArrayList<Book> listOfBooks = new ArrayList<Book>(); public BookRepository() { Book book1 = new Book("ISBN1234", "C# 프로그래밍", 27000); book1.setAuthour("우재남"); book1.setDescription( "C#을 처음 접하는 독자를 대상으로 일대일 수업처럼 자세히 설명한 책이다. 꼭 알아야 할 핵심 개념은 기본 예제로 최대한 쉽게 설명했으며, 중요한 내용은 응용 예제, 퀴즈, 셀프 스터디, 예제 모음으로 한번 더 복습할 수 있다."); book1.setPublisher("한빛아카데미"); book1.setCategory("IT모바일"); book1.setUnitsInStock(1000); book1.setReleaseDate("2022/10/06"); Book book2 = new Book("ISBN1235", "자바마스터", 30000); book2.setAuthour("송미영"); book2.setDescription( "자바를 처음 배우는 학생을 위해 자바의 기본 개념과 실습 예제를 그림을 이용하여 쉽게 설명합니다. 자바의 이론적 개념→기본 예제→프로젝트 순으로 단계별 학습이 가능하며, 각 챕터의 프로젝트를 실습하면서 온라인 서점을 완성할 수 있도록 구성하였습니다."); book2.setPublisher("한빛아카데미"); book2.setCategory("IT모바일"); book2.setUnitsInStock(1000); book2.setReleaseDate("2023/01/01"); Book book3 = new Book("ISBN1236", "파이썬 프로그래밍", 30000); book3.setAuthour("최성철"); book3.setDescription( "파이썬으로 프로그래밍을 시작하는 입문자가 쉽게 이해할 수 있도록 기본 개념을 상세하게 설명하며, 다양한 예제를 제시합니다. 또한 프로그래밍의 기초 원리를 이해하면서 파이썬으로 데이터를 처리하는 기법도 배웁니다."); book3.setPublisher("한빛아카데미"); book3.setCategory("IT모바일"); book3.setUnitsInStock(1000); book3.setReleaseDate("2023/01/01"); listOfBooks.add(book1); listOfBooks.add(book2); listOfBooks.add(book3); } public ArrayList<Book> getAllBooks() { return listOfBooks; } } |
[도서 목록 표시하기]
8)도서 목록 출력 웹 페이지 만들기
BookMarket/src/main/webapp/books.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> <%@ page import="java.util.ArrayList" %> <%@ page import="dto.Book" %> <jsp:useBean id="bookDAO" class="dao.BookRepository" scope="session" /> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="https://kit.fontawesome.com/fa848000d2.js" crossorigin="anonymous"></script> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"> <title>도서 목록</title> </head> <body> <div class="container py-4"> <%@ include file="menu.jsp" %> <div class="p-5 mb-4 bg-body-tertiary rounded-3"> <div class="container-fluid py-5"> <h1 class="display-5 fw-bold">도서목록</h1> <p class="col=md-8 fs-4">BookList</p> </div> </div> <% 참조변수 listOfBooks ArrayList<Book> listOfBooks = bookDAO.getAllBooks(); [Book1/Book2/Book3] %> <div class="row align-items-md-stretch text-center"> <% 3 for(int i=0; i<listOfBooks.size(); i++){ Book book=listOfBooks.get(i); 0 %> <div class="col-md-4"> <div class="h-100 p-2"> <h5><b><%=book.getName() %></b></h5> <p> <%=book.getAuthor() %> <br><%=book.getPublisher() %> : <%=book.getUnitPrice() %>원 <p> <%=book.getDescription().substring(0,60) %>... <p><%=book.getUnitPrice() %>원 </div> </div> <% } %> </div> <%@ include file="footer.jsp" %> </div> </body> </html> |
실행 결과
![]() |
'프로그래밍 > JSP' 카테고리의 다른 글
JSP 웹프로그래밍 58일차 (25/2/7) (0) | 2025.02.07 |
---|---|
JSP 웹프로그래밍 57일차 (25/2/6) (0) | 2025.02.06 |
JSP 웹프로그래밍 56일차 (25/2/5) (0) | 2025.02.05 |