get 방시과 post 방식
다음은 인터넷에서 회원 가입을 할 때 흔히 볼 수 있는 화면입니다. 아래와 같이 화면은 HTML 에서 <form> 태그를 통해서 구현됩니다.
클라이언트의 브라우저에서 사용자로부터 다양한 정보를 입력받기 위해서 <form> 태그가 사용됩니다. 폼에 입력된 데이터를 서블릿 컨테이너가 받아와서 처리하는 서블릿 프로그램을 작성해 봅시다.
서블릿에서 폼에 입력된 데이터를 어떻게 처리하는지 그 방법을 학습하기 위해서 우선적으로 폼 관련 태그들을 알아보겠습니다. 다음은 <form> 태그의 기본형식입니다.
- 형식 : <form> 태그의 기본 형식
<form method="get/post" action ="호출할 서블릿">
<form> 태그에 사용된 주요 속성은 method와 action 입니다.
속성 | 설명 |
method |
어떤 방식으로 데이터를 넘겨 줄 것인지를 결정한다. get과 post 방식 중에서 하나를 선택한다. post 는 사용자가 입력한 내용을 발송할 때 그 내용을 공개하지 않는다. get 은 사용자가 입력한 결과를 알 수 있도록 내용을 공개한다. |
action |
전송(submit) 버튼을 누르면 action 속성 다음에 기술한 URL 에 지정한 파일로 이동한다. |
<form> 태그에 포함된 입력 양식에 내용을 입력하거나 선택사항을 선택하였다면 이들 내용이 서버에서 처리되어야 합니다. 웹 서버에 의해 처리될 수 있도록 <form> 태그의 action 속성에 이동할 서블릿을 기술합니다. 다음은 <form> 태그에 포함된 입력 양식에 입력한 데이터를 서블릿이 처리하도록 한 예제입니다.
- 서블릿을 get 방식으로 요청한 예
<form method="get" action="MethodServlet" >
위 예는 get 방식으로 서블릿을 호출하기 때문에 서블릿 클래스의 doGet() 메소드가 호출됩니다. <form> 태그만으로 action 속성에 기술된 서블릿으로 데이터를 전송하기 위해서는 전송(submit) 버튼이 클릭되어야 합니다. 전송 버튼은 HTML 의 <input> 태그의 type 을 "submit" 으로 지정하여 만듭니다.
- 전송(submit) 버튼 만들기의 예
<input type="submit" value="전송">
input 태그의 type 속성값을 "submit" 으로 지정하면 버튼 형태로 출력됩니다. 버튼 위에 나타날 값은 value 속성에 지정합니다. [전송] 버튼이 만들어지고 이 버튼을 클릭하면 <form> 태그의 action 속성에 기술한 서블릿이 요청되어 처리됩니다.
입력한 내용을 취소하고자 할 때에는 취소(reset) 버튼이 사용됩니다. 취소 버튼을 누르면 데이터를 다시 입력할 수 있도록 이전에 입력한 내용을 깨끗이 지웁니다.
- 취소(reset) 버튼 만들기의 예
<input type="reset" value="취소">
전송방식을 get과 post로 하는 <form> 태그를 2개 만들어 서블릿 객체의 doGet() 과 doPost() 가 각각 개별적으로 호출되는 예제를 작성해 보겠습니다. 다음은 만들어 볼 예제의 간단한 실행원리입니다.
[get 방식으로 호출하기] 전송 버튼을 클릭하면 서블릿 내에 doGet() 메소드가 호출되고
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
response.setContentType("text/html; charset=UTF-8");
PrintWriter out =response.getWriter();
out.print("<h1>get 방식으로 처리됨 </h1>");
out.close();
}
[post 방식으로 호출하기 ] 전송 버튼을 클릭하면 서블릿 내에 doPost() 메소드가 호출되도록 프로그램을 작성해 보겠습니다.
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException{
response.setContentType("text/html; charset=UTF-8");
PrintWriter out =response.getWriter();
out.print("<h1>post 방식으로 처리됨 </h1>");
out.close();
}
다음은 이번 예제에서 작성할 파일들을 정리한 표입니다.
파일 이름 | 설명 |
04_method.jsp | get 방식 전송 버튼과 post 방식 전송 버튼이 있다. |
MethodServlet.java | 어떤 전송 버튼을 눌렀느냐에 따라서 doGet 혹은 doPost 메소드가 호출된다. |
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>서블릿</title>
</head>
<body>
<form method="get" action="MethodServlet">
<input type="submit" value="get 방식으로 호출하기" >
</form>
<br><br>
<form action="MethodServlet" method="post">
<input type="submit" value="post 방식으로 호출하기" >
</form>
</body>
</html>
package unit03;
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;
/**
* Servlet implementation class MethodServlet
*/
@WebServlet("/MethodServlet")
public class MethodServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MethodServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html; charset=UTF-8");
PrintWriter out =response.getWriter();
out.print("<h1>get 방식으로 처리됨</h1>");
out.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html; charset=UTF-8");
PrintWriter out =response.getWriter();
out.println("<h1>post 방식으로 처리됨 </h1>");
out.close();
}
}
댓글 ( 4)
댓글 남기기