티스토리 뷰

WEB/Java BackEnd

[WEB] Get, Post

Happyoon ~ 2021. 11. 23. 02:47
728x90
반응형

GET 방식

GET은 클라이언트에서 서버로 어떠한 리소스로부터 정보를 요쳥하기 위해 사용되는 메소드이다. GET을 통한 요청은 URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 쿼리 스트링 이라 한다.URL 끝에 "?"을 붙이고, 변수명1=값1&변수명2=값2 형식으로 이어붙이면 된다.서버에서는 각각의 변수명을 파라미터 명으로 각각의 파라미터 값을 전달받을 수 있다. ? 뒤에 정보를 표시하기 때문에 비밀번호 등의 개인 정보는 GET 방식을 사용하지 않는다.

 

예제를 통해 알아보자.


1) GET 방식 전송 테스트

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index.html</title>
</head>
<body>
   <h1>인덱스 페이지입니다.</h1>
   <ul>
 		//1)
      <li><a href="/Step01_Servlet/send?msg=hello">GET 방식 전송 테스트</a></li>
   </ul>
		//2)폼에 문자열 전송하면 해당 문자열이 콘솔창에 출력되도록 만들어보자.
   <h3>get 방식 폼 전송 예제</h3>
   <form action="/Step01_Servlet/send" method="get">
      <input type="text" name="msg" placeholder="메세지 입력..."/>
      <button type="submit">전송</button>
      <button type="reset">취소</button>
   </form>
   

</body>
</html>

우선 /Step01_Servlet/send가 경로로 들어왔을 때 실행될 서블릿을 만들어보자.


SendServlet.java

package test.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/send")
public class SendServlet extends HttpServlet{
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//msg라는 파라미터 명으로 전송된 문자열 읽어오기 
		String msg = req.getParameter("msg");
		
		System.out.println("클라이언트가 전송한 문자열: "+msg);
		
		//응답 인코딩 설정
		resp.setCharacterEncoding("utf-8");
		//응답 컨텐츠type 설정(웹브라우저에 어떤 컨텐츠를 응답할 것인지 알려서 준비를 시킨다.)
		resp.setContentType("text/html;charset-utf-8");

		//요청을 한 클라이언트에게 응답할 수 있는 객체의 참조값 얻어오기
		PrintWriter pw = resp.getWriter();
		pw.println("<!DOCTYPE html>");
		pw.println("<html>");
		pw.println("<head>");
		pw.println("<meta charset= \"UTF-8\">");
		pw.println("<title></title>");
		pw.println("</head>");
		pw.println("<body>");
		pw.println("ok~");
		pw.println("</body>");
		pw.println("</html>");
		pw.close();
	}

}

 


1) 직접 send뒤에 "?msg=hello" 를 작성한 경우

 <li><a href="/Step01_Servlet/send?msg=hello">GET 방식 전송 테스트</a></li>


결과

 

 

주소창에 위와 동일하게 들어가며 ok가 출력되는 것을 볼 수 있다.

이 코드는 ? 뒤의 내용이 고정되는 것을 볼 수 있다.


 

2) 폼을 이용하여 폼에 입력한 메시지를 콘솔창에 출력해보기

 

SendServlet.java에서 다음의 코드를 보자.

String msg = req.getParameter("msg");
System.out.println("클라이언트가 전송한 문자열: "+msg);

req.getParameter();

req는 요청 객체로, 요청 객체에서 이름이 msg인 파라미터의 값을 가져와 변수 msg에 넣어 콘솔창에 출력해주었다.


결과

주소창을 보면, 입력한 안녕이 ?msg= 뒤에 들어가는 것을 확인할 수 있다.


2) POST 방식 전송 테스트

이번엔 POST 방식을 알아보자.

POST 방식은 클라이언트에서 서버로 리소스를 생성하거나 업데이트를 위해 데이터를 보낼 때 사용되는 메소드이다.

POST는 전송할 데이터를 HTTP메시지의 body 부분에 담아 서버로 보낸다. 즉, GET방식에서 URL의 파라미터로 보냈던 것이 body에 담겨 보내진다.

외부적으로 데이터가 드러나지 않기 때문에 보안이 필요한 곳에서 많이 사용된다. 

POST 요청은 데이터 길이에 제한이 없다.

또한, 한글 인코딩 설정을 해주어야 한다.

한글 인코딩을 위해서는 다음 코드를 서블릿 혹은 jsp에 추가해야 한다.

//한글 인코딩 설정
	request.setCharacterEncoding("utf-8");

 

예제를 통해 살펴보자.


index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index.html</title>
</head>
<body>
   <h1>인덱스 페이지입니다.</h1>
   
   <h3>get 방식 폼 전송 예제</h3>
   <form action="/Step01_Servlet/send" method="get">
      <input type="text" name="msg" placeholder="메세지 입력..."/>
      <button type="submit">전송</button>
      <button type="reset">취소</button>
   </form>
   <br />
   <!-- 
      1. 아래의 폼을 제출했을때 404 를 발생시키지 않도록 서블릿을 만들어 보세요.
      2. 서블릿의 service() 메소드 안에서 폼 전송되는 파라미터를(이름,주소) 추출해서 콘솔창에 출력해 보세요.
      3. 간단한 html 응답도 해 보세요. 
    -->
   <form action="/Step01_Servlet/member/insert" method="get">
      <input type="text" name="name" placeholder="이름..."/>
      <input type="text" name="addr" placeholder="주소..."/>
      <button type="submit">추가</button>
   </form>
   
   <h3>post 방식 폼 전송 예제</h3>
   <form action="/Step01_Servlet/send.jsp" method="post">
      <input type="text" name="msg" placeholder="메세지 입력..."/>
      <button type="submit">전송</button>
   </form>
</body>
</html>

안녕을 전송해보자.


결과

GET과 다르게 주소창에 안녕이 표시되지 않는 모습을 확인할 수 있다. 

send.jsp를 경로로 넣어주었는데 jsp는 다음 게시물에서 다룰 예정이다.

 

 

<참고>

https://noahlogs.tistory.com/35

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 29 30 31
글 보관함