JSP - 데이터 보내기 post, get (2022-09-08)

2022. 9. 11. 15:243층 1구역 - 개발의 장/JSP

1. 서론

 

이전 게시물에서 input 태그에 대해 간단한게 알아봤는데

이번에 그 input 태그 중 password, text, submit 타입을 통해 데이터를 보내보자.

 

2. 본론

 

JSP에는 get방식과 post방식이 있다. 

 

get

form태그의 default값이며 get방식은 주소 표시줄에 전송 정보가 노출되고, 전송되는 데이터 양에 제한이 있다. 보안이 요구되는 곳에서는 사용하면 안 되며, 단순히 페이지 연결이 목적이거나 페이지 번호 등의 간단한 파라미터를 전송하는 경우에 사용된다.

 

post

post방식은 반대로 주소 표시줄에 전송 정보가 노출되지 않으며, 전송되는 데이터 양에 제한이 없다. 특정 페이지로 많은 양의 데이터를 보낼 때 사용되며, 회원가입이나 게시글 작성의 경우 사용된다.

 

이런저런 설명이 많으나....당장에 우리가 기억해야 할 것은 주소창에 정보가 노출되냐 안되냐 그 것만 여기서 기억하도록 하자.

 

그렇다면 form태그를 이용하여 코드하나를 만들어 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex15</title>
</head>
<body>
        <form action="ex16.jsp" method="post"> <!-- 서버측에 데이터를 전달을 하기 위한 태그 -->
        <!-- 데이터 전달 시 민감한 정보이면 그나마 post가 낫다. 그게 아니면 get방식 근데 둘 다 취약하긴함.... -->
            <input type="button" value="클릭만 하는 버튼"><br>
            <input type="reset" value="입력한 데이터를 삭제하는 버튼"><br>
            <input type="submit" value="데이터를 전송하는 버튼"><br><br>
            
            <input type="checkbox" value="멍때리기">
            <input type="checkbox" value="집에 보내줘"><br>
            <input type="radio" value="왼쪽" name="radioname">
            <input type="radio" value="오른쪽" name="radioname"><br><br>
            
            <input type="file"><br>
            <input type="email" placeholder="이메일을 적는 칸"><br>
            <!-- 변수는 name으로 표현, 출력이 안되는 경우 대부분 오타 -->
            <input type="password" placeholder="패스워드" name="pw"><br>
            <input type="text" placeholder="일반 데이터 입력" name="id"><br>
        </form>
</body>
</html>
cs

이전 게시물에 코드에서 <form action="ex16.jsp" method="post"> 이거 하나 추가됐다.

직역하자면 post방식으로 ex16.jsp에 정보를 보내라. 이런 뜻인데 그렇다면 ex16.jsp 파일을 하나 더 만들어줘야 한다.

(컴퓨터가 생각보다 똑똑하고 센스있는 놈은 아니니까.....)

 

아까 위 설명을 읽어본 사람은 이제 의문을 제기할텐데

'post는 정보 노출이 안되는데 정보가 잘 갔는지 어떻게 검증할 거냐?' 

 

그러기 위해 우리는 <% %> 이것을 쓸 거다.

scriptlet(스크립트릿)이라고 하며 자바 코드를 작성할 수 있는 범위를 생성해준다.

 

그리고 코드는 다음과 같이 적어주도록 하자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 
    <% 
    // scriptlet(스크립트릿) : 자바 코드를 작성할 수 있는 범위
    // 클라이언트가 서버로 == request
    // 서버가 클라이언트로 == response
    String id = request.getParameter("id");
    System.out.println("id : " + id);
    
    String pw = request.getParameter("pw");
    System.out.println("pw : " + pw);
    
    %>
cs

이제 ex15번 html을 열어 name을 부여해준 텍스트 창에 원하는 정보를 입력하고 submit버튼을 눌러주면?

페이지가 16번으로 변하면서 아무것도 없는 빈 창이 나온다.

그건 16번에 나타내줄 태그코드를 적지 않았으니 당연하다.

 

이클립스의 console 창을 확인해 보자.

무수한 서버교환의 장

단순한 데이터의 전달이여도 서버 내부에서 이런저런 과정이 위와 같이 빨간 글씨로 나오고 맨 아래 필자가 적은 정보가

제대로 출력됐음을 알 수 있다.

 

사실 404나 500의 에러코드가 안 났다면 웬만해서 잘 갔다 라고 볼 수 있다.

 

다음은 get이다. 이 코드<form action="ex16.jsp" method="post"> 에서 post만 get으로 바꿔주도록 하자.

이클립스에서 출력이 된 것은 post과정을 통해 확인했고,

get은 ex16번 주소창을 확인해 보자.

get방식일 경우 http://localhost:8085/html_Exam/ex16.jsp?pw=4567&id=4567 주소의 끝은 ?로 표시

정보와 정보 사이는 &로 표시

주소창에 제대로 출력이 됐다.