java
dto -> 나중에 vo
여기에 자바빈 클래스
dao (data access object), 데이터에 접근하는 객체
JSP useBean의 scope(생략 시 page가 기본)
기본객체 영역
pageContext page
->(한번의 요청을 처리하는) 하나의 JSP 페이지 내에서 공유될 값을 저장한다.
request request
->한번의 요청을 처리하는 데 사용되는 모든 JSP페이지에서 공유될 값을 저장한다.
sesssion session
->한 사용자와 관련된 정보를 JSP들이 공유하기 위해 사용된다.
application application
->모든 사용자와 관련해서 공유할 정보를 저장한다.
useBean 액션태그와 함께 사용됨
자바빈즈 Setter() 메소드에 접근하여 자바빈즈의 멤버변수인 프로퍼티의 값을 저장
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;
}
}
<%@ 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>
useBean 액션 태그의 id 속성값(person)을 통해
자바빈즈 Person의 프로퍼티 id와 name에 값을 저장하고
자바빈즈 Person의 프로퍼티 id와 값을 가져와 화면 출력함
<%@ 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>
<%@ 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>
자바 시스템 내부/외부 서로 객체 또는 데이터를 공유할 수 있도록
바이트(byte) 형태로 데이터를 변환하고 반대로 다시
바이트 형태의 데이터를 객체 또는 데이터로 변환(역직렬화)하는 기술
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 + "]";
}
}
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 파일 생성
<%@ 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>
<%@ 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>
package ch04.com.dao;
public class GuGuDan {
//곱셈을 계산하는 역할
public int process(int i, int j) {
return i * j;
}
}
<%@ 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>