문제) 임의의 수를 입력 받아서 3의 배수, 4의 배수로 구분해서 출력.


실행 예)

임의의 정수(3 또는 4의 배수) [3  ] [결과]


입력받은 숫자 : 3

구분 : 3의 배수



//Send_Receive07.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<%


String number = request.getParameter("number");


StringBuilder str = new StringBuilder();

if (number != null) {

int numInt = Integer.parseInt(number);

str.append(String.format("입력받은 숫자 : %s<br>구분 : ", number));

String numStr = "3또는 4의 배수가 아닌 수";

if (numInt%3 == 0) {

numStr = "3의 배수";

}

if (numInt%4 == 0) {

numStr = "4의 배수";

}

if (numInt%12 == 0) {

numStr = "3과 4의 공배수";

}

str.append(numStr);

}

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

<script type="text/javascript">


function myFunc(obj) {

var num = document.getElementById("number");

var msg = document.getElementById("msg");

var msg1 = document.getElementById("msg1");


msg.style.display = "none";

msg1.style.display = "none";

if (num.value.match(/[^0-9]/)) {

msg.style.display = "inline";

num.value = "";

num.focus();

} else if (num.value == "") {

msg1.style.display = "inline";

num.value = "";

num.focus();

} else {

obj.form.submit();

}

}


</script>

</head>

<body>

<div>

<h2>데이터 송수신 테스트</h2>

<form method="post">

임의의 정수(3 또는 4의 배수) <input type="text" style="width:80px;" name="number" id="number">

<input type="button" value="결과" onclick="myFunc(this)"><br>

<span id="msg" style="color:red; display:none;">숫자만 입력하세요</span>

<span id="msg1" style="color:red; display:none;">항목을 입력하세요</span>

</form>

<h3>출력----------------------</h3>

<div><%=str%></div>

</div>

</body>

</html>







문제) 국어, 영어, 수학 점수를 입력 받아서 판정 결과 출력. JSP 이용.

판정 기준은

합격 -> 과목별로 40점 이상이면서, 평균이 60점 이상

과락 -> 과목중에 40점 미만이 있고, 평균은 60점 이상

불합격 -> 평균이 60점 미만


평균이 60점 이상 -> 합격

평균이 60점 미만 -> 불합격


합격 또는 과락 구분은 -> 국어, 영어, 수학 점수가 모두 40점 이상인 확인.


실행 예)

국어(0~100) [XX  ]

영어(0~100) [YY  ]

수학(0~100) [ZZ  ]

[ 결과 ]


입력받은 점수 : 국어 XX, 영어 YY, 수학 ZZ

판정 결과 : 합격


//Send_Receive08.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<%


String korData = request.getParameter("kor");

String engData = request.getParameter("eng");

String matData = request.getParameter("mat");


StringBuilder str = new StringBuilder();

if (korData != null) {

int korInt = Integer.parseInt(korData);

int engInt = Integer.parseInt(engData);

int matInt = Integer.parseInt(matData);

str.append(String.format("입력받은 점수 : 국어 %s, 영어 %s, 수학 %s<br>판정 결과 : ", korData, engData, matData));

String msg = "불합격";

                

        double avg = (korInt + engInt + matInt) / 3.0;

        

        if (avg>=60) {

            if (korInt>=40 && engInt>=40 && matInt>=40) {

                msg = "합격";

            } else {

                msg = "과락";

            }

        }        

        str.append(msg);

}


%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

<script type="text/javascript">


function myFunc(obj) {

var kor = document.getElementById("kor");

var eng = document.getElementById("eng");

var mat = document.getElementById("mat");

var korVal = parseInt(kor.value);

var engVal = parseInt(eng.value);

var matVal = parseInt(mat.value);

var msg1 = document.getElementById("msg1");

var msg2 = document.getElementById("msg2");

msg1.style.display = "none";

msg2.style.display = "none";

//숫자 검사 - 음수도 걸러짐

if (kor.value.match(/[^0-9]/)) {

msg2.style.display = "inline";

kor.value = "";

kor.focus();

return;

}

if (eng.value.match(/[^0-9]/)) {

msg2.style.display = "inline";

eng.value = "";

eng.focus();

return;

}

if (mat.value.match(/[^0-9]/)) {

msg2.style.display = "inline";

mat.value = "";

mat.focus();

return;

}

//범위 및 빈칸 검사

if (kor.value == "" || korVal > 100) {

msg1.style.display = "inline";

kor.value = "";

kor.focus();

return;

}

if (eng.value == "" || engVal > 100) {

msg1.style.display = "inline";

eng.focus();

return;

}

if (mat.value == "" || matVal > 100) {

msg1.style.display = "inline";

mat.focus();

return;

}

obj.form.submit();

}


</script>

</head>

<body>

<div>

<h2>데이터 송수신 테스트</h2>

<form method="post">

국어(0~100) <input type="text" style="width:80px" name="kor" id="kor"><br>

영어(0~100) <input type="text" style="width:80px" name="eng" id="eng"><br>

수학(0~100) <input type="text" style="width:80px" name="mat" id="mat"><br>

<input type="button" value="결과" onclick="myFunc(this)"><br>

<span id="msg1" style="color:red; display:none;">모든 항목을 입력해야 합니다.</span>

<span id="msg2" style="color:red; display:none;">0~100사이의 숫자만 입력하세요.</span>

</form>

<h3>출력----------------------</h3>

<div><%=str%></div>

</div>

</body>

</html>






문제) 만년달력. JSP 이용.


//Send_Receive09.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<%@ page import="java.util.*" %>

<%


String syear = request.getParameter("year");

String smonth = request.getParameter("month");


StringBuilder yearLists = new StringBuilder();

StringBuilder monthLists = new StringBuilder();

//현재 년도를 얻은 후 +10, -10년 정도를 <option> 태그에 등록

Calendar calendar = new GregorianCalendar();

int cyear = calendar.get(Calendar.YEAR);

int cmonth = calendar.get(Calendar.MONTH) + 1;

//전달받은 년도, 월이 없는 경우 현재 년도, 월로 셋팅

if (syear == null && smonth == null) {

syear = String.valueOf(cyear);

smonth = String.valueOf(cmonth);

}

//전달 받는 년도, 월을 정수형으로 형 변환

int iyear = Integer.parseInt(syear);

int imonth = Integer.parseInt(smonth);

for (int a=(cyear-10) ; a<=(cyear+10) ; a++) {

if (a == iyear) {

yearLists.append(String.format("<option value=\"%d\" selected=\"selected\">%d</option>", a, a));

} else {

yearLists.append(String.format("<option value=\"%d\">%d</option>", a, a));

}

}

for (int a=1; a<=12; a++) {

if (a == imonth) {

monthLists.append(String.format("<option value=\"%d\" selected=\"selected\">%d</option>", a, a));

} else {

monthLists.append(String.format("<option value=\"%d\">%d</option>", a, a));

}

}

//만년달력 생성 과정 추가

int total = (iyear-1)*365 + ((iyear-1)/4 - (iyear-1)/100 + (iyear-1)/400);

int[] m = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

for (int a=0; a<imonth-1; a++) {

total += m[a];

}

//올해가 윤년이면서 2월 이상인 경우 +1

if (imonth>=3 && (iyear%4==0 && iyear%100!=0 || iyear%400==0)) {

total++;

}

//특정 일까지의 날짜수 더하기

total += 1;

//요일 계산

int week = total%7; //0 일요일, 1 월요일, 2 화요일, ...


//해당 월의 마지막 날짜 구하기

int lastDay = m[imonth-1];

if (imonth==2 && (iyear%4==0 && iyear%100!=0 || iyear%400==0)) {

lastDay = 29;

}

//요일, 마지막 날짜를 얻은 후 달력 출력.

/* StringBuilder sb = new StringBuilder();

sb.append(String.format("----- %d년 %d월 -----<br>", iyear, imonth));

sb.append(String.format(" 일 월 화 수 목 금 토<br>"));

for (int count=1; count<=week; count++) {

sb.append(String.format("%s", ""));

}

for (int day=1; day<=lastDay; day++) {

sb.append(String.format("%d", day));

if ((day+week)%7 == 0) {

sb.append(String.format("<br>"));

}

} */

//테이블 태그를 포함한 결과 출력


String str = "";

str += "<table><tbody>";

str += "<tr><th>일</th><th>월</th><th>화</th><th>수</th><th>목</th><th>금</th><th>토</th></tr>";

str += "<tr>";

//해당월 1일의 특정 요일에 해당하는 빈 칸 출력

for (int a=1; a<=week; a++) {

str += "<td></td>";

}

//해당월 1일부터 마지막 날까지 출력

for(int a=1; a<=lastDay; a++) {

str += "<td style=\"text-align:center\">"+a+"</td>";

//일주일 단위로 행 변경

if (((a+week)%7)==0) {

str += "</tr><tr>";

}

}

str += "</tr></tbody></table>";

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

<script type="text/javascript">

function myFunc(obj) {

obj.form.submit();

}

</script>

</head>

<body>

<div>

<h2>만년달력 출력</h2>

<form method="get">

년 <select name="year" id="year" onchange="myFunc(this)"><%=yearLists%></select>

월 <select name="month" id="month" onchange="myFunc(this)"><%=monthLists%></select>

</form>

<h3>출력 ---------------</h3>

<div><%=str%></div>

</div>

</body>

</html>






POST, GET 전송 방식



1. 클라이언트가 서버에 데이터를 전송하는 방식. 2가지.

 - 인코딩 방식이 다름.


2. POST 방식 특성

- 주소 요청시 헤더 부분에 데이터를 포함해서 전송하는 방식.

- 대용량 데이터 전송 가능

- 전송되는 데이터가 외부에 노출되지 않는다.

- 편지와 같은 특성을 가진다.

- 중요한 정보는 POST 방식으로 전송하는 것이 안전함.

- 한글 전송시 POST 방식으로 보내는 것이 안전함.

- 특수문자가 포함된 문자열 전송시 POST 방식으로 전송하는 것이 안전함.


형식

<form action="주소" method="post">

<input ...>

</form>



3. GET 방식 특성

- 주소 요청시 주소 부분에 데이터를 포함해서 전송하는 방식.

- 한정된 용량 범위의 데이터 전송 가능 (4Kb 정도 (4000자))

- 전송되는 데이터가 화면에 노출된다.

- 엽서와 같은 특성을 가진다.


형식1

<form action="주소" method="get">

<input ...>

</form>


형식2

<a href="주소?식별자=값&식별자=값&...">메시지</a>






구구단 출력 (GET 방식 전송 이용)


실행 예)

1단 2단 3단 4단 ... 9단       -> 하이퍼링크


-----------------------------

5 * 1 = 5

5 * 2 = 10

...

5 * 9 = 45





//Send_Receive10.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<%


String num = request.getParameter("num");

StringBuilder str = new StringBuilder();


if (num != null) {

int data = Integer.parseInt(num);

for (int a=1; a<=9 ; a++) {

str.append(String.format("%d * %d = %d<br>", data, a, (data*a)));

}

}


%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

<script type="text/javascript">

</script>

<style type="text/css">

 a {text-decoration: none; color:grey;}

 a:hover {text-decoration: underline; color:red;}

</style>

</head>

<body>

<div>

<h2>데이터 송수신(GET 전송방식) 테스트</h2>

<div>

<a href="Send_Receive10.jsp?num=1">1단</a> 

<a href="Send_Receive10.jsp?num=2">2단</a> 

<a href="Send_Receive10.jsp?num=3">3단</a> 

<a href="Send_Receive10.jsp?num=4">4단</a> 

<a href="Send_Receive10.jsp?num=5">5단</a> 

<a href="Send_Receive10.jsp?num=6">6단</a> 

<a href="Send_Receive10.jsp?num=7">7단</a> 

<a href="Send_Receive10.jsp?num=8">8단</a> 

<a href="Send_Receive10.jsp?num=9">9단</a>

</div>

<h3>출력 ----------------------</h3>

<div><%=str%></div>

</div>

</body>

</html>





forward() 메소드에 의한 데이터 재전송

- 입력, 처리, 출력 페이지를 별도로 작성.


- 특징

. 재전송 (서버차원에서 URL을 다른 페이지로 변경해버린다)

. 입력(HTML이 포함된 JSP 페이지) -> 처리(Servlet) -> 출력 전용 페이지(HTML이 포함된 JSP 페이지)

. request.setAttribute() 메소드를 이용해서 데이터를 재전송시킬 수 있다.

. 받을 때는 request.getAttribute() 메소드 이용.

. 재전송 데이터는 객체 형태의 데이터 모두 가능.

. 서버 차원에서 URL을 다른 페이지로 변경하기 때문에 클라이언트는 변경된 사실을 알 수 없다.



//Send11.jsp  -> 입력 전용

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

<script type="text/javascript">


function myFunc(obj) {

//빈칸검사

//숫자검사

obj.form.submit();

}


</script>

</head>

<body>

<div>

<h3>데이터 송수신 테스트11(재전송)</h3>

<form action="Redirect11.jsp" method="post">

숫자1 <input type="text" name="num1" id="num1"><br>

숫자2 <input type="text" name="num2" id="num2"><br>

연산자 <select name="op"><option value="add">더하기</option>

<option value="sub">빼기</option><option value="mul">곱하기</option>

<option value="div">나누기</option></select><br>

<input type="button" value="결과" onclick="myFunc(this)"><br>

<span id="msg" style="color:red; display:none;">모든 항목을 입력해야 합니다.</span>

</form>

</div>

</body>

</html>


//Redirect11.jsp  -> 처리 전용. 데이터 재전송 과정 추가. JSP 코드만 존재

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<%

//데이터 수신

String num1 = request.getParameter("num1");

String num2 = request.getParameter("num2");

String op = request.getParameter("op");


//처리

int n1 = Integer.parseInt(num1);

int n2 = Integer.parseInt(num2);

double result = 0;

if (op.equals("add")) {

result = n1 + n2;

}

if (op.equals("sub")) {

result = n1 - n2;

}

if (op.equals("mul")) {

result = n1 * n2;

}

if (op.equals("div")) {

result = n1 / (double)n2;

}

//결과 재전송 과정-> Receive11.jsp

//request.setAttribute()는

//forward() 메소드로 페이지 재전송시

//데이터를 보내는 방법

request.setAttribute("result", Double.valueOf(result));

RequestDispatcher dispatcher

= request.getRequestDispatcher("Receive11.jsp");

dispatcher.forward(request, response);

%>




//Receive11.jsp -> 출력 전용

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<%

String num1 = request.getParameter("num1");

String num2 = request.getParameter("num2");

String op = request.getParameter("op");


//forward() 메소드로 페이지 재전송될 때

//request.setAttribute()에 의해서 전달된 데이터를

//받는 방법


Double result = (Double)request.getAttribute("result");

StringBuilder str = new StringBuilder();

str.append(String.format("전달받는 숫자 : %s, %s<br>", num1, num2));

str.append(String.format("전달받는 연산자 : %s<br>", op));

str.append(String.format("결과 : %s<br>", result.toString()));


%>    

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

</head>

<body>

<div>

<h2>데이터 송수신 테스트11(재전송)</h2>

<h3>출력 --------------------</h3>

<div><%=str%></div>

</div>

</body>

</html>






sendRedirect() 메소드에 의한 데이터 재전송

- 입력, 처리, 출력 페이지를 별도로 작성.


- 특징

. 재전송 (서버차원에서 URL을 다른 페이지로 변경해버린다)

. 요청페이지(HTML이 포함된 JSP 페이지) -> 처리(Servlet) -> 결과페이지(HTML이 포함된 JSP 페이지)

. 클라이언트 차원에서 URL을 다른 페이지로 변경하기 때문에 클라이언트는 변경된 사실을 알 수 있다.

. 재전송 데이터는 GET 방식으로만 전송 가능.

. 재전송 가능한 데이터는 문자열 형태의 데이터만 가능.




//Send12.jsp  -> 입력 전용

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

<script type="text/javascript">


function myFunc(obj) {

//빈칸검사

//숫자검사

obj.form.submit();

}


</script>

</head>

<body>

<div>

<h3>데이터 송수신 테스트12(재전송)</h3>

<form action="Redirect12.jsp" method="post">

숫자1 <input type="text" name="num1" id="num1"><br>

숫자2 <input type="text" name="num2" id="num2"><br>

연산자 <select name="op"><option value="add">더하기</option>

<option value="sub">빼기</option><option value="mul">곱하기</option>

<option value="div">나누기</option></select><br>

<input type="button" value="결과" onclick="myFunc(this)"><br>

<span id="msg" style="color:red; display:none;">모든 항목을 입력해야 합니다.</span>

</form>

</div>

</body>

</html>


//Redirect12.jsp  -> 처리 전용. 데이터 재전송 과정 추가. JSP 코드만 존재

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<%

//데이터 수신

String num1 = request.getParameter("num1");

String num2 = request.getParameter("num2");

String op = request.getParameter("op");


//처리

int n1 = Integer.parseInt(num1);

int n2 = Integer.parseInt(num2);

double result = 0;

if (op.equals("add")) {

result = n1 + n2;

}

if (op.equals("sub")) {

result = n1 - n2;

}

if (op.equals("mul")) {

result = n1 * n2;

}

if (op.equals("div")) {

result = n1 / (double)n2;

}

//결과 재전송 과정-> Receive12.jsp

//sendRedirect() 메소드 이용

String url = String.format("Receive12.jsp?num1=%s&num2=%s&op=%s&result=%s", num1, num2, op, String.valueOf(result));

response.sendRedirect(url);

%>



//Receive12.jsp  -> 출력 전용

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<%

String num1 = request.getParameter("num1");

String num2 = request.getParameter("num2");

String op = request.getParameter("op");

if (op.equals("add")) {

op = "더하기";

}

if (op.equals("sub")) {

op = "빼기";

}

if (op.equals("mul")) {

op = "곱하기";

}

if (op.equals("div")) {

op = "나누기";

}


//sendRedirect() 메소드로 보낸 결과 값 받는 부분

String result = request.getParameter("result");

StringBuilder str = new StringBuilder();

str.append(String.format("전달받는 숫자 : %s, %s<br>", num1, num2));

str.append(String.format("전달받는 연산자 : %s<br>", op));

str.append(String.format("결과 : %s<br>", result));


%>    

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

</head>

<body>

<div>

<h2>데이터 송수신 테스트12(재전송)</h2>

<h3>출력 --------------------</h3>

<div><%=str%></div>

</div>

</body>

</html>






게시판 작성시


글쓰기 페이지(Write.jsp)

-> 글쓰기 버튼

-> 글쓴 내용을 전달받은 페이지는 데이터베이스 입력 과정 실행(Insert.jsp)

-> 글 목록 페이지(List.jsp)로 이동(자동-sendRedirect()) 

-> 글 목록 페이지(List.jsp) 출력

-> 주소창의 주소가 List.jsp로 변경



글쓰기 페이지(Write.jsp)

-> 글쓰기 버튼

-> 글쓴 내용을 전달받은 페이지는 데이터베이스 입력 과정 실행(Insert.jsp)

-> 글 목록 페이지(List.jsp)로 이동(자동-forward()) 

-> 글 목록 페이지(List.jsp) 출력

-> 주소창의 주소가 Insert.jsp로 변경






문제) 국어, 영어, 수학 점수를 입력 받아서 판정 결과 출력. JSP 이용. forward() 메소드 이용한 재전송 처리

판정 기준은

합격 -> 과목별로 40점 이상이면서, 평균이 60점 이상

과락 -> 과목중에 40점 미만이 있고, 평균은 60점 이상

불합격 -> 평균이 60점 미만


평균이 60점 이상 -> 합격

평균이 60점 미만 -> 불합격


합격 또는 과락 구분은 -> 국어, 영어, 수학 점수가 모두 40점 이상인 확인.


실행 예)

국어(0~100) [XX  ]

영어(0~100) [YY  ]

수학(0~100) [ZZ  ]

[ 결과 ]


입력받은 점수 : 국어 XX, 영어 YY, 수학 ZZ

판정 결과 : 합격



//Send13.jsp -> 입력 전용 화면



//Redirect13.jsp -> 처리 전용 화면. 판정 결과만 얻는다.



//Receive13.jsp -> 출력 전용 화면


WRITTEN BY
빨강꼬마

,