JSP 6강 - Action Tag

voilà!·2022년 1월 16일
0

JSP 스프링

목록 보기
6/31

java
dto -> 나중에 vo
여기에 자바빈 클래스

dao (data access object), 데이터에 접근하는 객체

JSP useBean의 scope(생략 시 page가 기본)

기본객체          영역
pageContext     page
->(한번의 요청을 처리하는) 하나의 JSP 페이지 내에서 공유될 값을 저장한다.
request            request
->한번의 요청을 처리하는 데 사용되는 모든 JSP페이지에서 공유될 값을 저장한다.
sesssion           session
->한 사용자와 관련된 정보를 JSP들이 공유하기 위해 사용된다.
application       application
->모든 사용자와 관련해서 공유할 정보를 저장한다.

setProperty 액션태그

useBean 액션태그와 함께 사용됨
자바빈즈 Setter() 메소드에 접근하여 자바빈즈의 멤버변수인 프로퍼티의 값을 저장

Person.java

package ch04.com.dao;

import java.io.Serializable;

//자바빈 클래스
public class Person implements Serializable {
	//필드(멤버변수)
	private int id = 20181004;
	private String name = "개똥이";
	

	//기본생성자(생략가능)
	public Person() {
	}
	
	//getter/setter 메소드
	public int getId() {
		return id;
//		= return this.id; <- this 생략
	}
	
	public void setId(int id) {
		this.id = id;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
}

setProperty.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<!DOCTYPE html>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
<!-- 
* setProperty 액션 태그
 - useBean 액션태그와 함께 사용됨
 - 자바빈즈 Setter() 메소드에 접근하여 자바빈즈의 멤버 변수인 프로퍼티의 값을 저장
 -->

	<jsp:useBean id="person" class="ch04.com.dao.Person" scope="request" />
	<%
// 	person.setId(20210106);
// 	person.setName("손영흔");
	%>
	<jsp:setProperty name="person" property="id" value="20210106" />
	<jsp:setProperty name="person" property="name" value="손영흔" />
	<p>아이디 : ${person.id}</p>
	<p>이름 : ${person.name}</p>
	
</body>
</html>

getProperty 액션태그

useBean 액션 태그의 id 속성값(person)을 통해
자바빈즈 Person의 프로퍼티 id와 name에 값을 저장하고
자바빈즈 Person의 프로퍼티 id와 값을 가져와 화면 출력함

getProperty01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<!DOCTYPE html>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
<!-- 
자바빈즈 Person의 프로퍼티(멤버변수) id와 name에 값을 가져와 출력함
 -->
	<jsp:useBean id="person" class="ch04.com.dao.Person" />
	<p>아이디 : ${person.id}</p>
	<p>이름 : ${person.name}</p>
	<!-- 아래보다 위 방식을 더 많이 사용 -->
	<p>아이디 : <jsp:getProperty name="person" property="id"/></p>
	<p>이름 : <jsp:getProperty name="person" property="name"/></p>
</body>
</html>

getProperty02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<!DOCTYPE html>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
<!-- 
useBean 액션 태그의 id 속성값(person)을 통해
자바빈즈 Person의 프로퍼티 id와 name에 값을 저장하고
자바빈즈 Person의 프로퍼티 id와 name에 값을 가져와 화면 출력함
 -->
	<jsp:useBean id="person" class="ch04.com.dao.Person" />
	<jsp:setProperty name="person" property="id" value="20182005" />
	<jsp:setProperty name="person" property="name" value="이선우" />
	<p>아이디 : <jsp:getProperty name="person" property="id"/></p>
	<p>이름 : <jsp:getProperty name="person" property="name"/></p>
</body>
</html>

Serializable : 자바 직렬화

자바 시스템 내부/외부 서로 객체 또는 데이터를 공유할 수 있도록
바이트(byte) 형태로 데이터를 변환하고 반대로 다시
바이트 형태의 데이터를 객체 또는 데이터로 변환(역직렬화)하는 기술

Product.java

package dto;

import java.io.Serializable;

/*
 * Serializable : 자바 직렬화
 * 자바 시스템 내부/외부  서로 객체 또는 데이터를 공유할 수 있도록
 * 바이트(byte) 형태로 데이터를 변환하고 반대로 다시
 * 바이트 형태의 데이터를 객체 또는 데이터로 변환(역직렬화)하는 기술
 */
public class Product implements Serializable {
	private static final long serialVersionUID = -427470857203867700L;
	
	//멤버변수
	private String productId; //상품 아이디
	private String pname; //상품명
	private Integer uniPrice; //상품 가격
	private String description; //상품 설명
	private String manufacturer; //제조사
	private String category; //분류
	private long unitsInStock; //재고수
	private String condition; //신상품 or 중고품 or 재생품
	
	private String filename;//이미지 파일명
	


	//기본생성자
	public Product() {
		super();
	}

	//생성자(필수 : mandatory 입력 처리)..(참고..선택:optional)
	public Product(String productId, String pname, Integer uniPrice) {
		this.productId = productId;
		this.pname = pname;
		this.uniPrice = uniPrice;
	}

	//Getter()/Setter()메소드
	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 getUniPrice() {
		return uniPrice;
	}

	public void setUniPrice(Integer uniPrice) {
		this.uniPrice = uniPrice;
	}

	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 getUnitsInStock() {
		return unitsInStock;
	}

	public void setUnitsInStock(long unitsInStock) {
		this.unitsInStock = unitsInStock;
	}

	public String getCondition() {
		return condition;
	}

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

	public static long getSerialversionuid() {
		return serialVersionUID;
	}
	
	public String getFilename() {
		return filename;
	}
	
	public void setFilename(String filename) {
		this.filename = filename;
	}

	@Override
	public String toString() {
		return "Product [productId=" + productId + ", pname=" + pname + ", uniPrice=" + uniPrice + ", description="
				+ description + ", manufacturer=" + manufacturer + ", category=" + category + ", unitsInStock="
				+ unitsInStock + ", condition=" + condition + ", filename=" + filename + "]";
	}
	
	
}

ProductRepository.java

package ch04.com.dao;

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

//자바빈즈로 사용할 상품 데이터 접근 클래스
public class ProductRepository {
	private List<Product> listOfProducts = new ArrayList<Product>();
	
	//싱글톤 패턴 : 객체를 단 한번 만들어 공유해서 사용함
	private static ProductRepository instance = new ProductRepository();
	public static ProductRepository getInstance() {
		return instance;
	}
	
	
	//생성자
	public ProductRepository() {
		Product phone = new Product("P1234", "iPhone 13s", 800000);
		phone.setDescription("4.7-inch, 1334X750 Renina HD display");
		phone.setCategory("Smart Phone");
		phone.setManufacturer("Apple");
		phone.setUnitsInStock(1000);
		phone.setCondition("New");
		phone.setFilename("P1234.jpg");
		
		Product notebook = new Product("P1235", "LG PC 그램", 1500000);
		notebook.setDescription("13.3-inch, IPS LED display, 5th Generation");
		notebook.setCategory("Notebook");
		notebook.setManufacturer("LG");
		notebook.setUnitsInStock(1000);
		notebook.setCondition("Refurbished");
		notebook.setFilename("P1235.jpg");
		
		Product tablet = new Product("P1236", "Galaxy Tab S", 900000);
		tablet.setDescription("212.8*125.6*6.6mm, Super ANOLED display");
		tablet.setCategory("Tablet");
		tablet.setManufacturer("Samsung");
		tablet.setUnitsInStock(1000);
		tablet.setCondition("Old");
		tablet.setFilename("P1236.jpg");
		
		//List<Product> 객체 타입의 변수에 저장
		listOfProducts.add(phone);
		listOfProducts.add(notebook);
		listOfProducts.add(tablet);
	}//end constructor
	
	//객체 타입의 변수 listOfProducts에 저장된 모든 상품 목록을 가져옴
	//select * from prod;
	public List<Product> getAllProducts(){
		return listOfProducts;
	}
	
	//상품 상세정보를 가져오는 메소드
	//select * from prod where prod_id = 'P10100001';
	public Product getProductById(String productId) {
		//선언만...
		Product productById = null;
		//listOfProducts.size() : 3건(phone, notebook, tablet
		//List<Product> listOfProducts
		for(int i=0; i<listOfProducts.size(); i++) {
			Product product = listOfProducts.get(i);
			//등록된 상품이 있어야하고, 상품코드가 있어야하며,
			//그때의 그 상품코드와 매개변수에 담긴 파라미터 상품코드가 같을 때에만 실행
			if(product!=null&&product.getProductId()!=null&&
					product.getProductId().equals(productId)) {
				productById = product;
				break;
			}//end if
		}//end for
		return productById;
	}
	
	//상품 추가
	public void addProduct(Product product) {
		//private List<Product> listOfProducts = new ArrayList<Product>();
		listOfProducts.add(product);
	}
	
}

문제1. forward 액션 태그를 이용하여 처리해보자
1) forward02.jsp 파일 생성

  • 구구단 출력하기

  • forward 액션 태그로 forward02_data.jsp 파일로 이동
  • param 액션 태그로 숫자 5를 forward02_data.jsp 파일로 전달
    2) forward02_data.jsp 파일 생성
  • 전달받은 숫자 5의 구구단 출력

forward02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
	
	<h4>구구단 출력하기</h4>
	<jsp:forward page="forward02_data.jsp">
		<jsp:param name="num" value="5" />
	</jsp:forward>
</body>
</html>

forward02_data.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
	<%
	int num = Integer.parseInt(request.getParameter("num"));
	%>
	<c:set var="i" value="<%=num%>"></c:set>
	<c:forEach var="j" begin="1" end="9" step="1"> 
		${i}*${j}=${i*j}<br>
	</c:forEach>
	
</body>
</html>
  1. 다음 조건에 맞게 개발해보자
    1) src 폴더에 ch04.com.dao 패키지로 GuGuDan 클래스를 생성하여 곱셈을 계산하는 process() 메소드 작성
    2) useBean.jsp 파일 생성
  • useBean 액션 태그에 GuGuDan 클래스를 사용하도록 작성
  • 구구단 출력하기

  • 숫자5에 대해 GuGuDan 클래스의 process() 메소드를 호출하여 구구단 출력

GuGUDan.java

package ch04.com.dao;

public class GuGuDan {
	//곱셈을 계산하는 역할
	public int process(int i, int j) {
		return i * j;
	}

}

useBean.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
	<jsp:useBean id="guGuDan" class="ch04.com.dao.GuGuDan" />
	<h4>구구단 출력하기</h4>
	<c:forEach var="j" begin="1" end="9" step="1">
		5 * ${j} = ${guGuDan.process(5,j)}<br>
	</c:forEach>		
</body>
</html>

0개의 댓글