본문 바로가기

수업/수업정리

2024-02-27-오전:GET과 POST

1. GET과 POST

1) GET

  • 서버에게 Resource를 보내도록 요청. 데이터를 수신하는 기능
  • 서버에서 정보를 조회하기 위해 설계된 메소드
  • URL에 변수(데이터)를 포함시켜 요청한다.
  • 데이터를 Header(헤더)에 포함하여 전송한다.
  • URL에 데이터가 노출되어 보안에 취약하다.
  • 캐싱이 가능하다.

 

2) POST

  • 서버에 Input Data를 전송
  • 서버에 저장된 리소스를 생성 및 변경하기 위해 설계된 메소드
  • URL에 변수(데이터)를 노출하지 않고 요청한다.
  • 데이터를 Body(바디)에 포함시킨다.
  • URL에 데이터가 노출되지 않기에 기본적인 보안은 보장된다.
  • 캐싱이 불가능하다.

 

3) GET과 POST의 차이점

  • GET과 달리 POST는 전송할 데이터를 HTTP 메세지의 Body에 담아서 전송
  • GET이 Idempotent하도록 설계되었다는 것은 GET으로 서버에 동일한 요청을 여러 번 전송해도, 동일한 응답이 돌아온다는 것을 의미
  • (예시: 브라우저에서 웹 페이지를 열거나, 게시글을 읽는 등 조회를 하는 행위)
  • POST는 Non-idempotent하기 때문에, 서버에 동일한 요청을 여러 번 전송해도 각기 다른 응답을 받을 수 있다. 
  • (예시 : 게시글을 쓰면 서버에 게시글이 저장되고, 게시글을 삭제하면 해당 데이터가 삭제되는 등 서버에 변화를 일으키는데 사용)

 

4) 그 외 Request Method

  • PUT : 서버의 Resource에 데이터를 저장하기 위해 사용(GET과 반대)
  • DELETE : 서버에게 Resource를 삭제하도록 요청. HTTP규격에는 클라이언트가 DELETE 요청을 보내도록 정의

 

5) POST로 파라미터 값 전달하기

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>form.jsp</title>
</head>

<body>
회원가입 화면 
<form action="<%= request.getContextPath() %>/EX2/action.jsp" method="post">
<!-- 아이디 : <input type="text" name="uid"> <br/>
비 번 : <input type="password" name="upw"> <br/>
권 한 : <select name="ulevel">
  <option value="판매자">판매자</option>
  <option value="구매자">구매자</option>
</select><br/>
이 름 : <input type="text" name="uname"> <br/>
이메일 : <input type="text" name="uemail"> <br/>
<input type="submit" value="회원가입버튼"> -->

아이디 : <input type="text" name="uid" value="id001"> <br/>
비 번 : <input type="password" name="upw" value="001"> <br/>
권 한 : <select name="ulevel">
  <option value="판매자">판매자</option>
  <option value="구매자">구매자</option>
</select><br/>
이 름 : <input type="text" name="uname" value="공공일"> <br/>
이메일 : <input type="text" name="uemail" value="email001@naver.com"> <br/>
<input type="submit" value="회원가입버튼">
</form>        
</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<title>action.jsp</title>
<%
request.setCharacterEncoding("euc-kr");
//java 프로그램 언어 작성 위치
/* String uid=request.getParameter("uid1"); //파라미터 값 읽어오기 null출력*/
String uid=request.getParameter("uid"); //파라미터 값 읽어오기
String upw=request.getParameter("upw"); //파라미터 값 읽어오기
String ulevel=request.getParameter("ulevel"); //파라미터 값 읽어오기
String uname=request.getParameter("uname"); //파라미터 값 읽어오기
String uemail=request.getParameter("uemail"); //파라미터 값 읽어오기

//data type 변수=값; //uid변수를 선언하고 화면에서 입력한 예) id002를 uid변수에 담는다.(대입,입력)
System.out.println(uid+"<-uid"); //eclipse console창에 출력
System.out.println(upw+"<-upw"); //eclipse console창에 출력
System.out.println(ulevel+"<-ulevel"); //eclipse console창에 출력
System.out.println(uname+"<-uname"); //eclipse console창에 출력
System.out.println(uemail+"<-uemail"); //eclipse console창에 출력


out.println(uid+"<-uid 변수에 담려 있는 값을 화면출력 방법1 <br/>"); //웹페이지에 출력
out.println(upw+"<-upw 변수에 담려 있는 값을 화면출력 방법1 <br/>"); //웹페이지에 출력
out.println(ulevel+"<-ulevel 변수에 담려 있는 값을 화면출력 방법1 <br/>"); //웹페이지에 출력
out.println(uname+"<-uname 변수에 담려 있는 값을 화면출력 방법1 <br/>"); //웹페이지에 출력
out.println(uemail+"<-uemail 변수에 담려 있는 값을 화면출력 방법1 <br/>"); //웹페이지에 출력
%>

uid 변수에 담려 있는 값을 화면출력 방법2  : <%=uid%> <br>
upw 변수에 담려 있는 값을 화면출력 방법2  : <%=upw%> <br>
ulevel 변수에 담려 있는 값을 화면출력 방법2  : <%=ulevel%> <br>
uname 변수에 담려 있는 값을 화면출력 방법2  : <%=uname%> <br>
uemail 변수에 담려 있는 값을 화면출력 방법2  : <%=uemail%> <br>

<a href="<%= request.getContextPath() %>
/EX2/getAction.jsp?uid=<%=uid%>&upw=<%=upw%>&ulevel=<%=ulevel%>&uname=<%=uname%>&uemail=<%=uemail%>">
get방식요청(클릭)</a>

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<title>getAction.jsp</title>
<%
request.setCharacterEncoding("euc-kr"); //한글 깨지기 방지
/* String uid=request.getParameter("uid1"); //파라미터 값 읽어오기 null출력*/
String uid=request.getParameter("uid"); //파라미터 값 읽어오기
String upw=request.getParameter("upw"); //파라미터 값 읽어오기
String ulevel=request.getParameter("ulevel"); //파라미터 값 읽어오기
String uname=request.getParameter("uname"); //파라미터 값 읽어오기
String uemail=request.getParameter("uemail"); //파라미터 값 읽어오기

//data type 변수=값; //uid변수를 선언하고 화면에서 입력한 예) id002를 uid변수에 담는다.(대입,입력)
System.out.println(uid+"<-uid"); //eclipse console창에 출력
System.out.println(upw+"<-upw"); //eclipse console창에 출력
System.out.println(ulevel+"<-ulevel"); //eclipse console창에 출력
System.out.println(uname+"<-uname"); //eclipse console창에 출력
System.out.println(uemail+"<-uemail"); //eclipse console창에 출력


out.println(uid+"<-uid 변수에 담려 있는 값을 화면출력 방법1 <br/>"); //웹페이지에 출력
out.println(upw+"<-upw 변수에 담려 있는 값을 화면출력 방법1 <br/>"); //웹페이지에 출력
out.println(ulevel+"<-ulevel 변수에 담려 있는 값을 화면출력 방법1 <br/>"); //웹페이지에 출력
out.println(uname+"<-uname 변수에 담려 있는 값을 화면출력 방법1 <br/>"); //웹페이지에 출력
out.println(uemail+"<-uemail 변수에 담려 있는 값을 화면출력 방법1 <br/>"); //웹페이지에 출력
%>
uid 변수에 담려 있는 값을 화면출력 방법2  : <%=uid%> <br>
upw 변수에 담려 있는 값을 화면출력 방법2  : <%=upw%> <br>
ulevel 변수에 담려 있는 값을 화면출력 방법2  : <%=ulevel%> <br>
uname 변수에 담려 있는 값을 화면출력 방법2  : <%=uname%> <br>
uemail 변수에 담려 있는 값을 화면출력 방법2  : <%=uemail%> <br>

 

6) POST와 GET의 한글 출력 하는 방법

  • post의 경우

request.setCharacterEncoding("euc-kr");

 

  • get의 경우

server.xml -> URIEncoding="euc-kr"