본문 바로가기

BackEnd/Spring

[코드로 배우는 스프링 웹 프로젝트] java spring 책 상세 화면 만들기

728x90
반응형

1. 책 상세 화면 개요 : 브라우저에 /detail?bookId=1 주소에 접속하면 책 정보 확인 화면을 보여줍니다.

 

2. 책 상세 쿼리 작성


◎ book_SQL.xml에 내용 추가(insert 밑에 추가)
	<!-- 책 상세 쿼리 작성 --> 
	<select id="select_detail" parameterType="hashMap" resultType="hashMap">
		<![CDATA[
			select 
				title,
				category,
				price,
				insert_date
			from
				book
			where
				book_id = #{bookId}		
		]]>
	</select>​


MySQL에서 사용하는 아래의 코드와 동일합니다.

select title, category, price, insert_date from book where book_id = 1;​

 

 

3. 책 상세 DAO 메소드 작성(BookDao 클래스)

@Repository
public class BookDao {
   ...(생략)...
	//책 상세 DAO 메소드 작성
	public Map<String, Object> selectDetail(Map<String, Object> map){
		return this.sqlSessionTemplate.selectOne("book.select_detail", map);
	}
}



BokDao 클래스의 insert 메소드 밑에 추가해줍니다.

 

4. 책 상세 서비스 클래스 메소드 생성(BookService 클래스)

public class BookServiceImpl implements BookService {
	...(생략)...	
	@Override
	public Map<String, Object> detail(Map<String, Object> map){
		return this.bookDao.selectDetail(map);
	}
}


◎ 책 상세 서비스 인터페이스 메소드 시그니쳐 생성
   ▷ detail 부분을 interface에 추가해야합니다.

Map<String, Object> detail(Map<String, Object> map);

 

 

5. 쿼리 스트링 

   ▷ 책 상세 화면의 URI는 /detail?bookId=1 형식, 주소창을 통해 파라미터가 서버로 전달되는 형태를 쿼리 스트링

   ▷ HTTP 규격에서 쿼리 스트링은 UR끝에 ?로 시작. 각 항목은 &로 이어지며, 개별 항목의 키와 값은 =로 구분

 

◎ 쿼리 스트링 예시

/sample/test?a=1&b=2 웹 주소는 아래와 같습니다.

1. URL : /sample/test
2. 쿼리 스트링 : ?a=1&b=2
3. 쿼리 스트링의 시작 : ?
4. 쿼리 스트링의 항목 구분 : &
5. 쿼리 스트링의 항목들 : a=1 ,b=2
6. URI : /sample/test?a=1&b=2

 

 

6. 책 상세 컨트롤러 메소드 추가(BookController.java 클래스)

...(생략)...
	@RequestMapping(value = "/detail", method= RequestMethod.GET)
	public ModelAndView detail(@RequestParam Map<String, Object> map) {
		Map<String, Object> detailMap = this.bookService.detail(map);
		
		ModelAndView mav = new ModelAndView();
		mav.addObject("data", detailMap);
		String bookId = map.get("bookId").toString();
		mav.addObject("bookId", bookId);
		mav.setViewName("/book/detail");
		return mav;
	}
}

 

 

7. 책 상세 뷰 작성

   ▷ src/main/webapp/WEB-INF/views/book/detail.jsp 생성

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<html>
<head>
<title>책 상세</title>
</head>
<body>
	<h1>책 상세</h1>
	<p>제목 : ${ data.title }</p>
	<p>카테고리 : ${ data.category }</p>
	<p>가격 : <fmt:formatNumber type="number" maxFractionDigits="3" value="${ data.price }" /></p>
	<p>입력일 : 
	<fmt:parseDate value="${data.insert_date}" var="dateFmt" pattern="yyyymmdd"/>
	<fmt:formatDate value="${dateFmt}" pattern="yyyy-MM-dd"/></p>
	
	<p> <a href="/update?bookId=${bookId}"> 수정 </a> </p>
	<form method="POST" action="/delete">
		<input type="hidden" name="bookId" value="${bookId}" />
		<input type="submit" value="삭제" />		
	</form>
	<p>
		<a href="/list">목록으로</a>
	</p>
</body>
</html>


위와 같이 코드를 작성해줍니다.

원래 입력일 부분 코드는 아래와 같습니다.

<p>입력일 : <fmt:formatDate value="${ data.insert_date }" pattern="yyyy.MM.dd HH:mm:ss" /></p>

하지만 formatDate 값을 바로 받아오지 못해서 위와 같이 날짜를 받아온 후 변수로 바뀌게 만들었습니다.

 

8. 책 상세 화면 확인하기

서버를 클릭하고 ctrl + alt + d를 눌러 디버깅 모드로 시작, ctrl + alt + s를 눌러 서버 모드로 시작

브라우저에 http://localhost:8080/detail?bookId=1 주소로 접속해서 화면 확인

 


db에 저장된 데이터를 출력할 수 있습니다.

create에서 저장하면 바로 책 상세 페이지로 연동할 수 있습니다.
http://localhost:8080/create

 

detail.jsp파일 생성해 create에서 입력해서 저장하면 detail로 값이 전달되면서 상세 내용이 출력됩니다.

 

데이터 베이스도 연동이 잘되네요!!

 

다음은 책 수정 화면을 만들어 볼게요!!

 

많은 분들의 피드백은 언제나 환영합니다!  많은 댓글 부탁드려요~~

 

 

728x90
반응형