본문 바로가기
코딩/JSP

JSP] 버튼을 누르면 한 페이지 안에서 값을 송신/수신, (POST, IF문 이용)

by YDDE- 2021. 11. 8.

 

문제1. 

 

JSP를 이용해서 

한페이지 안에서 올림차순 버튼을 누르면 -> 버튼 바로 밑에 "order by 저렴한 순입니다" 라고 뜸.

내림차순을 버튼을 누르면 -> 마찬가지로 버튼 밑에 "order by 비싼 순입니다"라고 뜸

번호순 버튼을 누르면 -> 버튼밑에 "order by 번호순입니다"라고 뜨게 만들기.

 

 

 

 

답.

 

한 페이지 안에서 데이터송신 -> 수신해서 

버튼을 누르면 페이지 이동없이 한 페이지 안에서 누른 버튼에 따라, 출력하는 문구가 다르게 하는 코드를 짰다.

복잡한 JSP문법을 사용하는 대신 IF문을 이용했다.

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %> 
<!-- 보내고 받을때 꼭 인코딩해줘야 함. 꼭 필요함. 안그러면 송신시 값이 안맞음. -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<form action="#" method="post">
<input type="submit" name="btn" value="올림차순">
<input type="submit" name="btn" value="내림차순">
<input type="submit" name="btn" value="번호순">
</form>
<br>

<%
String order = request.getParameter("btn");

if("올림차순".equals(order)){
	out.println("order by 저렴한순입니다");
}else if("내림차순".equals(order)){
	out.println("order by 비싼순입니다");
}else if("번호순".equals(order)){
	out.println("order by 번호순입니다");
}else {
	out.println("버튼을 눌러주세요");
}%>

</body>
</html>

 

출력결과 

문제1 출력결과

 

 

 

 

 

 

 

아래는 코딩 리뷰 ---------------------

 

 

 

<% request.setCharacterEncoding("UTF-8"); %> 
-> 데이터를 보내고 받을때 꼭 UTF-8로 인코딩해줘야 함. 꼭 필요함.

안 그러면 데이터가 깨져서 아무리 문법이 정확하다고 해도 송신,수신시 값이 안맞음.

 

 

 

 

<form action="#" method="post">
<input type="submit" name="btn" value="올림차순">
<input type="submit" name="btn" value="내림차순">
<input type="submit" name="btn" value="번호순">
</form>

->form으로 sumit버튼들 다 묶어버리기. 

action은 송신처의 파일명을 쓰는 곳이다.

같은 페이지 송신, 수신일 경우, action="#" 혹은 action="" 혹은 action="같은 페이지의 파일명"으로 써준다.

포스트 송신이므로 post라고 써준다.(method="post")

 

 

<input type="submit" name="btn" value="번호순">

-> 버튼타입을 만들경우 input type ="submit"으로 설정 (이건 문법으로서 정해진것)

이 버튼의 이름은 "btn"이고, 이 버튼에 띄울 글자는 "번호순"

<-요런 느낌

여기서 변수는 btn임.

 

String order = request.getParameter("btn");

->btn을 문자열 order로서 전부 받는다는 뜻. 

 

 

 

 

 

 

 

if("올림차순".equals(order)){
out.println("order by 저렴한 순입니다");
}

->만약 올림차순이라는 글자와  btn에서 받은 문자열 order가 같으면  

"order by 저렴한 순입니다"를 출력.

다른 else if도 마찬가지 원리.

 

 

else {
out.println("버튼을 눌러주세요");
}

-> 그 밖에 아무것도 받은게 없을 경우, 뜨는 "버튼을 입력해주세요"

버튼을 클릭하지 않으면 아무것도 받은게 없는 상태이므로 처음 페이지가 떴을때부터 나오는 문구라고 보면 됨.

 

 

 

 

 

 

 

 

 

 

 

 

 

문제2.

입력창에 숫자를 입력하고 버튼을 누르면 그 입력치를 받아서 +10을 해서 한 페이지 안에서 출력하기

 

 

답. 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="#" method="post">
	<p><input type="text" name="formBox"></p>
	<p><input type="submit" value="송신"></p>
</form>

<%
String box = request.getParameter("formBox");

if(box == null){
	out.print("값을 입력해주세요");
}
else if(box != null && box.length() !=0){
int a = Integer.parseInt(box);
out.print("+10한 결과=>" + (a + 10) ); 
}
else {
	out.print("값을 입력해주세요");
}
%>

</body>
</html>

 

출력결과

 

문제2 출력결과

 

 

 

 

포인트는 "request.getParameter("")"로 받은 데이터는 "문자열"이 되어 버리기때문에,

int형의 숫자계산하는 경우는, "int a = Integer.parseInt(문자열의 변수); 의 문법을 써서

문자열 -> int로 변환해야 함.

 

또 다른 포인트는 문자열을 입력했을때, 안했을때,

송신버튼을 눌렀을때, 안 눌렀을때를 나눠서 생각해 if문을 짜는 것이다.

 

숫자을 입력하고 -> 송신버튼을 눌렀을때만 생각할것이 아니라,

아무것도 입력 안하고 -> 송신버튼을 눌렀을때,

송신버튼을 누르지도 않았을때도 생각을 해놔야, 보다 에러없는 프로그램을 만들 수 있다.

 

 

 

 

 

 

아래는 코딩 리뷰 ---------------------

 

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

->숫자입력이므로 인코딩은 입력안해도 됨.

다만 문자열 입력했을때 에러가 남. (문자를 입력은 논외로 생각하고 코딩함)

 

 

 


<form action="#" method="post">
<p><input type="text" name="formBox"></p>
<p><input type="submit" value="송신"></p>
</form>

->입력창과 송신버튼을  폼으로 묶음.

입력창을 넣을때는 input type="text"를 넣어주고 버튼의 경우는 input type="submit"

입력창의 이름은 formbox ,

버튼은 변수로 사용할 일이 없기때문에 따로 이름을 지정해주는 대신, 버튼위에 쓰여지게될 "송신"문자열을 지정

<- 요런 느낌

 

 



String box = request.getParameter("formBox");

->입력창 formbox에 입력된 값을 문자열 box로 받아줌.

 

 

 

 


if(box == null){
out.print("값을 입력해주세요");
}

-> 박스에 아무것도 입력 안 할 경우, (송신버튼을 안누른 상태) "값을 입력해주세요"가 출력

 

 

 

 

 

else if(box != null && box.length() !=0){
int a = Integer.parseInt(box);
out.print("+10한 결과=>" + (a + 10) ); 
}
->값은 입력했고(box.length() !=0), 송신버튼을 누른경우 (box != null)

 문자열 처리된 box를 숫자형 a로 변환, 치환하고,

a에 +10을해서 출력

 

 

 

else {
out.print("값을 입력해주세요");
}

->송신버튼은 눌렀는데, 값은 입력 안한경우, 

"값을 입력해주세요"가 출력.

 

 

 

 

 

 

 

・옵션 문제로서, 미입력으로 submit를 클릭했을 때도 에러가 되므로, if문에 조건을 추가해 대응한다.
미입력은 문자수가 0이 되므로, 「length()」메소드를 사용해 문자수가 0인가를 조사하면 좋다.

※ null과의 비교에 대해서는, SQL에서는 「where 열명 is null」라고 기재한다. Java는 「box == null」이라고 한다.
변수 box의 내용과 비교할 때는 「box.equals(문자열 등)」라고 기재한다. 이 세 가지 패턴을 혼동하지 않도록 합시다.


<form action="?????" method="post">
<p><input type="text" name="formBox"></p>
<p><input type="submit" value="제출"></p>
</form>

<%
String box = request.getParameter("?????");
if(????? == null){
box = "?????"; // 더하기에 무해한 값을 문자열로 설정합니다.
}
?????????? // 여기서 문자열에서 숫자로 변환
out.print("+10 결과 =>" + (????? + 10) ); // 50을 입력하면 60이 표시됩니다.
%>

댓글