JSP(4. 액션 태그)

min seung moon·2021년 3월 27일
4

JSP

목록 보기
4/13

1. 액션 태그의 개요

01. 액션 태그

  • 서버나 클라이언트에게 어떤 행등을 하도록 명령하는 태그
  • JSP 페이지에서 페이지와 페이지 사이 제어
  • 다른 페이지의 실행 결과 내용을 현재 페이지에 포함
  • 자바 빈즈(JavaBeans)등의 다양한 기능 제공
  • XML 형식 <jsp: .../> 사용

02. 액션 태그의 종류

2. forward 액션 태그의 기능과 사용법

01. forward 액션 태그

  • 현재 JSP 페이지에서 다른 페이지로 이동하는 태그
  • JSP 컨테이너는 현재 JSP 페이지에서 forward 액션 태그를 만나면
    • 그 전까지 출력 버퍼에 저장되어 있던 내용을 모두 삭제하고
    • forward 액션 태그에 설정된 페이지로 프로그램의 제어가 이동
  • page 속성 값
    • 현재 JSP 페이지에서 이동할 페이지의 외부 파일명
    • 외부 파일은 현재 JSP페이지와 같은 디렉터리에 있으면 파일명만 설정하고, 그렇지 않으면 전체 URL(또는 상대 경로)을 설정해야 함

02. forward 액션 태그의 페이지 흐름 처리 과정



3. include 액션 태그의 기능과 사용법

01. include 액션 태그

  • include 디렉티브 태그처럼 혀재 JSP 페이지의 특정 영역에 외부 파일의 내용을 포함하는 태그
  • 현재 JSP페이지에 포함할 수 있는 외부 파일은 HTML, JSP, 서블릿 페이지 등
  • page 속성 값
    • 현재 JSP 페이지 내에 포함할 내용을 가진 외부 파일명
    • 외부 파일은 현재 JSP 페이지와 같은 디렉터리에 있으면 파일명만 설정하고, 그렇지 않으면전체 URL(또는 상대 경로)을 설정해야 함
  • flush 속성 값
    • 설정한 외부 파일로 제어가 이동할 때 현재 JSP 페이지가 지금까지 출력 버퍼에 저장한 결과를 처리, 기본 값은 false
    • true로 설정하면 외부 파일로 제어가 이동할 때 현재 JSP 페이지가 지금까지 출력 버퍼에 저장된 내용을 웹 브라우저에 출력하고 버퍼를 비움

02. include 액션 태그의 처리 과정


  • include 액션 태그에 현재 날짜와 시각을출력하는 페이지 포함하기

4. param 액션 태그의 기능과 사용법

01. param 액션 태그

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

  • forward 액션 태그와 param 액션 태그에 아이디와 이름 전달하기

  • include 액션 태그와 param 액션 태그에 제목과 현재 날짜 전달하기

5. 자바빈즈 액션 태그의 기능과 사용법

01. 자바 빈즈

  • 동적 콘텐츠 개발을 하기 위해 자바 코드를 사용하여 자바 클래스로 로직을 작성하는 방법
  • JSP 페이지에서 화면을 표현하기 위한 계산식이나 자료의 처리를 담당하는 자바코드를 따로 분리하여 작성하는 것
  • JSP 페이지가 HTML과 같이 쉽고 같단한 코드만으로 구성

02. 자바반즈를 작성할 때 규칙

  • 자바 클래스는 java.io.Serializable 인터페이스를 구현해야 함
  • 인수가 없는 기본 생성자가 있어야 함
  • 모든 멤버 변수인 프로퍼티는 private 접근 지정자로 설정해야 함
  • 모든 멤버 변수인 프로퍼티는 getter/setter() 메소드가 존재해야 함
    • getter() 메소드는 멤버 변수에 저장된 값을 가져올 수 있는 메소드이고,
    • setter() 메소드는 멤버 변수에 값을 저장할 수 있는 메소드임

03. useBean 액션 태그

  • JSP 페이지에서 자바빈즈를 사용하기 위해 실제 자바 클래스를 선언하고 초기화하는 태그
  • id 속성과 scope 속성을 바탕으로 자바빈즈의 객체를 검색하고, 객체가 발견되지 않으면 빈 객체를 생성

  • useBean 액션 태그에 Date 클래스를 사용하여 현재 날짜와 시각 출력하기


  • 자바빈즈 Person을 생성하고 useBean 액션 태그에 Person 클래스를 사용하여 아이디와 이름 출력하기

  • useBean 액션태그에서 생성한 자바빈즈 Person으로 아이디와 이름을 설정하여 출력하기

04. setProperty 액션 태그

  • useBean 액션 태그와 함께 자바빈즈의 setter()메소드에 접근하여 자바빈즈의 멤버 변수인 프로퍼티의 값을 저장하는 태그
  • 폼 페이지로부터 전달되는 요청 파라미터의 값을 직접 저장하거나 자바빈즈의 프로퍼티로 변경하여 값을 저장할 수 있음
  • 모든 자바빈즈 프로퍼티 이름과 동일하게 요청 파라미터를 설정할 수 있음

  • 요청 파라미터 이름과 자바빈즈의 프로퍼티 이름이 일치하는 경우 :
  • 요청 파라미터 이름과 자바빈즈의 프로퍼티 이름이 일치하지 않는 경우:
  • 요청 파라미터 이름과 자바진즈의 프로퍼티 이름이 모두 일치하는 경우:
  • setProperty 액션 태그에 자바빈즈 Person으로 아이디와 이름을 설정하여 출력하기

05. getProperty 액션 태그

  • useBean 액션 태그와 함께 자바빈즈의 getter() 메소드에 접근하여 자바빈즈의 멤버 변수인 프로퍼티의 값을 가져오는 태그

  • getProperty 액션 태그에 자바빈즈 Person을 이용하여 아이디와 이름을 가져와 출력하기
  • getProperty 액션 태그에 자바빈즈 Person을 이용하여 아이디와 이름을 전달받아 출력하기

6. 웹 쇼핑몰 상품 목록 표시하기


  • 상품 목록 표시하기
    • 상품 클래스 생성하기:
    • 멤버 변수 선언하기:
  • 기본 생성자 작성하기
  • 모든 멤버 변수의 Setter/Getter() 메소드 작성하기


01. 자바빈즈로 사용할 상품 데이터 접근 클래스 만들기

  • 자바빈즈로 사용할 클래스 만들기 :
  • 멤버 변수와 기본 생성자 만들기 :

  • 상품 목록을 가져오는 메소드 만들기 :

02. 상품 목록 표시하기

  • 상품 목록 출력 웹 페이지 만들기

7. 모듈

  • WebContent/header.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>header</title>
<style>
* {
	margin: 0;
	padding: 0;
	box-sizing: border-box;
}

a {
	color: #000;
	text-decoration: none;
}

header {
	background-color: #000;
	width: 100%;
	padding: 10px 20px;
}

header a {
	color: #fff;
	font-weight: 700;
}

.container {
	width: 90%;
	margin: 0 auto;
}
</style>
</head>
<body>
	<header>
		<div class="container">
			<a href="index.jsp">Home</a>
		</div>
	</header>
</body>
</html>
  • WebContent/footer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>footer</title>
<style>
footer {
	width: 100%;
	padding: 20px;
}
</style>
</head>
<body>
	<footer>
		<div class="container">&copy; WebMarket</div>
	</footer>
</body>
</html>
  • WebContent/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@page import="java.util.Date"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Welcome</title>
<style>
.main {
	width: 100%
}

.main .banner {
	width: 100%;
	height: 300px;
	background-color: #d1d1d1;
	text-align: center;
	line-height: 300px;
}

.main .banner h1 {
	font-size: 5vw;
	font-weight: 400;
}

.main .content {
	width: 100%;
	margin: 0 auto;
	padding: 10px;
	text-align: center;
}

.main .content h3 {
	margin: 0 auto;
	padding: 20px 0;
	font-weight: 100;
}

.main .content p {
	margin-bottom: 30px;
}
</style>
<%!String greenting = "웹 쇼핑몰에 오신 것을 환영합니다";
	String tagLine = "Welcome to Web Market";%>
</head>
<body>
	<jsp:include page="header.jsp" />

	<div class="main">

		<div class="banner">
			<div class="container">
				<h1><%=greenting%></h1>
			</div>
		</div>

		<div class="content">
			<div class="container">
				<h3><%=tagLine%></h3>
				<p>
					<%
						Date day = new 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");
					%>
				
				<p>
				<hr>
			</div>
		</div>
	</div>

	<jsp:include page="footer.jsp" />
</body>
</html>
  • WebContent/products.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="dto.Product"%>
<jsp:useBean id="productDAO" class="dao.ProductRepository"
	scope="session" />
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>상품 목록</title>
<style>
.main {
	width: 100%
}

.main .banner {
	width: 100%;
	height: 300px;
	background-color: #d1d1d1;
	line-height: 300px;
}

.main .banner h1 {
	font-size: 6vw;
	font-weight: 100;
}

.main .content {
	width: 100%
}

.main .content .row {
	display: flex;
	justify-content: space-around;
	align-items : center;
}

.main .content .row .column {
	width: 300px;
	display: flex;
	flex-direction: column;
	justify-content: center;
}
.main .content .row .column h3,
.main .content .row .column p {
	text-align : center;
	padding : 10px;
}
.main .content .row .column h3 {
	font-size : 1.7rem;
	font-weight : 400;
}
</style>
<%!String greenting = "상품목록";%>
</head>
<body>
	<jsp:include page="header.jsp" />

	<div class="main">

		<div class="banner">
			<div class="container">
				<h1><%=greenting%></h1>
			</div>
		</div>

		<div class="content">
			<div class="container">
				<div class="row">
					<%
						ArrayList<Product> listOfProduct = productDAO.getAllProducts();

						for (int i = 0; i < listOfProduct.size(); i++) {
							Product product = listOfProduct.get(i);
					%>
					<div class="column">
						<h3><%=product.getPname()%></h3>
						<p><%=product.getDescription()%></p>
						<p><%=product.getUnitPrice()%>원</p>
					</div>
					<%
						}
					%>
				</div>
				<hr>
			</div>
		</div>


	</div>

	<jsp:include page="footer.jsp" />
</body>
</html>
  • src/dto/Product.java
package dto;

import java.io.Serializable;

public class Product implements Serializable{
	
	private static final long serialCersionUID = -4274700572038677000L;
	
	private String productId; 		// 상품아이디
	private String pname; 			// 상품명
	private Integer unitPrice;		// 상품가격
	private String description;		// 상품설명
	private String manufacturer;	// 제조사
	private String category;		// 분류
	private long unitInStock;		// 재고수
	private String condition;		// 신상품 or 중고품 or 재생품
	
	public Product() {
		super();
	}
	
	public Product(String productId, String pname, Integer unitPrice){
		this.productId = productId;
		this.pname = pname;
		this.unitPrice = unitPrice;
	}

	public String getProductId() {
		return productId;
	}

	public void setProductId(String productId) {
		this.productId = productId;
	}

	public String getPname() {
		return pname;
	}

	public void setPname(String pname) {
		this.pname = pname;
	}

	public Integer getUnitPrice() {
		return unitPrice;
	}

	public void setUnitPrice(Integer unitPrice) {
		this.unitPrice = unitPrice;
	}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	public String getManufacturer() {
		return manufacturer;
	}

	public void setManufacturer(String manufacturer) {
		this.manufacturer = manufacturer;
	}

	public String getCategory() {
		return category;
	}

	public void setCategory(String category) {
		this.category = category;
	}

	public long getUnitInStock() {
		return unitInStock;
	}

	public void setUnitInStock(long unitInStock) {
		this.unitInStock = unitInStock;
	}

	public String getCondition() {
		return condition;
	}

	public void setCondition(String condition) {
		this.condition = condition;
	}

	public static long getSerialcersionuid() {
		return serialCersionUID;
	}
	
	
	
}
  • src/dao/ProductRepository.java
package dao;

import java.util.ArrayList;
import dto.Product;

public class ProductRepository {
	
	private ArrayList<Product> listOfProducts = new ArrayList<Product>();
	
	public ProductRepository() {
		Product phone = new Product("P1234", "iPhone 6s", 800000);
		phone.setDescription("4.7-inch, 1334X750 Renina HD display, 8-megapixel iSight Camera");
		phone.setCategory("Smart Phone");
		phone.setManufacturer("Apple");
		phone.setUnitInStock(1000);
		phone.setCondition("New");
		
		Product notebook = new Product("P1235", "LG PC 그램", 1500000);
		notebook.setDescription("13.3-inch, IPS LED display, 5rd Generation notebook. Inter Core processors");
		notebook.setCategory("Notebook");
		notebook.setManufacturer("LG");
		notebook.setUnitInStock(1000);
		notebook.setCondition("Refurbished");
		
		Product tablet = new Product("P1236", "Galaxy Tab S", 900000);
		tablet.setDescription("212.8*125.6*6.6mm, Super AMOLEED display, Octa-Core processor");
		tablet.setCategory("Tablet");
		tablet.setManufacturer("Samsum");
		tablet.setUnitInStock(1000);
		tablet.setCondition("Old");
		
		listOfProducts.add(phone);
		listOfProducts.add(notebook);
		listOfProducts.add(tablet);
	}
	
	public ArrayList<Product> getAllProducts() {
		return listOfProducts;
	}
}
profile
아직까지는 코린이!

0개의 댓글