get과 post의 차이점

Servlet 데이터 통신 방식
GET POST
<a>, <form>, <location.href> 사용가능 <form>에서만 사용가능.
전송할 때 입력결과를 URL 뒤에 name=value 형태로 전송하고, 여러 개일때는 '&'으로 연결한다. 전송할 때 입력결과가 TCP/IP Protocal의 HEAD 영역에 숨겨진 채 전송한다.
전송 데이터는 최대 255자 전송데이터는 무제한
Servlet의 doGet() 호출한다 Servlet의 doPost()를 호출한다
default 전송방식이며, 보안에 취약하다
처리속도가 GET 방식보다 느리고, 보안에 유리하다.

 

Web에서 Web으로 입력값 전달하기

 

html 예시

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>IO Test</h1>
<form action="test" method="get">
<textarea name="text" rows="5" cols="30">
</textarea><br>
<input type="submit" value="get제출"> 
</form>
<form action="test" method="post">
<textarea name="text" rows="5" cols="30">
</textarea><br>
<input type="submit" value="post제출"> 
</form>
</body>
</html>

Java 예시

package sample2;

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("/test")
public class Test extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html; charset=UTF-8");
		
		String text = req.getParameter("text");
		
		PrintWriter pw = resp.getWriter();
		
		pw.println("<html>");
		
		pw.println("<head>");
		pw.println("<title>제목</title>");
		pw.println("</head>");
		pw.println("<body>");
				
		pw.println("<h1>GET 방식</h1>");
		pw.println("<p>"+ text+"</p>");
		
		pw.println("</body>");
		pw.println("</html>");
		pw.close();
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html; charset=UTF-8");
		
		String text = req.getParameter("text");
		
		PrintWriter pw = resp.getWriter();
		
		pw.println("<html>");
		
		pw.println("<head>");
		pw.println("<title>제목</title>");
		pw.println("</head>");
		pw.println("<body>");
				
		pw.println("<h1>POST 방식</h1>");
		pw.println("<p>"+ text+"</p>");
		
		pw.println("</body>");
		pw.println("</html>");
		pw.close();
	}
}

 

설명

웹에서 웹으로 출력시, html문서의 구조를 그대로 작성해주어야한다.

@WebServlet("/url")

@WebServlet("/test")에 test는 html는 form tag의 url이다.

web.xml문서없이 Servlet실행이 가능하다.

HttpServletRequest

웹브라우저가 요청할 때 정보를 가져오는 객체

HttpServletResponse

웹브라우저에게 응답을 하기위한 객체

HttpServletRequest.setContentType(" ")

메소드 안의 문자열은 출력될 html의 인코딩 방식을 지정한다.

HttpServletRequest.getParameter("name명")

html의 name명을 작성할 시 해당tag의 value을 얻어온다.

HttpServletResponse.getWriter()

쓰기를 통해 응답을 하는 메서드

HttpServletRequest.setCharacterEncoding("utf-8")

입력된 데이터의 인코딩을 UTF-8로 변경한다.

Post방식은 위 메소드가 있어야 한글이 깨지지 않는다.

 

 

실행화면

 

+ Recent posts