스프링 (31)

반응형

 

내장 객체

 

: JSP 페이지에서 사용할 수 있도록 JSP 컨테이너에 미리 정의된 객체

import문 없이 자유롭게 사용 가능

객체를 생성하지 않고 직접 호출하여 사용

ex) out.print

 

 

 

  • 내장 객체의 9가지 종류
내장 객체 설명
request HTTP 요청 정보 저장
response HTTP의 응답정보(상태정보) 저장
out jsp에 출력할 내용
session 세션 정보 저장
application 웹의 콘텍스트 정보를 저장
(웹 브라우저끼리 정보 공유)
pageContext 페이지끼리의 정보 저장
page 자바 클래스로 JSP 페이지를 나타냄
config 설정 정보 저장
exception 예외 발생 처리

 

알아둬야 하는 객체

 

 

 

request 내장 객체

 

: JSP 페이지에서 가장 많이 사용되는 기본 내장 객체

웹 브라우저 -> 서버의 JSP 페이지로 전달하는 정보를 저장

 

 

 

  • 요청 파라미터 관련 메소드 종류
요청 파라미터 관련 메소드 반환 유형 설명
getParameter(String name) String 파라미터 이름이 name인 값 전달받음
getParameterValues(String name) String[] 파라미터 이름이 name인 값을 배열로 전달받음
getParameterNames() java.util.Enumeration 파라미터 이름과 값을 Enumeration 객체 타입으로 전달받음
getParameterMap() java.util.Map 파라미터 이름과 값을 Map객체 타입으로 전달받음

 

 

 

  • 요청 HTTP 헤더 관련 메소드의 종류
요청 HTTP 헤더 관련 메소드 반환 유형 설명
getHeader(String name) String name의 헤더 값 가져옴
getHeaders(String name) Enumeration name의 헤더 목록을 가져옴
getHeaderNames() Enumeration 모든 헤더 이름을 가져옴
getIntHeader(String name) int name의 헤더 값을 정수로 가져옴
getDateHeader(String name)  long name의 헤더 값을 시간 값으로 가져옴
getCookies() javax.servlet.http.Cookie 모든 쿠키 값 가져옴

 

 

 

request 객체 예시1 (요청 파라미터 관련 메소드)

 

 

request.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Implicit Objexts(내장 객체)</title>
</head>
<body>
	<!-- 폼페이지
	요청 URI : process.jsp
	요청파라미터 : name=개똥이
	요청방식 : post(가려서 보냄)
	-->
	<form action="process.jsp" method="post">
		<!-- 폼데이터 -->
		<p>
			이름 : <input type="text" name="name" />
			<!-- submit : 요청실행 -->
			<input type="submit" value="전송" />
		</p>
	</form>
</body>
</html>

submit 사용 시 name에 있는 값을 파라미터 형태로 보냄.

파라미터는 request 객체에 담겨 페이지를 이동할때 이동됨

 

 

process.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<%
	/*
	요청 URI : process.jsp
	요청파라미터 : name=개똥이 (=> request객체(생명주기 : 동일한 요청)에 들어있음)
	요청방식 : post(가려서 보냄)
	*/
	
	// 한글처리
	request.setCharacterEncoding("UTF-8");
	
	// 요청파라미터 : ?이름1=값1&이름2=값2&이름3=값3
	// name=value 형태
	String name = request.getParameter("name"); // 개똥이
%>

	<!-- 표현문 -->
	<p>이름 : <%=name%></p>
</body>
</html>

 

결과 화면1-1 : 개똥이 전송

 

결과 화면1-2

 

 

 

  • 다중 값 전송

request02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Implicit Objexts(내장 객체)</title>
</head>
<body>
	<!-- 폼페이지
	요청 URI : request02_process.jsp
	요청파라미터 : id=개똥이&passwd=java
	요청방식 : post(가려서 보냄)
	-->
	<form action="request02_process.jsp" method="post">
		<!-- 폼데이터 -->
		<p>아이디 : <input type="text" name="id" /></p>
		<p>비밀번호 : <input type="password" name="passwd" /></p>
		<!-- submit : 요청실행 -->
		<p><input type="submit" value="전송" /></p>
	</form>
</body>
</html>

 

 

request02_process.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<%	// 스크립틀릿
 
	/* 
	요청URI : request02_process.jsp
	요청파라미터 : id=a001&passwd=java
	요청방식 : post(가려서 보냄)
	 */
	 
	request.setCharacterEncoding("UTF-8");

	String id = request.getParameter("id");
	String passwd = request.getParameter("passwd");
%>
	<p>아이디 : <%=id%></p>
	<p>비밀번호 : <%=passwd%></p>
</body>
</html>

 

결과 화면2-1 : id는 a001, passwd는 java로 입력 후 전송

 

결과 화면2-2

 

 

 

  • textarea와 select 사용

request04.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Implicit Objexts(내장 객체)</title>
</head>
<body>
	<!-- 폼페이지 
	   요청URI : request04_process.jsp
	   요청파라미터 : id=a001&passwd=java&regDate=2024-04-01&regTime=11:05&gender=female
	   요청방식 : post(가려서 보냄)
	-->
	<form action="request04_process.jsp" method="post">
		<!-- 폼데이터 -->
		<p>아이디 : <input type="text" name="id" /></p>
		<p>비밀번호 : <input type="password" name="passwd" /></p>
		<p><input type="data" name="regDate" placeholder="가입일" /></p>
		<p><input type="time" name="regTime" placeholder="가입시간" /></p>
		<p>
			<textarea rows="5" cols="30" name="introduce" placeholder="가입인사"></textarea>
		</p>
		<p>
			<select name="gender">
				<option>선택해주세요</option>
				<option value="female">여성</option>
				<option value="male">남성</option>
			</select>
		</p>

		<p><input type="submit" value="전송" /></p>
	</form>
</body>
</html>

 

 

request04_process.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<%	// 스크립틀릿
 
	/* 
	요청URI : request04_process.jsp
	요청파라미터 : id=a001&passwd=java&regDate=2024-04-01&regTime=11:05&gender=female
	요청방식 : post(가려서 보냄)
	 */
	 
	request.setCharacterEncoding("UTF-8");

	String id = request.getParameter("id");
	String passwd = request.getParameter("passwd");
	String regDate = request.getParameter("regDate");
	String regTime = request.getParameter("regTime");
	
	String introduce = request.getParameter("introduce");
	String gender = request.getParameter("gender");
	
%>
	<p>아이디 : <%=id%></p>
	<p>비밀번호 : <%=passwd%></p>
	<p>가입일 : <%=regDate%></p>
	<p>가입시간 : <%=regTime%></p>
	
	<p>가입인사 : <%=introduce%></p>
	<p>성별 : <%=gender%></p>
</body>
</html>

 

결과 화면5 : 전송 후 화면

 

 

 

request 객체 예시2 (HTTP 헤더 관련 메소드)

 

 

=> 헤더에 있는 값도 가져올 수 있음

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<%	// 스크립틀릿
 
	/* 
	요청URI : request02_process.jsp
	요청파라미터 : id=a001&passwd=java
	요청방식 : post(가려서 보냄)
	 */
	 
	request.setCharacterEncoding("UTF-8");

	String id = request.getParameter("id");
	String passwd = request.getParameter("passwd");
	
	// 헤더에 있는 host라는 name에 매핑되어 있는 값 보기
	String hostValue = request.getHeader("host");
	
	//헤더에 있는 accept-language라는 name에 매핑되어있는 값 보기
	String alValue = request.getHeader("accept-language");
%>
	<p>아이디 : <%=id%></p>
	<p>비밀번호 : <%=passwd%></p>
	<p>호스트명 : <%=hostValue%></p>
	<p>설정된 언어 : <%=alValue%></p>
</body>
</html>

 

결과 화면3

 

header 정보 확인

 

body 영역 정보 확인

 

 

 

  • 헤더  관련 메소드 예시2
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<%	// 스크립틀릿
 
	/* 
	요청URI : request02_process.jsp
	요청파라미터 : id=a001&passwd=java
	요청방식 : post(가려서 보냄)
	 */
	 
	request.setCharacterEncoding("UTF-8");

	String id = request.getParameter("id");
	String passwd = request.getParameter("passwd");
	
	// 헤더에 있는 host라는 name에 매핑되어 있는 값 보기
	String hostValue = request.getHeader("host");
	
	//헤더에 있는 accept-language라는 name에 매핑되어있는 값 보기
	String alValue = request.getHeader("accept-language");
%>
	<p>아이디 : <%=id%></p>
	<p>비밀번호 : <%=passwd%></p>
	<p>호스트명 : <%=hostValue%></p>
	<p>설정된 언어 : <%=alValue%></p>
	
<%
	//모든 헤더의 이름을 가져와보자 => 리턴타입 : Enumeration(열거형)
	Enumeration en = request.getHeaderNames();

	// hasMoreElements() : 값이 있을때에만 반복
	while(en.hasMoreElements()) {
		// 현재 헤더 이름을 가져옴(Object(컵) -> String(텀블러)으로 downcasting)
		String headerName = (String)en.nextElement();
		
		// request.getHeader("host"); headerName : host
		String headerValue = request.getHeader(headerName);
		out.print(headerName + " : " + headerValue + "<br />");
	}
%>
</body>
</html>

 

결과 화면6

 

 

 

request 객체 예시3 (웹 브라우저/서버 관련 메소드)

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>요청정보 확인</title>
</head>
<body>
	<p>IP주소 : 				<%=request.getRemoteAddr()%></p>
	<p>요청 파라미터 길이 : 		<%=request.getContentLength()%></p>
	<p>문자 인코딩 : 			<%=request.getCharacterEncoding()%></p>
	<p>콘텐츠 유형(MIME) : 	<%=request.getContentType()%></p>
	<p>요청 프로토콜 : 			<%=request.getProtocol()%></p>
	<p>요청메소드 : 			<%=request.getMethod()%></p>
	<p>요청URI 경로 : 			<%=request.getRequestURI()%></p>
	<p>contextPath : 		<%=request.getContextPath()%></p>
	<p>서버 이름 : 			<%=request.getServerName()%></p>
	<p>서버 포트 번호 : 			<%=request.getServerPort()%></p>
	<p>쿼리스트링(요청파라미터) :	<%=request.getQueryString()%></p>
</body>
</html>

 

결과 화면4-1

 

결과 화면4-2 : 요청파라미터 추가. URL에 값 추가함

 

 

반응형

'스프링' 카테고리의 다른 글

[스프링] 8.5장 과제  (0) 2024.04.01
[스프링] 8장 response 객체  (0) 2024.04.01
[스프링] 6.5장 과제  (0) 2024.04.01
[스프링] 6장 쇼핑몰 시스템  (0) 2024.03.29
[스프링] 5장 디렉티브  (0) 2024.03.28
반응형

 

연습문제 01

 

디렉티브 태그의 세 가지 유형에 대해 간단히 설명하시오.

 

더보기

1. include 디렉티브 태그

JSP 페이지의 특정 영역에 다른 문서를 포함 시킬 때 사용

<%@ include file="파일 위치" %>

 

 

2. page 디렉티브 태그

JSP 페이지의 대한 정보를 설정

<%@ page importj="java.util.Date" %>

 

 

3. taglib 디렉티브 태그

 

 

 

 

 

 

연습문제 02

 

JSP 페이지가 사용할 자바 클래스를 설정하기 위한 page 디렉티브 태그의 속성은 무엇인가?

 

더보기

import

 

 

 

연습문제 03

 

JSP 페이지의 특정 영역에 외부 파일의 내용을 포함하는 디렉티브 태그는 무엇인가?

 

더보기

import

 

 

 

연습문제 04

 

page 디렉티브 태그를 이용하여 다음 조건에 맞게 JSP 애플리케이션을 만들고 실행 결과를 확인하시오.

 

 

더보기

 

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="java.util.Date"%>
<%@ page import="java.lang.Math"%>

<%
	Date date = new Date();
	double sq = Math.pow(5, 2);
%>

<p>현재 날짜 : <%=date%></p>
<p>5의 제곱 : <%=sq%></p>

 

 

 

연습문제 05

 

include 디렉티브 태그를 이용하여 다음 조건에 맞게 JSP 애플리케이션을 만들고 실행 결과를 확인하시오.

 

 

더보기

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"%>

<h4>Hello, Java Server Pages.</h4>

<%@ include file="include.jsp" %>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="java.util.Date"%>

<%
	Date date = new Date();
%>

<p>현재 날짜 : <%=date%></p>

 

 

 

연습문제 06

 

taglib 디렉티브 태그를 이용하여 다음 조건에 맞게 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>Directives Tag</title>
</head>
<body>
<c:forEach var="item" begin="0" end="10">
	<c:if test="${item%2==0}">
		${item}
	</c:if>
</c:forEach>
</body>
</html>

 

 

 

연습문제 07

 

다음 조건에 맞게 도서 웹 쇼핑몰을 위한 웹 애플리케이션을 만들고 실행 결과를 확인하시오.

 

 

더보기

 

menu.jsp 

<%@ page language="java" contentType="text/html; charset=UTF-8"%>

<nav class="navbar navbar-expand navbar-dart bg-dark">
	<div class="container">
		<div class="navbar-header">
			<!-- 요청 URL : /welcome.jsp -->
			<a class="navbar-brand" href="welcome.jsp">Home</a>
		</div>
	</div>
</nav>

 

 

 welcome.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet"
   href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<title></title>
</head>
<body>

<%@ include file="menu.jsp" %>
	
	<%!
		String hea = "도서 웹 쇼핑몰";
	%>
	<div class="jumbotron">
		<div class="container">
			<h1 class="display-3"><%=hea%></h1>
		</div>
	</div>
	
<jsp:include page="footer.jsp" />

 

 

 footer.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%!
	String con = "Welcome to Book Market";
%>

	<div class="container">
		<div class="text-center">
			<h3><%=con%></h3>
		</div>
	</div>
	
	<footer class="container">
		<p>&copy;WebMarket</p>
	</footer>
</body>
</html>

 

 

반응형

'스프링' 카테고리의 다른 글

[스프링] 8장 response 객체  (0) 2024.04.01
[스프링] 7장 내장 객체, request 객체  (0) 2024.04.01
[스프링] 6장 쇼핑몰 시스템  (0) 2024.03.29
[스프링] 5장 디렉티브  (0) 2024.03.28
[스프링] 4.5장 과제  (0) 2024.03.28
반응형

 

사전 준비

 

 

 

  • 테이블 생성
--상품 정보
CREATE TABLE PRODUCT(
    PRODUCT_ID VARCHAR2(10),
    PNAME VARCHAR2(90),
    UNIT_PRICE NUMBER,
    DESCRIPTION VARCHAR2(3000),
    MANUFACTURER VARCHAR2(90),
    CATEGORY VARCHAR2(60),
    UNITS_IN_STOCK NUMBER,
    CONDITION VARCHAR2(60),
    FILENAME VARCHAR2(1000),
    QUANTITY NUMBER,
    CONSTRAINT PK_PRODUCT_ID PRIMARY KEY(PRODUCT_ID)
);

 

설명 기입

 

 

 

  • 편의성을 위해 진행
create or replace FUNCTION FN_GETCAMEL(COLUMN_NAME IN VARCHAR2)
RETURN VARCHAR2
IS
RSLT VARCHAR2(30);
BEGIN
--카멜표기로 변환(SITE_NUM -> siteNum)
SELECT LOWER(SUBSTR(REPLACE(INITCAP(COLUMN_NAME),'_'),1,1))
|| SUBSTR(REPLACE(INITCAP(COLUMN_NAME),'_'),2) INTO RSLT
FROM DUAL;
--리턴
RETURN RSLT;
END;

 

 

하단의 코드의 PC이름 부분 수정 필요. 속성에서 확인 후 이름 변경

 

--구글 카멜변환(https://heavenly-appear.tistory.com/270)
SELECT COLUMN_NAME
, DATA_TYPE
, CASE WHEN DATA_TYPE='NUMBER' THEN 'private int ' || FN_GETCAMEL(COLUMN_NAME) || ';'
WHEN DATA_TYPE IN('VARCHAR2','CHAR') THEN 'private String ' || FN_GETCAMEL(COLUMN_NAME) || ';'
WHEN DATA_TYPE='DATE' THEN 'private Date ' || FN_GETCAMEL(COLUMN_NAME) || ';'
ELSE 'private String ' || FN_GETCAMEL(COLUMN_NAME) || ';'
END AS CAMEL_CASE
, '<result property="'||FN_GETCAMEL(COLUMN_NAME)||'" column="'||COLUMN_NAME||'"/>' RESULTMAP
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = 'PRODUCT'
AND       USER = 'PC이름';

 

결과 화면1

 

 

아래 코드를 입력 시 생성된 후 이름, null 여부, 유형을 쉽게 볼 수 있음

 

desc product;

 

 

 

쇼핑몰 시스템

 

  • 자바빈 클래스가 되기 위한 조건

1. 프로퍼티(멤버변수, 필드)가 있어야 함

2. 기본 생성자(getter/setter 메소드)가 있어야 함

 

 

+기본 생성자 생성 단축키

더보기
1

 

1. Shift + Alt + S > Generate Constructors from Superclass 클릭 > 선택 후 진행

 

위의 방식대로

Getters and Setters 로 getter/setter를 생성할 수 있음

또한 Generate toString() 를 생성할 수 있음

 

 

 

  • VO 생성

ProductVO.java

package kr.or.ddit.vo;

// 자바빈 클래스 : 프로퍼티(멤버변수, 필드), 기본생성자, getter/setter메소드
public class ProductVO {
	// 프로퍼티
	private String productId;		// 상품 아이디
	private String pname;			// 상품 명
	private double unitPrice;		// 상품 가격
	private String description;		// 상품 설명
	private String manufacturer;	// 제조사
	private String category;		// 분류
	private double unitsInStock;	// 재고 수
	private String condition;		// 신상품 or 중고품 or 재생품
	private String filename;		// 이미지 파일명
	private int quantity;			// 상품을 장바구니에 담은 개수
	
	// 기본 생성자
	public ProductVO() {
	}

	// 생성자(상품 아이디, 상품 명, 상품 가격 초기화)
	public ProductVO(String productId, String pname, int unitPrice) {
		this.productId = productId;
		this.pname = pname;
		this.unitPrice = unitPrice;
	}

	// 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 double getUnitPrice() {
		return unitPrice;
	}

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

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

	public String getCondition() {
		return condition;
	}

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

	public String getFilename() {
		return filename;
	}

	public void setFilename(String filename) {
		this.filename = filename;
	}

	public int getQuantity() {
		return quantity;
	}

	public void setQuantity(int quantity) {
		this.quantity = quantity;
	}

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

 

 

DTO와 VO 차이

 

 

 

  • Dao 생성

ProdutRepository.java

package kr.or.ddit.dao;

import java.util.ArrayList;
import java.util.List;

import kr.or.ddit.vo.ProductVO;

public class ProdutRepository {
	// 싱글톤 패턴(공유, 객체가 1회 생성)
	private static ProdutRepository instance = new ProdutRepository();
	public static ProdutRepository getInstance() {return instance;}
	
	//상품 목록을 저장할 리스트 작성(전역변수)
	//인터페이스 : 팀장
	//구현클래스 : 팀원들
	private List<ProductVO> listOfProducts = new ArrayList<ProductVO>();
	
	// 기본 생성자, 3개의 상품 정보를 설정
	private ProdutRepository() {
		// 스마트폰
		ProductVO phone = new ProductVO("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.setUnitsInStock(1000);
		//신상품 or 중고품 or 재생품
		phone.setCondition("New");
		//이미지 파일명
		phone.setFilename("P1234.jpg");
		//-------------------------------스마트폰 등록 끝--------------------------------
		
		//-------------------------------노트북 등록 시작--------------------------------
		ProductVO notebook = new ProductVO("P1235", "LG PC 그램", 1500000);
		
		//상품 설명
	    notebook.setDescription("13.3-inch, IPS LED display, 5rd Generation"
	          + "Intel Core processors");
	    //분류
	    notebook.setCategory("Notebook");
	    //제조사
	    notebook.setManufacturer("LG");
	    //재고 수
	    notebook.setUnitsInStock(1000);
	    //신상품 or 중고품 or 재생품
	    notebook.setCondition("Refurbished");
	    //이미지 파일명
	    notebook.setFilename("P1235.jpg");
		//-------------------------------노트북 등록 끝--------------------------------
	    
	    //-------------------------------태블릿 등록 시작--------------------------------
	    ProductVO tablet = new ProductVO("P1236", "Galaxy Tab S", 900000);
	  
	    //상품 설명
	    tablet.setDescription("212.8*125.6*6.6m, Super AMOLED display, "
	          + "Octa-Core processor");
	    //분류
	    tablet.setCategory("Tablet");
	    //제조사
	    phone.setManufacturer("Samsung");
	    //재고 수
	    tablet.setUnitsInStock(1000);
	    //신상품 or 중고품 or 재생품
	    tablet.setCondition("Old");
	    //이미지 파일명
	    tablet.setFilename("P1236.jpg");
	    //-------------------------------태블릿 등록 끝--------------------------------
	    
	    // VO들이 모여서 VO List가 됨
	    listOfProducts.add(phone);
	    listOfProducts.add(notebook);
	    listOfProducts.add(tablet);
	}
	
	// SELECT * FROM PRODUCT
	// 상품 목록
	public List<ProductVO> getAllProducts(){
		return listOfProducts;
	}
}

 

 

vo 객체 접근 방법

 

 

+ Colletion 종류

 

 

 

  • jsp 생성
<%@page import="kr.or.ddit.vo.ProductVO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="kr.or.ddit.dao.ProductRepository"%>
<%	//스크립틀릿
	//ProductRepository() 생성자
	//기본 생성자. 3개의 상품 정보를 설정. 
	//그런 후  Product 객체 타입의 List인 listOfProducts 변수에 저장 
	//ProductRepository productDAO = new ProductRepository();
	ProductRepository productDAO = ProductRepository.getInstance();
	
	// ProductVO 제네릭 List 타입의 객체로 모든 상품 목록을 할당함
	List<ProductVO> productVOList = productDAO.getAllProducts();
	out.print("<p>productVOList : " + productVOList + "</p>");
%>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>

</body>
</html>

 

결과 화면2

 

 

+ 사용한 파일과 코드

더보기
down.zip
0.77MB

 

js와 css 파일을 따로 WebContent 안에 넣음

 

 

head와 title 사이에 아래 코드 추가

<!-- <link rel="stylesheet" -->
<!--    href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"> -->
<link rel="stylesheet" href="/css/bootstrap.min.css" />

 

 

menu.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<nav class="navbar navbar-expand navbar-dart bg-dark">
	<div class="container">
		<div class="navbar-header">
			<!-- 요청 URL : /welcome.jsp -->
			<a class="navbar-brand" href="welcome.jsp">Home</a>
		</div>
	</div>
</nav>

 

 

footer.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<footer class="container">
	<p>&copy;WebMarket</p>
</footer>

 

 

products.jsp

<%@page import="kr.or.ddit.vo.ProductVO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="kr.or.ddit.dao.ProductRepository"%>
<%	//스크립틀릿
	//ProductRepository() 생성자
	//기본 생성자. 3개의 상품 정보를 설정. 
	//그런 후  Product 객체 타입의 List인 listOfProducts 변수에 저장 
	//ProductRepository productDAO = new ProductRepository();
	ProductRepository productDAO = ProductRepository.getInstance();
	
	// ProductVO 제네릭 List 타입의 객체로 모든 상품 목록을 할당함
	List<ProductVO> productVOList = productDAO.getAllProducts();
	//out.print("<p>productVOList : " + productVOList + "</p>");
%>
<!DOCTYPE html>
<html>
<head>
<!-- <link rel="stylesheet" -->
<!--    href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"> -->
<link rel="stylesheet" href="/css/bootstrap.min.css" />
<title></title>
</head>
<body>
	<!-- include 액션 태그 -->
	<jsp:include page="menu.jsp" />
	
	<div class="jumbotron">
		<div class="container">
			<h1 class="display-3">상품 목록</h1>
		</div>
	</div>
	
	<!-- 상품목록 출력 -->
	<div class="container">
		<div class="row" align="center">
			<%
				//productVOList : ProductVO타입 리스트 변수
				for(ProductVO productVO : productVOList) {
			%>
			<div class="col-md-4"> <!-- 33% 정도의 영역 -->
				<!-- /images/P1234.jpg -->
				<img src="/images/<%=productVO.getFilename()%>" 
					style="width:100%;" alt="<%=productVO.getPname()%>" title="<%=productVO.getPname()%>"/>
				<h3><%=productVO.getPname()%></h3>
				<p><%=productVO.getDescription()%></p>
				<p><%=productVO.getUnitPrice()%></p>
			</div>
			<%
				}
			%>
		</div>
	</div>
	
	<jsp:include page="footer.jsp" />
</body>
</html>

 

결과 화면3

 

 

 

  • => JSTL 로 변경
<%@page import="kr.or.ddit.vo.ProductVO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="kr.or.ddit.dao.ProductRepository"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!-- 페이지 디렉티브 -->  
<%	//스크립틀릿
	ProductRepository productDAO = ProductRepository.getInstance();
	
	List<ProductVO> productVOList = productDAO.getAllProducts();
%>
<!-- java 객체 -> JSTL 변수 -->
<c:set var="productVOList" value="<%=productVOList%>" />
<!DOCTYPE html>
<html>
<head>
<!-- <link rel="stylesheet" -->
<!--    href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"> -->
<link rel="stylesheet" href="/css/bootstrap.min.css" />
<title></title>
</head>
<body>
	<!-- include 액션 태그 -->
	<jsp:include page="menu.jsp" />
	
	<div class="jumbotron">
		<div class="container">
			<h1 class="display-3">상품 목록</h1>
		</div>
	</div>
	
	<!-- 상품목록 출력 -->
	<div class="container">
		<div class="row" align="center">
			<c:forEach var="productVO" items="${productVOList}" varStatus="stat">
			<div class="col-md-4">
				<img src="/images/${productVO.filename}" 
					style="width:100%;" alt="${productVO.pname}" title="${productVO.pname}"/>
				<h3>${productVO.pname}</h3>
				<p>${productVO.description}</p>
				<p>${productVO.unitPrice}</p>
			</div>
			</c:forEach>
		</div>
	</div>
	
	<jsp:include page="footer.jsp" />
</body>
</html>

 

 

반응형

'스프링' 카테고리의 다른 글

[스프링] 7장 내장 객체, request 객체  (0) 2024.04.01
[스프링] 6.5장 과제  (0) 2024.04.01
[스프링] 5장 디렉티브  (0) 2024.03.28
[스프링] 4.5장 과제  (0) 2024.03.28
[스프링] 4장 선언문, 표현문  (0) 2024.03.27
1 ··· 5 6 7 8 9 10 11