상세정보를 클릭하면 그 책의 상세 정보를 출력하는 코드 작성
book.jsp 생성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="dto.Book"%>
<%@page import="java.util.ArrayList"%>
<!-- BookRepository객체 생성 -->
<jsp:useBean id="bookDAO" class="dao.BookRepository" scope="session"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>도서 상세 정보</title>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"
/>
</head>
<body>
<%@ include file="menu.jsp"%>
<div class="jumbotron">
<div class="container">
<h1 class="display-4">도서 정보</h1>
</div>
</div>
<%
String id = request.getParameter("id");
Book book = bookDAO.getBookById(id);
%>
<div class="container">
<h4><b>[<%=book.getCategory()%>]<%=book.getName()%></b></h4>
<p><%=book.getDescription()%>
<p><b>도서코드 : </b><span class="badge badge-danger"> <%=book.getBookId()%></span>
<p><b>저자</b> : <%=book.getAuthor()%>
<p><b>출판사</b> : <%=book.getPublisher()%>
<p><b>출판일</b> : <%=book.getReleaseDate()%>
<p><b>총 페이지수</b> : <%=book.getTotalPages()%>
<p><b>재고수</b> : <%=book.getUnitsInStock()%>
<h4><%=book.getUnitPrice()%>원</h4>
<p><a href="#" class="btn btn-info">도서주문 »</a>
<a href="./books.jsp" class="btn btn-secondary">도서목록 »</a>
<hr>
</div>
<%@ include file="footer.jsp"%>
</body>
</html>
dao. BookRepository 수정하기
package dao;
import java.util.ArrayList;
import dto.Book;
public class BookRepository {
private ArrayList<Book> listOfBooks = new ArrayList<Book>();
//dto의 Book import
//모든 책리스트를 리턴하는 메서드
public BookRepository() {
Book html = new Book("ISBN1234", "HTML5+CSS3", 15000);
html.setAuthor("황재호");
html.setCategory("Hello Coding");
html.setCondition("New");
html.setDescription(
"워드나 PPT 문서를 만들 수 있나요? 그러면 문제 없습니다. 지금 바로 웹페이지 제작에 도전해보세요. 지금 당장 컴퓨터가 없어도 괜찮습니다. 코드와 실행 화면이 바로 보여서 눈으로만 읽어도 어떻게 작동하는지 쉽게 파악할 수 있는 것은 기본이고, 중간중간 퀴즈를 추가하여 재미있게 게임하듯 복습할 수 있습니다.");
html.setPublisher("한빛미디어");
html.setReleaseDate("2018/03/02");
html.setTotalPages(288);
html.setUnitsInStock(1000);
Book java = new Book("ISBN1235", "쉽게 배우는 자바 프로그래밍", 27000);
java.setAuthor("우종정");
java.setCategory("IT모바일");
java.setCondition("New");
java.setDescription(
"객체 지향의 핵심과 자바의 현대적 기능을 충실히 다루면서도초보자가 쉽게 학습할 수 있게 구성했습니다. 시각화 도구를 활용한 개념 설명과 군더더기 없는 핵심 코드를 통해 개념과 구현을 한 흐름으로 학습할 수 있습니다. 또한 ‘기초 체력을 다지는 예제 → 셀프 테스트 → 생각을 논리적으로 정리하며 한 단계씩 풀어 가는 도전 과제 → 스토리가 가미된 흥미로운 프로그래밍 문제’ 등을 통해 프로그래밍 실력을 차근차근 끌어올릴 수 있습니다.");
java.setPublisher("한빛아카데미");
java.setReleaseDate("2017/08/02");
java.setTotalPages(692);
java.setUnitsInStock(1000);
Book spring = new Book("ISBN1236", "스프링4 입문", 27000);
spring.setAuthor("하세가와 유이치, 오오노 와타루, 토키 코헤이(권은철, 전민수)");
spring.setCategory("IT모바일");
spring.setCondition("New");
spring.setDescription(
"스프링은 단순히 사용 방법만 익히는 것보다 아키텍처를 어떻게 이해하고 설계하는지가 더 중요합니다. 예제를 복사해 붙여넣는 식으로는 실제 개발에서 스프링을 제대로 활용할 수 없습니다. 이 책에서는 웹 애플리케이션의 기초를 다지고 스프링 코어를 살펴보며 클라우드 네이티브 입문까지 다룹니다. 이제 막 실무에 뛰어든 웹 애플리케이션 초급자나 개발 경험은 있지만 스프링은 사용해본 적 없는 분을 대상으로 가능한 한 쉽게 설명합니다.");
spring.setPublisher("한빛미디어");
spring.setReleaseDate("2017/11/01");
spring.setTotalPages(520);
spring.setUnitsInStock(1000);
listOfBooks.add(html);
listOfBooks.add(java);
listOfBooks.add(spring);
}
//모든 책 리스트를 리턴하는 메소드
public ArrayList<Book> getAllBooks() {
return listOfBooks;
}
//책의 id로 맞는 책을 리턴하다.
public Book getBookById(String bookId) {
Book bookById = null;
for(int i = 0; i<listOfBooks.size();i++) {
Book book = listOfBooks.get(i);
if(book !=null && book.getBookId() !=null && book.getBookId().equals(bookId)) {
bookById = book;
break;
}
}
return bookById;//id가 맞는 책을 리턴한다.
}
}
새로온 도서 등록 페이지 만들기
addBook.jsp 생성
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"
/>
</head>
</head>
<body>
<%@ include file="menu.jsp"%>
<div class="jumbotron">
<div class="container">
<h1 class="display-4">도서 등록</h1>
</div>
</div>
<div class="container">
<form name="newBook" action="./processAddBook.jsp"
class="form-horizontal" method="post">
<div class="form-group row">
<label class="col-sm-2">도서코드</label>
<div class="col-sm-3">
<input type="text" id="bookId" name="bookId" class="form-control">
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">도서명</label>
<div class="col-sm-3">
<input type="text" id="name" name="name" class="form-control">
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">가격</label>
<div class="col-sm-3">
<input type="text" id="unitPrice" name="unitPrice"
class="form-control">
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">저자</label>
<div class="col-sm-3">
<input type="text" name="author" class="form-control">
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">출판사</label>
<div class="col-sm-3">
<input type="text" name="publisher" class="form-control">
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">출판일</label>
<div class="col-sm-3">
<input type="date" name="releaseDate" class="form-control">
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">총페이지 수</label>
<div class="col-sm-3">
<input type="text" name="totalPages" class="form-control">
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">상세정보</label>
<div class="col-sm-5">
<textarea name="description" cols="50" rows="2"
class="form-control" placeholder="100자 이상 적어주세요"></textarea>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">분류</label>
<div class="col-sm-3">
<input type="text" name="category" class="form-control">
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">재고수</label>
<div class="col-sm-3">
<input type="text" id="unitsInStock" name="unitsInStock"
class="form-control">
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">상태</label>
<div class="col-sm-5">
<input type="radio" name="condition" value="New">신규도서
<input type="radio" name="condition" value="Old">중고도서
<input type="radio" name="condition" value="EBook">E-Book
</div>
</div>
<div class="form-group row">
<div class="col-sm-offset-2 col-sm-10 ">
<input type="submit" class="btn btn-primary" value="등록">
</div>
</div>
</form>
</div>
<%@ include file="footer.jsp"%>
</body>
</html>
상세정보
*** textarea: 여러줄의 글자를 작성할 수 있다. cols 길이 rows 높이
등록 버튼 ( submit) 보내면 "./processAddBook.jsp"로 post로 보낸다.
post : 주소창에 파라미터가 보이지 않지만 전달 된다.
한글필터 추가
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
<display-name>BookMarket</display-name>
<welcome-file-list>
<welcome-file>welcome.jsp</welcome-file>
</welcome-file-list>
<!-- 한글설정 필터추가 -->
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 한글설정 END -->
</web-app>
processAddBook.jsp 생성
<%@page import="dto.Book"%>
<%@page import="dao.BookRepository"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean id="bookDAO" class="dao.BookRepository" scope="session" />
<%
String bookId = request.getParameter("bookId");
String name = request.getParameter("name");
String unitPrice = request.getParameter("unitPrice");
String author = request.getParameter("author");
String publisher = request.getParameter("publisher");
String releaseDate = request.getParameter("releaseDate");
String totalPages = request.getParameter("totalPages");
String description = request.getParameter("description");
String category = request.getParameter("category");
String unitsInStock = request.getParameter("unitsInStock");
String condition = request.getParameter("condition");
//파라미터로 넘어오면 다 문자열로 넘어오게된다.
Integer price;//가격을 숫자로 변환
if (unitPrice.isEmpty()) price = 0; //가격이 없을 경우 price= 0이다
else price = Integer.valueOf(unitPrice);//문자열을 숫자로 변환해준다
long stock; //재고수를 숫자로 변환
if (unitsInStock.isEmpty()) stock = 0;
else stock = Long.valueOf(unitsInStock); //문자열을 숫자로 바꿔준다.
long pages;
//도서총페이지수 없으면 0 있으면 정수변환(Long타입)
if (totalPages.isEmpty()) pages = 0;
else pages = Long.valueOf(totalPages);
Book newBook = new Book();
newBook.setBookId(bookId);
newBook.setName(name);
newBook.setUnitPrice(price);//숫자로 변환
newBook.setAuthor(author);
newBook.setPublisher(publisher);
newBook.setReleaseDate(releaseDate);
newBook.setTotalPages(pages);//숫자로 변환
newBook.setDescription(description);
newBook.setCategory(category);
newBook.setUnitsInStock(stock);//숫자로 변환
newBook.setCondition(condition);
bookDAO.addBook(newBook);
//새책을 추가 후 도서목록 페이지로 이동
response.sendRedirect("books.jsp");
%>
BookRepository.java 수정
package dao;
import java.util.ArrayList;
import dto.Book;
public class BookRepository {
private ArrayList<Book> listOfBooks = new ArrayList<Book>();
//dto의 Book import
//모든 책리스트를 리턴하는 메서드
public BookRepository() {
Book html = new Book("ISBN1234", "HTML5+CSS3", 15000);
html.setAuthor("황재호");
html.setCategory("Hello Coding");
html.setCondition("New");
html.setDescription(
"워드나 PPT 문서를 만들 수 있나요? 그러면 문제 없습니다. 지금 바로 웹페이지 제작에 도전해보세요. 지금 당장 컴퓨터가 없어도 괜찮습니다. 코드와 실행 화면이 바로 보여서 눈으로만 읽어도 어떻게 작동하는지 쉽게 파악할 수 있는 것은 기본이고, 중간중간 퀴즈를 추가하여 재미있게 게임하듯 복습할 수 있습니다.");
html.setPublisher("한빛미디어");
html.setReleaseDate("2018/03/02");
html.setTotalPages(288);
html.setUnitsInStock(1000);
Book java = new Book("ISBN1235", "쉽게 배우는 자바 프로그래밍", 27000);
java.setAuthor("우종정");
java.setCategory("IT모바일");
java.setCondition("New");
java.setDescription(
"객체 지향의 핵심과 자바의 현대적 기능을 충실히 다루면서도초보자가 쉽게 학습할 수 있게 구성했습니다. 시각화 도구를 활용한 개념 설명과 군더더기 없는 핵심 코드를 통해 개념과 구현을 한 흐름으로 학습할 수 있습니다. 또한 ‘기초 체력을 다지는 예제 → 셀프 테스트 → 생각을 논리적으로 정리하며 한 단계씩 풀어 가는 도전 과제 → 스토리가 가미된 흥미로운 프로그래밍 문제’ 등을 통해 프로그래밍 실력을 차근차근 끌어올릴 수 있습니다.");
java.setPublisher("한빛아카데미");
java.setReleaseDate("2017/08/02");
java.setTotalPages(692);
java.setUnitsInStock(1000);
Book spring = new Book("ISBN1236", "스프링4 입문", 27000);
spring.setAuthor("하세가와 유이치, 오오노 와타루, 토키 코헤이(권은철, 전민수)");
spring.setCategory("IT모바일");
spring.setCondition("New");
spring.setDescription(
"스프링은 단순히 사용 방법만 익히는 것보다 아키텍처를 어떻게 이해하고 설계하는지가 더 중요합니다. 예제를 복사해 붙여넣는 식으로는 실제 개발에서 스프링을 제대로 활용할 수 없습니다. 이 책에서는 웹 애플리케이션의 기초를 다지고 스프링 코어를 살펴보며 클라우드 네이티브 입문까지 다룹니다. 이제 막 실무에 뛰어든 웹 애플리케이션 초급자나 개발 경험은 있지만 스프링은 사용해본 적 없는 분을 대상으로 가능한 한 쉽게 설명합니다.");
spring.setPublisher("한빛미디어");
spring.setReleaseDate("2017/11/01");
spring.setTotalPages(520);
spring.setUnitsInStock(1000);
listOfBooks.add(html);
listOfBooks.add(java);
listOfBooks.add(spring);
}
//모든 책 리스트를 리턴하는 메소드
public ArrayList<Book> getAllBooks() {
return listOfBooks;
}
//책의 id로 맞는 책을 리턴하다.
public Book getBookById(String bookId) {
Book bookById = null;
for(int i = 0; i<listOfBooks.size();i++) {
Book book = listOfBooks.get(i);
if(book !=null && book.getBookId() !=null && book.getBookId().equals(bookId)) {
bookById = book;
break;
}
}
return bookById;//id가 맞는 책을 리턴한다.
}
//책 하나를 추가 등록하는 메서드
public void addBook(Book book) {
listOfBooks.add(book);
}
}
정보 입력 후 등록 클릭
'BACKEND > Jsp' 카테고리의 다른 글
북마켓 프로젝트 5 (0) | 2023.09.22 |
---|---|
북마켓 프로젝트 4 (0) | 2023.09.22 |
북마켓 프로젝트2 (0) | 2023.09.22 |
북마켓 프로젝트 1 (0) | 2023.09.22 |
브라우저에 데이터 저장하는 Cookies 예제 (0) | 2023.09.20 |