ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 입력할 내용이 많은 경우는 POST 요청
    Servlet-JSP 2022. 1. 8. 15:14

    일상 생활을 할 때에 누군가가 많은 것을 얘기하면 우리는 일반적으로 포스트잇이나 종이에 그것들을 적어서 기록 한다.

    웹 어플리케이션을 만들때에도 많은 요청사항이 들어오게 되면 POST 방식으로 요청을 하게 된다.

    게시글을 입력하거나 할 때 입력 할 것이 많다고 하면 한번에 GET 요청으로 처리 할 수 없다. 우선 입력폼을 받기 위한 GET 요청을 하고 그 결과를 가지고 POST 요청을 하게 되는 것이다. 

    오늘은 POST 요청에 대해 알아보도록 하자 

     

    우선 화면에 보여질 view 페이지를 만들고

    <body>
    	<div>
    		<form action="notice-reg"> <!-- notice-reg를 받을 servlet이 필요하다  -->
    			<div>
    				<label>제목 : </label> <input type="text" name="title">
    			</div>
    			<div>
    				<label>내용 : </label>
    				<textarea name="content"></textarea>
    			</div>
    				
    			<div>
    				<button type="submit">등록</button>
    			</div>
    		</form>
    	</div>
    </body>

    서블릿 페이지를 만들어준다.

    @WebServlet("/notice-reg")
    public class NoticeReg extends HttpServlet {
    	@Override
    	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		
    		response.setCharacterEncoding("UTF-8");
    		response.setContentType("text/html; charset=utf-8");
    		PrintWriter out = response.getWriter();
    		
    		String title = request.getParameter("title");
    		String content = request.getParameter("content");
    		
    		//DB를 연결 했다면 이 값을 DB에 저장 하거나 해야하는데 아직 DB 연결을 안했으니깐
    		//일단 그냥 반환만 해주자 
    		
    		//내용을 잘 받았다 이것이 맞니? 하고 돌려 주는 것.
    		out.println(title);
    		out.println(content);

    그럼 이렇게 작동 하는 것을 확인 할 수 있다.

     

    지금처럼 이렇게 짧은 글자수이면 url 창에 다 입력이 된다.

    하지만 엄청나게 긴 문장이나 url 창에 사용 할 수 없는 특수문자를 사용하게 될 경우에는 url에 길이가 제한이 있어서 우리가 쓰고자 하는 내용을 전부 url에 붙이기에는 문제가 있다.

     

    그리고 쿼리스트링이라는 것은 반환해달라고 하는 것이 문서라고 하면 이 반환해달라는 문서에 대한 옵션값을 쿼리스트링이라고 할 수 있다.  장문의 내용을 쿼리스트링으로 보내는 것은 올바른 방법이 아니다. 

     

    그래서 이러한 것을 해결하는 방법으로는 form action 뒤에 method를 지정해주고 그것을 POST나  GET으로 지정 해 주는 방법이 있다.

     

    method를 작성하게 되면 문서를 받아서 사용자가 입력한 값을 제출 하게 되는 것인데 입력 값이 많기 때문에 url로 전달하는 것이 아니라 요청 바디에 붙어서 전달하게 되는 것이다. 

     

     

     

    이렇게 해 주면 url창에 아무것도 나타나지 않는다. 쿼리스트링이 아니라 바디쪽에 붙어서 제출 된 것이다.

    F12를 눌러서 개발자 환경 ->NETWORK에서 요청 시 사용한 내용들을 확인 할 수 있다.

    이제 주소창으로 내용이 전달 되는 것이 아니라 바디로 전달 되는 것을 확인 할 수 있고

    그럼 앞으로 많은 내용도 전달이 가능하게 되는 것이다.

    POST를 이용하는 이유에는 보안상에서도 사용하기도 하다.

    예를 들면 회원가입등을 할 때에는 비밀번호등 개인정보가 있기 때문에 POST로 입력한다.

     

    근데 좀전에 영어로 입력했을때는 글자가 깨지지 않았는데 맨 앞에 한글 몇글자는 글자가 깨지는 것을 볼 수 있다.

    request.setCharacterEncoding("UTF-8");

    요청 받기 전 위치에 이렇게 UTF-8로 변환하는 코드를 삽입해주면

    한글이 깨지지 않고 출력 되는 것을 확인 할 수 있다.

Designed by Tistory.