예제 : 점심 메뉴 투표
기능
메뉴를 선택하지 않고 투표하기 버튼을 누르면 로그인하라고 메시지 띄움
투표 결과가 없을 때 결과보기 버튼을 누르면 메시지 출력
투표초기화 버튼을 누르면 투표 결과 초기화
홈 버튼을 누르면 로그인 홈 화면으로 이동
투표 후 다음 투표는 3분 후부터 가능
투표 결과는 막대 그래프와 함께 출력
1_lunchVote.jsp
이후 페이지에서 투표 결과가 없을 경우 vote 파라미터는 n으로 넘어옵니다.
vote_yn이 null이 아니고 n일 경우 message 애트리뷰트를 설정합니다.
최근 3분 내에 투표 기록이 있을 경우 vote 파라미터는 c로 넘어옵니다.
vote_yn이 null이 아니고 c일 경우 message 애트리뷰트를 설정합니다.
2_voteForm.jsp로 요청을 전달합니다.
2_voteForm.jsp
초기 화면입니다.
로그인했다면 화면에 환영 메시지와 로그아웃 버튼을 출력합니다.
메뉴 선택(라디오 버튼)
<fieldset> 태그는 폼 요소들을 그룹으로 묶는 역할을 합니다.
버튼
<div> 태그에 message 애트리뷰트를 출력합니다.
ValidCheck 함수(투표하기 버튼 클릭시 실행)
→ 로그인하지 않았으면 로그인하라는 메시지를 띄우고 로그인 페이지로 이동합니다
→ 메뉴를 선택하지 않았으면 메뉴 선택하라는 메시지를 띄웁니다.
→ 메뉴를 선택했으면 폼을 3_save.jsp로 제출합니다.
3_save.jsp
vote 애트리뷰트를 가져와 Map 타입으로 강제 캐스팅합니다.
vote가 null이라면 TreeMap 객체를 생성하고 메뉴이름은 key, 투표수를 value로 저장합니다.
3분 이내 재투표 방지
쿠키 중에 이름이 CHECK인 쿠키가 없으면 status 값을 0, 존재한다면 1로 합니다.
쿠키 CHECK가 없으면
선택한 메뉴 파라미터를 가져옵니다.
선택한 메뉴를 key로 했을 때 value값을 가져옵니다.
value 값을 1 증가하여 변경합니다.
변경된 vote를 애트리뷰트에 저장합니다.
CHECK 쿠키를 생성하고 유효시간을 3분으로 하여 저장합니다.
5_result.jsp로 새로운 요청을 보냅니다.
쿠키 CHECK가 있으면
1_lunchVote.jsp에 vote 파라미터의 값을 c로 보냅니다.
→ 다음 투표는 3분 후에 할 수 있다는 메시지를 출력합니다.
5_resultView.jsp
결과보기 버튼 클릭 시 화면입니다.
투표 결과가 없으면 1_lunchVote.jsp에 vote 파라미터의 값을 n으로 보냅니다.
→ 투표 후 결과를 확인하라는 메시지를 출력합니다.
total 변수에 반복문으로 entry.value(메뉴당 투표수)를 더하여 총 투표수를 저장합니다.
total 값을 <span> 태그에 출력합니다.
<hr> 태그의 너비 값을 entry.value*20으로 하여 막대 그래프처럼 볼 수 있게 합니다.
6_clear.jsp
투표초기화 버튼 클릭 시 실행됩니다.
쿠키 CHECK 삭제하기
쿠키 중에 이름이 CHECK인 쿠키가 있으면 temp에 저장합니다.
temp가 null이 아니면 유효기간을 0으로 하고 저장합니다.
애트리뷰트 삭제하기
vote 애트리뷰트를 삭제하고 1_lunchVote.jsp로 요청을 전달합니다.
Map.Entry
Map은 순서가 없는 자료구조로 인덱스가 없습니다.
Map.Entry는 key와 value 한 쌍의 항목을 참조하는 타입입니다.
Map을 for문으로 출력할 때 주로 사용합니다.
entrySet( )은 key와 value값을 Set 객체에 저장하여 반환합니다.
geyKey 메소드로 key 값을, getValue 메소드로 value 값을 가져옵니다.
'수업 일지 > JSP' 카테고리의 다른 글
58일차 - [JSP] setTimeout()/쿠키 (0) | 2022.03.31 |
---|---|
57일차 - [JSP] session 객체 (0) | 2022.03.30 |
56일차 - [JSP] mybatis - DAO/taglib 지시자/JSTL (0) | 2022.03.29 |
55일차 - [JSP] 내장 객체/속성/include/EL/빌드 도구/mybatis (0) | 2022.03.28 |
52일차 - [JSP] GET, POST 방식/Lombok (0) | 2022.03.23 |
댓글