웹, 클라이언트에서 서블릿으로 요청하는 방식은 대표적으로 GET과 POST 두 가지 방식이 있다.
사용 방식 : <a href = "list.jsp?PageNo=2">[2]</a>
<a href="lsit.jsp">목록보기</a>
<form action="" name="" method="get">
단순하게 특정한 페이지를 요청하는 것이 아니라 특정 페이지로 많은 양의 파라미터를
전송하여 파라미터에 관한 처리를 할 때 POST방식으로 요청을 전송
사용 방식 : <form name="" action="" method="post">
선택하면 web.xml 생성이 된다.
GET 방식으로 요청이 전송되어 올 경우 최종적으로 goGET(HttpServletRequest request,
HttpServletResponse response) 메소드가 호출된다.
서블릿에서 제공되는 메소드 중 HttpServletRequest 인터페이스에서 제공되는 String getParameter(String name) 메소드가 존재하는데, 이 메소드는 name 이라는 이름으로 전송되어 온 파라미터 값을 반환해주는 메소드이다.
새로운 서블릿 파일을 만든다.
Class Name은 LoginServlet으로 한다.
-> web.xml 설정에서 <servlet-class>
항목에 설정되는 값이다.
URL mapping 항목을 변경한다.
-> web.xml 설정에서 <url-pattern>
항목의 내용으로 설정되는 부분이다.
클라이언트 폼 태그의 요청 경로가 login(<form action="login">)
으로 설정되어 있으므로
URL mapping 값을 /login으로 수정한다.
본 예제에 요청 방식이 GET 방식이므로 "Which method stubs would you like to create?" 부분의 체크 박스에서 doGet 메소드만 체크한 후 Finish 버튼을 클릭한다.
(기본적으로 goPost 항목도 체크되어 있지만, 지금은 필요 없으므로 선택하지 않는다.)
JSP 2.3은 서블릿 설정이 web.xml 보다는 어노테이션(Annotaition) 기반을 우선 제공하고 있으므로 @WebServlet("/login") 코드가 자동으로 생성된다.
이 부분은 http://localhost:8088/Chapter3/login 으로 요청이 전송되어 오면 해당 서블릿 클래스에서 요청을 처리하겠다는 의미이다.
자동으로 추가된 코드는 무시하고, goGet 부분에 코드를 작성하여 마무리하자.
(에디터 번호에 X 표시가 나오면 해당 메소드를 import하여 추가해 준다.)
POST 방식으로 요청이 들어올 경우 goGet이 아닌 doPost 메소드에서 요청이 처리된다.
톰캣의 URL 인코딩 방식이 UTF-8
방식이므로 GET 방식으로 요청 시 한글이 제대로 처리가 되려면 클라이언트의 페이지 인코딩 방식이 UTF-8
방식이어야 한다.
이클립스를 이용해 html 페이지나 jsp 페이지를 생성할 때 이클립스에 지정된 기본 인코딩 방식이 euc-kr
방식이므로 한글이 제대로 인식이 되도록 하려면 html 페이지와 jsp 페이지의 인코딩 방식을 UTF-8
로 지정하고 작업하는 것이 편리하다.
POST 방식으로 요청이 전송되어 올 경우 요청 파라미터 값이 요청 body 영역에 따로 인코딩 되어 넘어 오기 때문에 URL Encoding 설정만으로는 한글이 제대로 설정되지 않는다.
클라이언트에서 POST 방식으로 전송되어 온 한글 파라미터 값을 제대로 처리하려면 request
객체의 setCharacterEncoding
메소드를 사용하여 request
객체의 body
영역의 인코딩 방식을 변경해야 한다.
hangul.html 페이지의 코드 내용에서 form 태그의 method 속성을 POST로 변경한다.
서블릿 페이지 doPost 부분을 아래와 같이 변경해준다.
결과 창에서 아래와 같이 정상적으로 나오는 것을 확인할 수 있다.