[쉽게 배우는 JSP 웹 프로그래밍] 4장 정리, 연습문제

자바 액션 태그에 대한 설명으로, forward 액션 태그는 현재 JSP 페이지에서 다른 페이지로 이동하며, include 액션 태그는 현재 JSP 페이지의 특정 영역에 외부 파일의 내용을 포함한다. param 액션 태그는 현재 JSP 페이지에서 다른 페이지에 정보를 전달하며, useBean 액션 태그는 JSP 페이지에서 자바빈즈를 사용하기 위해 실제 자바 클래스를 선언하고 초기화한다. setProperty 액션 태그는 자바빈즈의 Setter() 메소드에 접근하여 자바빈즈의 멤버 변수인 프로퍼티의 값을 저장하고, getProperty 액션 태그는 자바빈즈의 Getter() 메소드에 접근하여 자바빈즈의 멤버 변수인 프로퍼티의 값을 가져온다.
Feb 21, 2024
[쉽게 배우는 JSP 웹 프로그래밍] 4장 정리, 연습문제

foward.jsp

<%@ page contentType="text/html; charset=utf-8" %> <html> <head> <title>Action Tag</title> </head> <body> <h2>forward 액션 태그</h2> <jsp:forward page="forward_date.jsp"/> </body> </html>

foward_date.jsp

<%@ page contentType="text/html; charset=utf-8" %> <html> <head> <title>Action Tag</title> </head> <body> <p>오늘의 날짜 및 시간 <p><%=(new java.util.Date()).toLocaleString() %> </body> </html>
 

핵심 키워드

  • foward 액션 태그는 현재 JSP 페이지에서 다른 페이지로 이동하는 태그다.
    • JSP 컨테이너는 현재 JSP 페이지에서 forward 액션 태그를 만나면 그 전까지 출력 버퍼에 저장되어 있던 내용을 모두 삭제한다. 그리고 forward 액션 태그에 설정된 페이지로 프로그램의 제어가 이동한다.
 

include.jsp

<%@ page contentType="text/html; charset=utf-8" %> <html> <head> <title>Action Tag</title> </head> <body> <h2>include 액션 태그</h2> <jsp:include page="include_date.jsp" flush="true"/> </body> </html>

include_date.jsp

<%@ page contentType="text/html; charset=utf-8" %> <html> <head> <title>Action Tag</title> </head> <body> <p>오늘의 날짜 및 시간 <p><%=(new java.util.Date()).toLocaleString() %> </body> </html>
 

핵심 키워드

  • include 액션 태그는 include 디렉티브 태그처럼 현재 JSP 페이지의 특정 영역에 외부 파일의 내용을 포함하는 태그다.
    • 현재 JSP 페이지에 포함할 수 있는 외부 파일은 HTML, JSP, 서블릿 페이지 등이다.
    • include 액션 태그는 forward 액션 태그처럼 외부 파일을 포함한다는 점이 비슷하지만 포함된 외부 파일이 실행된 후 현재 JSP 페이지로 제어를 반환한다는 점이 가장 큰 차이점이다.
      • 또한 JSP 컨테이너는 현재 JSP 페이지에서 include 액션 태그를 만나면 include 액션 태그에 설정된 외부 파일의 실행 내용이 현재 JSP 페이지의 출력 버퍼에 추가 저장되어 출력된다.
 

param01.jsp

<%@ page contentType="text/html; charset=utf-8"%> <html> <head> <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> </body> </html>

param01_data.jsp

<%@ page contentType="text/html; charset=utf-8"%> <html> <head> <title>Action Tag</title> </head> <body> <p> 아이디 : <%=request.getParameter("id")%> <% String name = request.getParameter("name"); %> <p> 이름 : <%=java.net.URLDecoder.decode(name)%> </body> </html>

param02.jsp

<%@ page contentType="text/html; charset=utf-8"%> <html> <head> <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>

param02_data.jsp

<%@ page contentType="text/html; charset=utf-8"%> <html> <head> <title>Action Tag</title> </head> <body> <% String title = request.getParameter("title"); %> <h3><%=java.net.URLDecoder.decode(title)%></h3> Today is : <%=request.getParameter("date")%> </body> </html>
 

핵심 키워드

  • param 액션 태그는 현재 JSP 페이지에서 다른 페이지에 정보를 전달하는 태그다.
    • 이 태그는 단독으로 사용되지 못하며 <jsp:forward> 나 <jsp:include> 태그의 내부에 사용된다.
    • 또한 다른 페이지에 여러 개의 정보를 전송해야 할 때는 다중의 param 액션 태그를 사용한다.
 

Calculator.java

package ch04; public class Calculator { public int process(int n) { return n * n * n; } }

useBean02.jsp

<%@ page contentType="text/html; charset=utf-8"%> <html> <head> <title>Action Tag</title> </head> <body> <jsp:useBean id="bean" class="ch04.Calculator" /> <% int m = bean.process(5); out.println("5의 3제곱 : " + m); %> </body> </html>

Person.java

package ch04; public class Person { private int id = 20181004; 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; } }

useBean03.jsp

<%@ page contentType="text/html; charset=utf-8"%> <html> <head> <title>Action Tag</title> </head> <body> <jsp:useBean id="person" class="ch04.Person" scope="page" /> <p> 아이디 : <%=person.getId()%> <p> 이름 : <%=person.getName()%> </body> </html>

useBean04.jsp

<%@ page contentType="text/html; charset=utf-8"%> <html> <head> <title>Action Tag</title> </head> <body> <%-- scope가 page라면 include시 흐름이 넘어가면서 인스턴스가 사라진다. --%> <jsp:useBean id="person" class="ch04.Person" scope="page" /> <jsp:setProperty name="person" property="id" value="20182005" /> <jsp:setProperty name="person" property="name" value="홍길동" /> <p> 아이디 : <jsp:getProperty name="person" property="id" /> <p> 이름 : <jsp:getProperty name="person" property="name" /> <jsp:include page="useBean03.jsp" /> </body> </html>
 

핵심 키워드

  • 자바빈즈는 동적 콘텐츠 개발을 위해 자바 코드를 사용하여 자바 클래스로 로직을 작성하는 방법이다.
    • JSP 페이지에서 화면을 표현하기 위한 계산식이나 자료의 처리를 담당하는 자바 코드를 따로 분리하여 작성하고, 그에 따라 JSP 페이지가 HTML과 같이 쉽고 간단한 코드만으로 구성된다.
  • useBean 액션 태그는 JSP 페이지에서 자바빈즈를 사용하기 위해 실제 자바 클래스를 선언하고 초기화하는 태그다.
  • setProperty액션 태그는 useBean 액션 태그와 함께 자바빈즈의 Setter() 메소드에 접근하여 자바빈즈의 멤버 변수인 프로퍼티의 값을 저장하는 태그다.
    • setProperty 태그는 폼 페이지로부터 전달되는 요청 파라미터의 값을 직접 저장하거나 자바빈즈의 프로퍼티로 변경하여 값을 저장할 수 있다. 또는 모든 자바빈즈 프로퍼티 이름과 동일하게 요청 파라미터를 설정할 수 있다.
  • getProperty 액션 태그는 useBean 액션 태그와 함께 자바빈즈의 Getter() 메소드에 접근하여 자바빈즈의 멤버 변수인 프로퍼티의 값을 가져오는 태그다.
 

연습문제

practice01.jsp

01 JSP 컨테이너는 현재 JSP 페이지에서 forward 액션 태그를 만나면 그 전까지 출력 버퍼에 저장되어 있던 내용을 모두 삭제한다. 반면에 include 액션 태그를 만나면 외부 파일로 제어가 이동할 때 현재 JSP 페이지가 지금까지 출력 버퍼에 저장된 내용을 웹 브라우저에 출력하고 출력 버퍼를 비운다. 02 include 액션 태그는 요청 시 자원을 포함하고, 별도의 파일로 요청 처리 흐름을 이동하고, request 기본 내장 객체나 param 액션 태그를 이용하여 파라미터를 전달한다. 하지만 include 디렉티브 태그는 번역시 자원을 포함하고, 현재 페이지에 삽입하고, 페이지 내의 변수를 선언한 후 변수에 값을 저장한다. 03 1. 자바 클래스는 java.io.Serializable 인터페이스를 구현해야 한다. 2. 인수가 없는 기본 생성자가 있어야 한다. 3. 모든 멤버 변수인 프로퍼티는 private 접근 지정자로 설정해야 한다. 4. 모든 멤버 변수인 프로퍼티는 Getter/Setter()메소드가 존재해야 한다.

practice04.jsp

<%@ page contentType="text/html; charset=utf-8" %> <html> <head> <title>Directives Tag</title> </head> <body> <h4>구구단 출력하기</h4> <jsp:forward page="practice04_data.jsp"> <jsp:param value="5" name="num"/> </jsp:forward> </body> </html>

practice04_data.jsp

<%@ page contentType="text/html; charset=utf-8"%> <html> <head> <title>Directives Tag</title> </head> <body> <% int num = Integer.parseInt(request.getParameter("num")); for (int i = 1; i < 10; i++) { out.println(num+" * "+i+" = "+num*i); %> <br> <% } %> </body> </html>

practice05.jsp

<%@ page contentType="text/html; charset=utf-8" %> <html> <head> <title>Directives Tag</title> </head> <body> <h4>구구단 출력하기</h4> <jsp:include page="practice04_data.jsp" flush="true"> <jsp:param value="5" name="num"/> </jsp:include> </body> </html>

practice06.jsp

<%@ page contentType="text/html; charset=utf-8" %> <html> <head> <title>Directives Tag</title> </head> <body> <h4>구구단 출력하기</h4> <jsp:useBean id="gugudan" class="ch04.practice.GuGuDan"/> <%=gugudan.process(5) %> </body> </html>

practice07.jsp

<%@ page contentType="text/html; charset=utf-8"%> <%@ page import="java.util.ArrayList"%> <%@ page import="ch04.practice.dto.Book"%> <jsp:useBean id="bookDAO" class="ch04.practice.dao.BookRepository" scope="session" /> <html> <head> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"> <title>도서 목록</title> </head> <body> <nav class="navbar navbar-expend navbar-dark bg-dark"> <div class="container"> <div class="navbar-header"> <a class="navbar-brand" href="./practice07.jsp">Home</a> </div> </div> </nav> <div class="jumbotron"> <div class="container"> <h1 class="display-3">도서 목록</h1> </div> </div> <% ArrayList<Book> listOfBooks = bookDAO.getAllBooks(); %> <div class="container"> <% for (int i = 0; i < listOfBooks.size(); i++) { Book book = listOfBooks.get(i); System.out.println(book.getName()); %> <div class="text-left"> <h3><%="["+book.getCategory()+"]"+book.getName() %></h3> <p><%=book.getDescription() %> <p><%=book.getAuthor()+" | "+book.getPublisher()+" | "+book.getUnitPrice()+"원" %> </div> <hr> <% } %> </div> <footer class="container"> <p>&copy; BookMarket</p> </footer> </body> </html>
 

결론

해당 문제를 풀면서 액션 태그의 개념과 특징, 액션 태그 구성 요소의 사용법을 익힐 수 있었다.
Share article

More articles

See more posts
RSSPowered by inblog