-
[JSP] 004. JSP / Servlet 관찰(3)SsY/Class 2023. 5. 18. 18:00728x90
데이터 송수신 실습
- SendAndReceive07
- 만년 달력 (select box)
<%@ page import="java.util.Calendar"%> <%@ page contentType="text/html; charset=UTF-8"%> <% // 이전 페이지(SendAndReceive07_1.jsp)로부터 넘어온 데이터 수신 // → year, month String sYear = request.getParameter("year"); String sMonth = request.getParameter("month"); // Calendar 객체 생성 //java.util.Calendar cal = java.util.Calendar.getInstance(); //-- 자바에서 생성하는 것과 같이 인텔리센스 기능 활용하여 객체 생성 가능 Calendar cal = Calendar.getInstance(); // 현재 년, 월, 일 확인 int nowYear = cal.get(Calendar.YEAR); //-- 2023 int nowMonth = cal.get(Calendar.MONTH)+1; //-- 5 int nowDay = cal.get(Calendar.DAY_OF_MONTH); //-- 18 (당일 -> 캘린더에 다르게 표시 하기 위해) // 표시할 달력의 년, 월 구성 → 페이지 최초 요청을 감안한 코드 int selectYear = nowYear; int selectMonth = nowMonth; // 페이지에 대한 요청이 최초가 아닐 경우 // → line 6 ~ 7 을 통해 수신한 데이터로 표시할 달력의 년, 월 구성 if(sYear != null || sMonth!= null) { selectYear = Integer.parseInt(sYear); selectMonth = Integer.parseInt(sMonth); } // 테스트 //out.print("<h1>selectYear : "+ selectYear+ "</h1>"); //out.print("<h1>selectMonth : "+ selectMonth+ "</h1>"); // 확인한 날짜로 년도 select option 구성========================================== // <option value="2013">2013</option> // : // <option value="2013" selected="selected">2023</option> // : // <option value="2033">2033</option> String yOptions = ""; for (int year=(selectYear-10); year<=(selectYear+10); year++) { // 관찰 1,2 경우 -- 최초 요청 페이지 부분만 구성 // 관찰1 -- 년도 구성 // year 는 실제 구성시 <option value='year'> // "<option value='" + year + "' + year + > // yOptions += "<option value='" + year + "'>" + year + "</option>"; // 관찰2 -- selected 되게 만들기 //if(year==nowYear) // yOptions += "<option value='" + year + "' selected='selected'>" + year + "</option>"; //else // 선택 년도가 아닐때는 그냥 추가 // yOptions += "<option value='" + year + "'>" + year + "</option>"; // 상황1. 페이지 최초 요청일 때 → sYear 는 null / 현재 년도와 옵션이 같을 때 → selected(○) // 상황2. 페이지 최초 요청이 아닐 때 → sYear 는 null 아님 / 선택된 년도와 옵션이 같을 때 → selected(○) // 상황3. 나머지 → selected(Χ) // 관찰3 -- 변경된 요청까지 selected 되게 만들기 if(year==nowYear && sYear == null) yOptions += "<option value='" + year + "' selected='selected'>" + year + "</option>"; else if(year==selectYear && sYear != null) yOptions += "<option value='" + year + "' selected='selected'>" + year + "</option>"; else // 선택 년도가 아닐때는 그냥 추가 yOptions += "<option value='" + year + "'>" + year + "</option>"; } // ==========================================확인한 날짜로 년도 select option 구성 // 확인한 날짜로 월 select option 구성========================================== // <option value='1'>1</option> // : // <option value='5' selected='selected'>5</option> // : // <option value='12'>12</option> String mOptions = ""; for (int month=1; month<=12; month++) { // 상황1. 페이지 최초 요청일 때 → sMonth 는 null / 현재 월과 옵션이 같을 때 → selected(○) // 상황2. 페이지 최초 요청이 아닐 때 → sMonth 는 null 아님 / 선택된 월과 옵션이 같을 때 → selected(○) // 상황3. 나머지 → selected(Χ) // year 관찰 -> 월 구성 if(month==nowMonth && sMonth == null) mOptions += "<option value='" + month + "' selected='selected'>" + month + "</option>"; else if(month==selectMonth && sMonth != null) mOptions += "<option value='" + month + "' selected='selected'>" + month + "</option>"; else // 선택 년도가 아닐때는 그냥 추가 mOptions += "<option value='" + month + "'>" + month + "</option>"; } // ==========================================확인한 날짜로 월 select option 구성 // 그려야 할 달력의 1일이 무슨 요일인지 확인 필요 // 만년달력 int[] months = {31,28,31,30,31,30,31,31,30,31,30,31}; if(selectYear%4==0&&selectYear%100!=0||selectYear%400==0) months[1] = 29; // 총 날 수 누적 변수 int nalsu; // 요일 항목 배열 구성 String[] weekNames = {"일","월","화","수","목","금","토"}; // 현재 년도 → 입력 받은 년도 이전 년도 가지 날 수 계산 nalsu = (selectYear-1)*365 + (selectYear-1)/4 - (selectYear-1)/100 + (selectYear-1)/400; // 현재 월 → 입력받은 월 이전 월까지의 날 수 계산 for (int i=0; i<selectMonth-1; i++) nalsu += months[i]; nalsu++; // 해당월 1일 int week = nalsu%7; //요일변수 int lastDay = months[selectMonth-1]; //마지막 날짜 변수 // 달력그리기------------------------------------------------------------- String calStr = ""; calStr += "<table border='1'>"; // 요일 이름 발생 calStr += "<tr>"; for(int i=0; i<weekNames.length; i++) { //calStr += "<th>" + weekNames[i] + "</th>"; // 요일에 스타일 추가를 위해 분기 if(i==0) calStr += "<th style='color:red;'>" + weekNames[i] + "</th>"; else if(i==6) calStr += "<th style='color:blue;'>" + weekNames[i] + "</th>"; else calStr += "<th>" + weekNames[i] + "</th>"; } calStr += "</tr>"; // 빈 칸 공백 td 발생 calStr += "<tr>"; for (int i=1; i<=week; i++) calStr += "<td></td>"; // 날짜 td 발생 for (int i=1; i<=lastDay; i++) { week++; //-- 날짜가 하루씩 찍힐 때 마다(구성이 이루어질 때 마다) // 요일도 함께 1씩 증가할 수 있도록 처리 //calStr += "<td>" + i + "</td>"; if(selectYear==nowYear && selectMonth==nowMonth && i==nowDay && week%7==0) // 토요일인 오늘 calStr += "<td class='nowSat'>" + i + "</td>"; else if(selectYear==nowYear && selectMonth==nowMonth && i==nowDay && week%7==1) // 일요일인 오늘 calStr += "<td class='nowSun'>" + i + "</td>"; else if(selectYear==nowYear && selectMonth==nowMonth && i==nowDay) // 평일인 오늘 calStr += "<td class='now'>" + i + "</td>"; else if(week%7==0) //오늘이 아닌 토요일 calStr += "<td class='sat'>" + i + "</td>"; else if(week%7==1) // 오늘이 아닌 일요일 calStr += "<td class='sun'>" + i + "</td>"; else // 오늘이 아닌 평일 calStr += "<td>" + i + "</td>"; if(week%7==0) calStr += "</tr><tr>"; } // 빈 칸 공백 td 발생 for(int i=0; i<=week; i++, week++) { if(week%7==0) break; calStr += "<td></td>"; } if(week%7!=0) calStr += "</tr>"; calStr += "</table>"; // -------------------------------------------------------------달력그리기 %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>SendAndReceive07_1.jsp</title> <link rel="stylesheet" type="text/css" href="css/main.css"> <style type="text/css"> td {text-align : right;} td.sat{color: blue;} td.sun{color: red;} td.now{background-color: aqua; font-weight: bold;} td.nowSat{background-color: aqua; font-weight: bold; color: blue;} td.nowSun{background-color: aqua; font-weight: bold; color: red;} </style> <script type="text/javascript"> function formCalendar(obj) { //유효성 검사가 필요할 경우 삽입 obj.submit(); } </script> </head> <body> <div> <h1>데이터 송수신 실습 07</h1> <hr> </div> <div> <!-- ○ 데이터 송수신 실습 07 - 달력을 출력하는 JSP 페이지를 구성한다. - 연도와 월을 선택받아 화면에 출력해주는 형태의 페이지로 구현한다. - 단, submit 버튼 없이 이벤트 처리를 할 수 있도록 한다. - 현재 페이지에서 전송한 내용을 현재 페이지에서 수신해서 출력해주는 형태의 페이지로 구성한다. 2013 : [ 2023 ▼ ] 년 [ 5 ▼ ] 월 : 2033 ----------------------------- ----------------------------- ----------------------------- ← 달력 ----------------------------- ----------------------------- - 연도 구성은 현재의 연도를 기준으로 이전 10년, 이후 10년으로 구성한다. (기본적으로 만년달력을 구성하는데... 현재의 연, 월 은 달력 객체로부터 확인할 수 있도록 처리한다.) - 월 구성은 1월 부터 12월 까지로 구성한다. - 연도 select 나 월 select 의 내용이 변화되면 해당 연 월의 달력을 출력해주는 형태의 페이지로 구성한다. - 사용자 최초 요청 주소 http://localhost:8090/WebApp07/SendAndReceive07.jsp ○ 물리적 파일 구성 - SendAndReceive07.jsp --> </div> <div> <!-- form 의 action 속성 값 생략 → 요청 페이지 / 데이터 수신처는 자기 자신 --> <form action="" method="post"> <select id="year" name="year" onchange=formCalendar(this.form)> <!-- <option value="9999">9999</option> --> <%=yOptions %> </select> 년 <select id="month" name="month" onchange=formCalendar(this.form)> <!-- <option value="99">99</option> --> <%=mOptions %> </select> 월 </form> </div> <br> <div> <!-- 달력을 그리게 될 지점 --> <%=calStr %> </div> </body> </html>
더보기<%@ page import="java.util.Calendar"%> <%@ page contentType="text/html; charset=UTF-8"%> <% String year = request.getParameter("years"); String month = request.getParameter("months"); // Calendar 객체 생성 Calendar cal = Calendar.getInstance(); // 현재 연 월 가져오기 int nYear = cal.get(Calendar.YEAR); int nMonth = cal.get(Calendar.MONTH) + 1; // 선택한 연 월 -- 최초에는 선택하지 않았으므로 바로 값 넣기 int sYear = nYear; int sMonth = nMonth; if(year!=null || month!=null) { sYear = Integer.parseInt(year); sMonth = Integer.parseInt(month); } // year 선택 옵션 담기 String optionY = ""; for(int y=(sYear-10); y<=(sYear+10); y++) { if(year==null && y==nYear) optionY += "<option value="+y+" selected=\"selected\">" + y +"</option>"; else if(year!=null && y==sYear) optionY += "<option value="+y+" selected=\"selected\">"+ y +"</option>"; else optionY += "<option value="+y+">" + y +"</option>"; } // month 선택 옵션 담기 String optionM = ""; for(int m=1; m<=12; m++) { if(month==null && m==nMonth) optionM += "<option value="+m+" selected=\"selected\">" + m +"</option>"; else if(month!=null && m==sMonth) optionM += "<option value="+m+" selected=\"selected\">"+ m +"</option>"; else optionM += "<option value="+m+">"+m+"</option>"; } // 달력 그리기 // 월 마지막 날 배열 int[] days={31,28,31,30,31,30,31,31,30,31,30,31}; if(sYear%4==0&&sYear%100!=0||sYear%400==0) days[1]=29; // 받아온 연 월 (sYear, sMonth) -> 날 수 구하기 int nalsu =0; // 전년도 12월 31일까지 날 누적 nalsu = (365*(sYear-1))+((sYear-1)/4)-((sYear-1)/100)+((sYear-1)/400); // 전월 마지막 날까지 누적 for(int i=0; i<(sMonth-1); i++) nalsu += days[i]; // 받아온 연 월 첫 날 nalsu += 1; // 요일 구하기 int week = nalsu%7; int lastday = days[sMonth-1]; // 달력 String calStr = ""; calStr += "<table class='calTbl' style='padding: 20px; background-color: #b1ebfa; border-radius: 10px;'>"; calStr += "<tr><th style=\"color:red\">일</th><th>월</th><th>화</th><th>수</th><th>목</th><th>금</th><th style=\"color:blue\">토</th></tr>"; calStr += "<tr>"; //공백 for(int i=0; i<week; i++) calStr+="<td></td>"; // 1~마지막 날 int j=0; for(j=1; j<=lastday; j++) { calStr += "<td>"+ j +"</td>"; if((week+j)%7==0) calStr += "</tr><tr>"; } //공백-- 최대 6개 발생 for(int k=0; k<6; k++, week++) { calStr += "<td></td>"; if((week+j)%7==0) calStr += "</tr>"; } calStr += "</table>"; %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>SendAndReceive07.jsp</title> <link rel="stylesheet" type="text/css" href="css/greyBlue.css"> <script type="text/javascript"> function submitForm(obj) { obj.submit(); } </script> </head> <body> <div> <h1>데이터 송수신 실습 07</h1> <hr> </div> <div> <!-- ○ 데이터 송수신 실습 07 - 달력을 출력하는 JSP 페이지를 구성한다. - 연도와 월을 선택받아 화면에 출력해주는 형태의 페이지로 구현한다. - 단, submit 버튼 없이 이벤트 처리를 할 수 있도록 한다. - 현재 페이지에서 전송한 내용을 현재 페이지에서 수신해서 출력해주는 형태의 페이지로 구성한다. 2013 : [ 2023 ▼ ] 년 [ 5 ▼ ] 월 : 2033 ----------------------------- ----------------------------- ----------------------------- ← 달력 ----------------------------- ----------------------------- - 연도 구성은 현재의 연도를 기준으로 이전 10년, 이후 10년으로 구성한다. (기본적으로 만년달력을 구성하는데... 현재의 연, 월 은 달력 객체로부터 확인할 수 있도록 처리한다.) - 월 구성은 1월 부터 12월 까지로 구성한다. - 연도 select 나 월 select 의 내용이 변화되면 해당 연 월의 달력을 출력해주는 형태의 페이지로 구성한다. - 사용자 최초 요청 주소 http://localhost:8090/WebApp07/SendAndReceive07.jsp ○ 물리적 파일 구성 - SendAndReceive07.jsp --> </div> <form method="post"> <div> <select id="years" name="years" onchange="submitForm(this.form)"> <%=optionY %> </select> 년 <select id="months" name="months" onchange="submitForm(this.form)"> <%=optionM %> </select> 월 </div> <br> </form> <div> <img src="images/runJB.gif"><br> <span style="color:#16b3d3; font-weight:bold;">달력 열심히 만드는 중...!<br>시켜만 주십쇼!</span> <br><br> <div> <%=calStr %> </div> </div> </body> </html>
- SendAndReceive08
- 만년달력 (<a> , a태그)
<%@page import="java.util.Calendar"%> <%@ page contentType="text/html; charset=UTF-8"%> <%! int selectYear; int selectMonth; %> <% String before = request.getParameter("before"); String after = request.getParameter("after"); //out.print(before); //out.print(after); Calendar cal = Calendar.getInstance(); int nYear = cal.get(Calendar.YEAR); int nMonth = cal.get(Calendar.MONTH)+1; if(before==null && after==null) { selectYear = nYear; selectMonth = nMonth; } if(before!=null) { selectMonth -= 1; if(selectMonth==0) { selectMonth = 12; selectYear -=1; } } if(after!=null) { selectMonth += 1; if(selectMonth==13) { selectMonth = 1; selectYear +=1; } } // 달력 준비 int[] month = {31,28,31,30,31,30,31,31,30,31,30,31}; String[] date = {"일","월","화","수","목","금","토"}; if (selectYear%4==0 && selectYear%100!=0 || selectYear%400==0) month[1]=29; int nalsu = 0; nalsu = (selectYear-1)*365 + (selectYear-1)/4 - (selectYear-1)/100 + (selectYear-1)/400; for (int i=0; i<(selectMonth-1); i++) nalsu += month[i]; nalsu++; int yoil = nalsu%7; int lastDay = month[selectMonth-1]; // 달력 그리기 String calStr =""; calStr += "<table style='margin: auto; width:300px; background-color: #f1f1f1; padding: 20px; border-radius: 10px;text-align: right;'>"; calStr += "<tr>"; //-- 일 ~ 월 for(int i=0; i<date.length; i++) { if(i==0) calStr += "<th style='color: red'>"+ date[i] + "</th>"; else if(i==6) calStr += "<th style='color: blue'>"+ date[i] + "</th>"; else calStr += "<th>" + date[i] + "</th>"; } calStr += "</tr><tr>"; //-- 칸에 맞춰 날 그리기 for(int i=0; i<yoil; i++) calStr += "<td></td>"; for(int i=1; i<=lastDay; i++) { yoil++; if(yoil%7==0) { calStr += "<td style='color: blue'>"+ i +"</td>"; calStr += "</tr><tr>"; } else if(yoil%7==1) calStr += "<td style='color: red'>"+ i +"</td>"; else calStr += "<td>" + i + "</td>"; } for(int i=0; i<=yoil; i++, yoil++) { if(yoil%7==0) break; calStr += "<td></td>"; } if(yoil%7!=0) calStr += "</tr>"; calStr += "</table>"; %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>SendAndReceive08.jsp</title> <style type="text/css"> * {text-align: center;} a {text-decoration : none;} </style> </head> <body> <div> <h1>데이터 송수신 실습 08</h1> <hr> </div> <div> <!-- ○ 데이터 송수신 실습 08 - 달력을 출력하는 JSP 페이지를 구성한다. - 연도와 월을 선택받아 화면에 출력해주는 형태의 페이지로 구현한다. - 단, submit 버튼 없이 이벤트 처리를 할 수 있도록 한다. - 현재 페이지에서 전송한 내용을 현재 페이지에서 수신해서 출력해주는 형태의 페이지로 구성한다. <a> <a> ↓ ↓ ◀ 2023년 5월 ▶ --------------- --------------- --------------- ← 해당 년, 월의 달력 --------------- --------------- - ◀ 나 ▶ 클릭 시 해당 년 월의 달력을 출력해주는 형태의 페이지로 구현한다. - 사용자 최초 요청 주소 http://localhost:8090/WebApp07/WebContent/SendAndReceive08.jsp ○ 물리적 파일 구성 - SendAndReceive08.jsp --> </div> <div> <form action="" id="form" method="get"> <!-- 년 월은 유동적으로 구성되어야함 --> <a href='?before=before' name="before" id="before">◀</a> <!-- 몇 년 몇 월인지 들어가야함 --> <%=selectYear %> 년 <%=selectMonth %> 월 <a href='?after=after' name="after" id="after ">▶</a> </form> </div> <br> <div> <!-- 달력 구성 --> <%=calStr %> </div> </body> </html>
※ 데이터 송수신 실습 01~06 : html -> jsp
" 07~08 : jsp (자기 자신에게 데이터 송신)
" 09~ : jsp -> jsp // 동적인 페이지 구성
- Send09 & Receive09
<%@ page contentType="text/html; charset=UTF-8"%> <% String result = ""; result += "<ul>"; for (int i=1; i<=9; i++) { /* -- 내 풀이 result += String.format("<a href='Receive09.jsp?dan=%d'><li>%d단</li><a>", i, i); */ // 링크 걸기 //result += String.format("<li><a href=''>%d단<a></li>", i); // 요청페이지?이름=값 을 넘길 수 있다. -- 이때의 이름은 넘기는 페이지에서 값을 불러오는데 사용 //result += String.format("<li><a href='Receive09.jsp?gugudan=%d'>%d단<a></li>", i, i); // ※ System.out.printf("%3$d 와 %2$d 와 %1$d", 10, 20 , 30) --> 30와 20와 10 처럼 // -- 원하는 순서대로 값을 넣을 수 있다. result += String.format("<li><a href='Receive09.jsp?gugudan=%1$d'>%1$d단<a></li>", i); } result += "</ul>"; %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Send09.jsp</title> <link rel="stylesheet" type="text/css" href="css/main.css"> <style type="text/css"> a {text-decoration: none;} </style> </head> <body> <div> <h1>데이터 송수신 실습 09</h1> <hr> </div> <div> <!-- ○ 데이터 송수신 실습 09 - a 태그(링크 태그)에 대한 반복문 처리를 하는 JSP 페이지를 구성한다. - 이를 활용하여 구구단 리스트를 동적으로 구성하여 선택에 따른 결과 페이지를 출력해주는 형태의 페이지(→ Receive09.jsp)로 구현한다. - submit 버튼 없이 이벤트 처리를 할 수 있도록 한다. 구구단 선택 1단 ← 목록 구성 2단 : 8단 9단 - 페이지를 구성하고 있는 목록의 특정 단을 선택(클릭)했을 때 해당 단의 구구단을 출력해주는 형태의 페이지로 구현한다. - 사용자 최초 요청 주소 http://localhost:8090/WebApp07/Send09.jsp ○ 물리적 파일 구성 - Send09.jsp - Receive09.jsp --> </div> <h2>구구단 선택</h2> <%=result %> <div> </div> </body> </html>
<%@ page contentType="text/html; charset=UTF-8"%> <%-- <% // 내 풀이 String danStr = request.getParameter("dan"); //out.print(dan); int dan=0; String result = ""; try { dan = Integer.parseInt(danStr); for(int i=1; i<=9; i++) { result += dan + " * " + i + " = " + (dan*i) + "<br>"; } } catch(Exception e) { System.out.println(e.toString()); } %> --%> <% // 이전 페이지(Send09.jsp) 로부터 데이터 수신 // → gugudan String gugudanStr = request.getParameter("gugudan"); int gugudan = 0; String result = ""; try { gugudan = Integer.parseInt(gugudanStr); for(int i=1; i<=9; i++) { result += String.format("%d * %d = %d<br>", gugudan, i , (gugudan*i)); } } catch(Exception e) { System.out.println(e.toString()); } %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Receive09.jsp</title> <link rel="stylesheet" type="text/css" href="css/main.css"> </head> <body> <div> <h1>데이터 송수신 실습 09</h1> <hr> </div> <div> <h2>수신된 데이터 : <%=gugudanStr %></h2> <%=result %> </div> </body> </html>
728x90'SsY > Class' 카테고리의 다른 글
[JSP] 005. Emmet(에밋) , 데이터베이스 연결 및 데이터 처리 (0) 2023.05.22 [JSP] 004. 포워딩과 리다이렉트 (0) 2023.05.22 [JSP] 003. JSP / Servlet 관찰(2) (0) 2023.05.18 [JSP] 002. JSP / Servlet 관찰 (1) 2023.05.16 [JSP] 001. 웹 어플리케이션 / JSP + Servlet 개념 및 구조 및 관찰 (0) 2023.05.15 - SendAndReceive07