Spring

28. jsp별찍기(2) - 패스트캠퍼스 백엔드 부트캠프 3기

gkss2tpt 2025. 2. 10. 12:57
  • StarController
package com.fastcampus.ch2;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;

@Controller
public class StarController {
    @ExceptionHandler(Exception.class)
    public String  catcher(Exception e) {
        return "yoilError";
    }

    @RequestMapping("/star")
    public String star(@ModelAttribute("stars") Stars stars, Model model){
        if (stars.getStars() <= 0) {
            // 유효하지 않은 star 값에 대한 예외 처리
            throw new IllegalArgumentException("Invalid star value.");
        }

        return "star";
    }
}
  • Stars
package com.fastcampus.ch2;

public class Stars {
    private int stars;

    public int getStars() {
        return stars;
    }

    public void setStars(int stars) {
        this.stars = stars;
    }

    public String toString(){
        return "[stars=" + stars + "]";
    }
}
  • star.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>별찍기</title>
</head>
<body>
<c:if test="${stars.stars > 0}">
    <p>현재 별 개수: ${stars.stars}</p>
    <c:set var="star" value="${stars.stars}"/>
    <c:set var="count0" value="1"/>
    <c:set var="count1" value="${star}"/>
    <c:set var="count2" value="${1+4*(star-1) - (star-1)}"/>
    <c:set var="count3" value="${1 + 4 *(star-1)}"/>
    <c:forEach var="i" begin="1" end="${star*2-1}">
        <c:forEach var="j" begin="1" end="${1 + 4*(star-1)}">
            <c:choose>
                <c:when test="${i == 1 || i == star*2-1}">
                    <c:if test="${j <= star || j > (1 + 4*(star-1)) - star}">
                        *
                    </c:if>
                    <c:if test="${j%5!=0 && !(j <= star || j > (1 + 4*(star-1)) - star)}">
                        <span style="letter-spacing: 1px;">&nbsp;</span> <!-- 간격을 조정 -->
                    </c:if>
                </c:when>
                <c:when test="${i != 1 && i != star*2-1 && i < star}">
                    <c:if test="${j==count0 || j==count1 || j==count2 || j==count3}">
                        *
                    </c:if>
                    <c:if test="${!(j==count0 || j==count1 || j==count2 || j==count3)}">
                        &nbsp;
                    </c:if>
                </c:when>
                <c:when test="${i != 1 && i != star*2-1 && i >= star}">
                    <c:if test="${j==count0 || j==count1 || j==count2 || j==count3}">
                        *
                    </c:if>
                    <c:if test="${!(j==count0 || j==count1 || j==count2 || j==count3)}">
                        &nbsp;
                    </c:if>
                </c:when>
            </c:choose>
        </c:forEach>
        <c:if test="${i < star}">
            <c:set var="count0" value="${count0+1}"/>
            <c:set var="count1" value="${count1+1}"/>
            <c:set var="count2" value="${count2-1}"/>
            <c:set var="count3" value="${count3-1}"/>
        </c:if>
        <c:if test="${i >= star}">
            <c:set var="count0" value="${count0-1}"/>
            <c:set var="count1" value="${count1-1}"/>
            <c:set var="count2" value="${count2+1}"/>
            <c:set var="count3" value="${count3+1}"/>
        </c:if>
        <br>
    </c:forEach>
</c:if>
<c:if test="${star <= 0}">
    <p>유효하지 않은 별 값입니다.</p>
</c:if>
</body>
</html>