Servlet 기초 - 데이터 전송방식 Get/Post
데이터 전송방식에는 Get, Post, Put, Delete라는 역할이 다른 4가지가 있다.
1. GET
- URL에 데이터를 포함시켜서 요청(QueryString 기술)
- 데이터를 패킷의 Header태그에 포함하여 전송
- 전송하는 데이터의 길이에 한계가 있음(브라우저에서 제한)
- 보안에 취약
- URL 공유가 가능(다른 사람과 같은 화면을 볼 수 있음)
2. POST
- URL에 데이터를 노출하지 않고 요청
- 데이터를 패킷의 Body태그에 담아서 전송
- 전송하는 데이터의 길이에 제한이 없음
- 보안에 강함
- URL 공유가 불가능
위와 같이
get 방식은 id, pw가 모두 노출되는 반면
post 방식은 데이터를 노출하지 않는다.
3. 데이터 전송방식
1) method
: 데이터 전송방식을 지정하는 attribute
→ 별도로 지정하지 않으면 default 값은 Get 방식이다!
2) 지정하는 방식
: form태그 action 뒤에 method="전송방식" 작성
3) get 방식 한글 인코딩 잡는 방법
- tomcat 버전이나 설정에 따라 달라짐
- tomcat 9버전에서는 굳이 사용하지 않아도 됨(내가 다운해놓은 건 9버전)
- tomcat 7버전 이하에서는 필요할 수 있음
: Servers 폴더 -> server.xml -> Source창에서 Connector태그 찾기 -> 태그 안에 URIEncoding="인코딩방식" 지정
누르면 정리된 표 같이 생긴 게 나오는데
그 맨 밑쪽을 보면 디자인, 소스 창을 선택할 수 있다.
소스창을 누르면 코드들이 어지럽게 써져있는데 60번째줄쯤에 위와 같이 connector 블라블라를 찾아야 한다.
get 방식 인코딩을 잡을 땐(tomcat 7버전이하) 여기로 와서 추가해줘야 한다.
4) post 방식 한글 인코딩 잡는 방법
request.setCharacterEncoding("UTF-8");
post 방식일 땐 요청 데이터 한글 인코딩 잡는 코드는 위와 같다.
주의할 점!
반드시 요청받은 데이터 가져오기 전에 인코딩을 잡아줄 것!
5) Post 방식 간단한 실습 !
- HTML 코드
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="GetPost" method="post">
이름 : <input type="text" name="name">
<input type="submit" value="전송">
</form>
</body>
</html>
- Servlet 코드
package Servlet0127;
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("/GetPost")
public class Ex02GetPost extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 0. post방식일 때 요청데이터 한글 인코딩 잡아주기
request.setCharacterEncoding("UTF-8");
// 1. 요청받은 데이터 가져오기
String name = request.getParameter("name");
// 2. 한글 인코딩 잡아주기
response.setContentType("text/html; charset=UTF-8");
// 3. 출력스트림 가져오기
PrintWriter out = response.getWriter();
// 4. 화면에 출력
out.print("입력한 이름 : ");
out.print(name);
}
}
- 출력된 화면 : url에 데이터가 노출되지 않는다.
* 여기서 0. post 방식일 때 요청 데이터 한글 인코딩을 잡아주지 않으면
이렇게 알 수 없는 글자가 뜨게되니 꼭 post방식 한글 인코딩 따로 해줄 것!