티스토리 뷰

반응형

 1. GET 방식 

웹에서는 클라이언트가 서버로 요청을 하면 응답을 할 수 있는 옵션이 있을 수 있다.

클라이언트는 기본적으로 문서를 요청하고 서버는 요청받은 문서를 주는 식으로 일어난다.

(http://localhost/hello 라는 문서를 요청)

그런데 get 방식은 클라이언트가 추가적인 것을 요청하며 문서를 요청할 수 있다.

http://localhost/hello?cnt=3

 

이와 같이 말이다. 뒤에 추가적인 옵션을 덧붙였다. 이런 것을 QueryString 이라한다.

이렇게 서버에게 추가적인 옵션을 요청한다.

이때 서버는 그 옵션에 맞게 반응하여 돌려주어야 한다.

 

 

서블릿 클래스에 다음과 같은 내용을 추가하여 해당 값을 받아올 수 있다.

int cnt = Integer.parseInt(request.getParameter("cnt"));
for(int i=0; i<cnt; i++){
	out.println("안녕!!!<br>");
}

 

입력 도구인 request의 getParameter라는 메소드로 QueryString의 키워드 값을 읽어온다.

그 후 그 값만큼 for문을 돌린다면, 원하는 수만큼 출력을 할 수 있다.

이와 같이 사용자의 추가 옵션을 받고 내용에 맞게 서버는 반응 할 수 있다.

 

 

 


그러나 여기서, http://localhost/hello? 나 http://localhost/hello은 null을 반환할 것이다.
그래서 다음과 같이 기본 값을 사용해 오류를 방지한다.

String temp = request.getParameter("cnt");
int cnt = 10;
if(temp != null && !temp.equals("")){
   cnt = Integer.parseInt(temp);
}
   
for(int i=0; i<cnt; i++){
   out.println("안녕!!!<br>");
}

 




이제 html 을 수정하여 get방식으로 데이터를 전송해보자.
index.html

<html>
   <head>
   <title>jsp</title>
   </head>
	
   <body>
   <h2>Hello World!</h2>
    
    <!-- 1. <a> 태그의 href 속성을 이용한 방법 -->
    <a href = "HelloServlet">인사하기</a><br>
    <a href = "HelloServlet?cnt=3">인사하기</a><br>


    <!-- 2. <form> 태그를 이용하여 input값을 전송한 방법 -->
    <form action="HelloServlet">
        <div>
    	    <label>"안녕하세요"를 몇번 듣고 싶으세요?</label>
        </div>
        <div>
            <input type="text" name="cnt">
            <input type="submit" value="출력">
        </div>
    </form>
    </body>
</html>

form의 action 속성은 폼 데이터를 보낼 url 즉, 서블릿 이름을 입력한다.

input 태그 속성으로 name을 지정해야한다. 이 name은 전송받은 서블릿 클래스에서 값을 알아낼 때 사용하는 파라미터 이다.

 

 

 

 

아래 화면이 나타난다. 폼의 텍스트에 3을 입력 후 출력 버튼(submit)을 누르면

get 방식으로 input 값을 전송한다.

 

 

 

서블릿 클래스로 값이 보내지고 3번 출력하는 것을 볼 수 있다.

url을 보면 get방식이기 때문에 뒤에 전송받은 값이 붙는다. 

 

 


 2. POST 방식 

form을 이용해 post 전송 방식으로 요청하여 값을 출력하겠습니다.

post 방식으로 전달하면, get 방식과 다르게 URL에 전송한 값들이 나타나지 않습니다.


주소창(헤더)으로 전달하는 것이 아니라, 문서 요청 바디 안에 값들이 전달됩니다.
url에 보이지 않기 때문에 보안상의 이유나 긴 값을 전달할 때 post를 사용합니다.

 

jsp파일에 다음과 같이 바디 내용을 작성합니다.

<form action="PostExample" method="post">
  <div>
  <label>제목:</label>
  <input type="text" name="title">
  </div>
 
  <div>
  <label>내용:</label>
  <textarea name="content"></textarea>
  </div>
  
  <div>
  <input type="submit" value="등록">
  </div>
</form>

전송할 값들은 name 속성을 적절히 지정해야한다.
submit을 통해 action에 해당하는 서블릿으로 인풋 값들을 보냅니다.

이 때, 전달방식을 디폴트값인 GET이 아니라 POST로 지정합니다. form의 속성에 method="post"를 추가합니다.

 

 


자바 서블릿 클래스에 다음과 같이 작성한 후 실행해보겠습니다.

url 인코딩을 할 때 한글이 깨지지않도록 request의 setCharacterEncoding 메소드를 호출합니다.

@WebServlet("/PostExample")
public class PostExample extends HttpServlet {
  @Override
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    respone.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");
        
    String title = request.getParameter("title");
    String content = request.getParameter("content");
    
    PrintWriter out = response.getWriter();
    out.println(title + "<br>" + content + "<br>");
    out.close();
  }
}

request의 getParameter를 통해 파라미터 정보를 가져온다. 



 

 

 

실행 후 화면

 


폼을 작성한다.  텍스트들을 작성 후에 등록(submit) 버튼을 눌러 데이터를 post방식으로 전송한다.

 

 

 

 


get방식과는 다르게 url에 전송받은 데이터 값들이 추가되지 않습니다.

대신 개발자 도구의 네트워크에서 보면, 데이터들이 문서에 포함된 것을 볼 수 있습니다.

 

폼 데이터의 내용을 잘 전달받은 것을 볼 수 있다!!

이런식으로 url에는 나타나지 않고 문서의 바디로 데이터값이 전송된는 방식을 POST 방식이라고 한다.

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday