GetServlet, PostServlet - 자바 Servlet 첫 시작

안녕하세요

오늘부터 자바 jsp/servlet을 진행할까 합니다

이것도 실무에서 많이 쓰이기 때문에 저도 블로그에 기록도 할 겸

다른 분들도 아셨으면 하는 차원에서 글을 써봅니다


이번 시간에는 get 방식과 post 방식에 대해서 이론적인 내용과

그리고 실제 코딩으로 구현한 예를 올립니다


get 방식과 post 방식은 http 프로토콜을 이용해서 서버에게 데이터를 전달 할 때

쓰이는 방식입니다.


그 두 개의 차이점은 제가 내일 아침이나 낮에 추가로 업로드 하겠습니다

잠깐 소스를 보여주기 전에 설명을 드리자면..

정리해서 흐름을 말하자면


html 파일을 작성할 때 <form> 태그 안에

'<form action="PostServlet" method="POST"> ' 을 기술해서

자바 파일에서

'@WebServlet("/PostServlet")' 으로 html 액션명과 자바 웹서블릿명을 맞춰야 합니다



그리고 html 파일에서

method='GET' 또는 method='POST' 방식으로 어떤 방식으로

데이터를 보낼지 기술합니다


자바 파일에서는

doGet()이나 doPost() 방식으로 html 방식에 맞게끔 메서드를 기술해주고

자바 파일에서 응답을 할 때는 아래와 같은 형태로 합니다.

//응답 유형 지정
res.setContentType("text/html; charset=UTF-8");

//스트림 얻어오기
PrintWriter out=res.getWriter();

// 출력
out.println('코드');


반대로 html 파일이 보낸 데이터를 받을 때는

req.setCharacterEncoding("UTF-8");

//사용자가 입력한 값 받아오기
String id=req.getParameter("userId");
String pw=req.getParameter("pwd");

위와 같은 방식으로 처리합니다.


자 그러면 실제 자바 소스를 볼까요?


- Input.html -
=========================================================

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<h1>GET방식 테스트</h1>
<form action="GetServlet" method="GET">
<label>아이디</label>
<input type="text" name="userId"><p>
<label>비밀번호</label>
<input type="password" name="pwd"><p>
<button type="submit">보내기</button>
<button type="reset">다시쓰기</button>
</form>
</div>
</body>
</html>

실행 결과



-GetServlet.java-
input.html의 아이디, 비밀번호 값을 처리하는 서블릿(get방식)
=========================================================

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
/* 요청방식(method)
 * - GET 방식(DEFAULT)
 * - POST 방식
 * - PUT 방식
 * - DELETE 방식
 * - OPTION 방식
 * */

@WebServlet("/GetServlet")
public class GetServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

//get 방식의 요청 처리를 위해서는 doGet()을 오버라이드 하고
//post 방식의 요청 처리를 위해서는 doPost()를 오버라이드 한다
//input.html에서 get 방식으로 보내니 이쪽에서도 get으로 응수하자
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) throws
ServletException, IOException{

res.setContentType("text/html; charset=UTF-8");
PrintWriter out=res.getWriter();

//1. 사용자가 입력한 값 받아오기(아이디, 비밀번호 값)
String id=req.getParameter("userId");
String pw=req.getParameter("pwd");

//2. 유효성 체크
if(id==null||pw==null||id.trim().isEmpty()||pw.trim().isEmpty()){
out.println("<b>아이디, 비밀번호를 입력해야 해요</b>");
return;
}
out.println("<h1>GetServlet</h1>");
out.println("<h2>환영합니다. "+id+"님</h2>");
out.println("<h2>당신의 비밀번호는 "+pw+"이군요</h2>");
out.close();
}

}////////////////////////////



=========================================================

보시다시피 get 방식은 주소에 userid, pwd 값이 노출되는 점이 있어

일반적으로 회원가입과 같은 중요한 데이터를 처리하는 곳에서는 처리하지 않습니다

사실 일반적으로 다들 이렇게 아는데..

링크

위의 블로그에 들어가면 get과 post의 차이를 제대로 알려주는 곳이 있습니다

한번 참고하시길 바랍니다




자 이번에는 post 방식 예제를 올려봅니다

post 방식은 구현한 메소드명만 차이 있지 거의 비슷합니다

어쨋든 소스를 올려봅니다


-Input2.html-
=========================================================

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<h1>POST방식 테스트</h1>
<form action="PostServlet" method="POST">
<label>아이디</label>
<input type="text" name="userId"><p>
<label>비밀번호</label>
<input type="password" name="pwd"><p>
<button type="submit">보내기</button>
<button type="reset">다시쓰기</button>
</form>
</div>
</body>
</html>




-PostServlet.java-
input.html의 아이디, 비밀번호 값을 처리하는 서블릿(post 방식)

=========================================================

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;

@WebServlet("/PostServlet")
public class PostServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {

//응답 유형 지정
res.setContentType("text/html; charset=UTF-8");

//스트림 얻어오기
PrintWriter out=res.getWriter();

/* get 방식은 한글이 안깨지고 post 방식은 한글이 깨진다
tomcat 7.0부터 get방식은 한글 안깨지게 해주고
post 방식은 바디에 포함되어 있는데 그 부분은 한글 인코딩 처리를 못해준다.
* */
//post 방식일 경우 한글 처리
req.setCharacterEncoding("UTF-8");

//사용자가 입력한 값 받아오기
String id=req.getParameter("userId");
String pw=req.getParameter("pwd");

//유효성 체크하기
if(id==null||pw==null||id.trim().isEmpty()||pw.trim().isEmpty()){
//out.println("<marquee><b>ID, PW를 입력해야 해요</b></marquee>");
//이번에는 자바 스크립트로 구현해보자
out.println("<script>");
out.println("alert('아이디,비번을 입력하세요')");
out.println("location.href='Input2.html'"); // 이전 페이지로 이동
out.println("</script>");
return;
}

//환영 메시지 출력
out.println("<marquee><h1>PostServlet</h1>");
out.println("<h2>환영합니다. "+id+"님</h2>");
out.println("<h2>당신의 비밀번호는 "+pw+"이군요</h2>");

//스트림 닫기
out.close();
}

}



get/post 방식 모두 다 정상적으로 실행을 했습니다

어때요? 참 쉽죠 ^^


댓글 없음:

댓글 쓰기