1월 19일(1)

SJY0000·2022년 1월 20일
0

JSP, SERVLET and DB연동

목록 보기
12/24

오늘 배운 것

  • 이미지모음 평점 실시간 반영


+ action=rate 와 rating변수를 controller로 이동했다가 rate로 인해 다시 lmage.jsp 페이지 출력 rating변수와 DB의 데이터들을 이용하여 평균 평점을 출력
<!-- dataSource는 context.xml에 있는 name과 같아야함 -->
<!-- transaction 구간을 한번에 처리, 중복 사용을 해도 문제 생기지 않음 -->
<sql:transaction dataSource="jdbc/webshop">
	
	<sql:query var="results" sql="select * from images where id=?">
		<sql:param>${param.image}</sql:param> <!-- ?에 들어갈 변수 -->
	</sql:query>
	
	<c:set var="image" scope="page" value="${results.rows[0]}" /> <!-- 한개만 출력 -->
	<c:set var="picName" scope="page" value="${image.stem}.${image.image_extension}"/>
	<c:set var="average_ranking" scope="page" value="${image.average_ranking}"/>
	
	<!-- action이 "rate"이면 rankings 와 average_ranking을 Update 한다. -->
	<c:if test='${param.action == "rate"}'>
		<c:set scope="page" var="newRating"
		value="${(image.average_ranking * image.rankings + param.rating)/(image.rankings + 1)}" />
		
		<c:set scope="page" var="average_ranking" value="${newRating}" />
	
		<sql:update sql="update images set average_ranking=?, rankings=? where id=?">
			<sql:param>${newRating}</sql:param> <!-- 첫번째 ?에 들어갈 변수 -->
			<sql:param>${image.rankings + 1}</sql:param> <!-- 두번째 ?에 들어갈 변수 -->
			<sql:param>${param.image}</sql:param> <!-- 세번째 ?에 들어갈 변수 -->
		</sql:update>
	</c:if>

</sql:transaction>

0개의 댓글