#007. doPost() 메서드에 대해서 알아보기...
1. doPost() 메서드는 클라이언트의 웹 브라우저에게 내용을 전달할 수 있다.
<< 특징 >> 1. 전달 값이 Data Packet 부분에 넣어 전달되므로 노출이 되지 않아 보안성이 좋다. 2. Data 부분에 넣기 때문에 값의 크기에 제한이 없다. 그래서 보통은 처리용으로 많이 사용된다. |
2. 실습을 통해 사용법에 대해 알아보자.
1) 기존에 만든 helloServlet Class 의 내용을 변경 해보자.
코드 | package hello; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.*; public class HelloServlet extends HttpServlet { @Override public void init() throws ServletException { System.out.println("init() is Running...!"); } @Override public void destroy() { System.out.println("destroy() is Running..."); } public HelloServlet() { System.out.println("helloServlet 객체 생성..."); } @Override // 상단 내용은 변경된게 없습니다. *^^* protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doGet() is Running...");
String msg = req.getParameter("msg"); String pwd = req.getParameter("pwd");
// 클라이언트의 웹브라우저에 전송해줄 컨텐츠의 타입을 지정한다. resp.setContentType("text/html;charset=euc-kr"); // 클라이언트의 웹브라우저와 연결된 스트림을 얻는다. PrintWriter out = resp.getWriter(); // 클라이언트의 웹브라우저에 내용을 넣어준다. out.println("<html>"); out.println("<head><title>Hello</title></head>"); out.println("<body>"); out.println("<H1>Hello, Java Servlet!</H1>"); out.println("<H2>Hi~ DongHyuk.Kim</H2>"); out.println("<p>" + new java.util.Date() + "</P>"); out.println("<p><b> param msg: </b>" + msg + "</P>"); out.println("<p><b> param pwd: </b>" + pwd + "</P>"); out.println("</body>"); out.println("</html>"); // 내용응 종료한다. out.close(); }
// 상단 doGet 의 내용을 그대로 복사후 약간의 수정이 있습니다. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doPost() is Running...");
String msg = req.getParameter("msg"); String pwd = req.getParameter("pwd");
// 클라이언트의 웹브라우저에 전송해줄 컨텐츠의 타입을 지정한다. resp.setContentType("text/html;charset=euc-kr"); // 클라이언트의 웹브라우저와 연결된 스트림을 얻는다. PrintWriter out = resp.getWriter(); // 클라이언트의 웹브라우저에 내용을 넣어준다. out.println("<html>"); out.println("<head><title>Hello</title></head>"); out.println("<body>"); out.println("<H1>Hello, Java Servlet!</H1>"); out.println("<H2>Hi~ DongHyuk.Kim</H2>"); out.println("<p>" + new java.util.Date() + "</P>"); out.println("<p><b> param msg: </b>" + msg + "</P>"); out.println("<p><b> param pwd: </b>" + pwd + "</P>"); out.println("</body>"); out.println("</html>"); // 내용응 종료한다. out.close(); } } |
설명 | doGet 메서드의 모든 내용을 복사 후 doPost 로 만들었다. 문장47,49: 의 내용 중 doGet 을 doPost 만 변경이 있다. |
2. 이전시간에 만든 html 문서를 변경해보자.
1) hello.html 문서를 열고 아래와 같이 변경 해본다.
코드 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR"> <title>Insert title here</title> </head> <body> <form method="post" action="hello.dh"> <p> 메시지: <input type="text" name="msg"> </p> <p> 패스워드: <input type="password" name="pwd"> </p> <p> <input type="submit" value="전송"> </p> </form> </body> </html> |
설명 | 문장8: method 전달 방식을 post 방식으로 변경해 본다. |
2) 위에서 변경한 웹 페이지를 웹 브라우저에서 열어보자.
http://localhost:8080/web/hello.html 값을 입력 후 전송버튼을 선택한다.
설명 | 주소에 http://localhost:8080/web/hello.dh 전달 하려고 하는 값이 표시가 되지 않고 있다. 암호를 무엇을 입력했는지 알 수가 없다. 아래의 화면에서 는 값이 정상적으로 전달되는지를 확인하기 위해 화면에 출력해본 것이다. 암호는 !@#$ 이다. (암호화 된 것은 아니고, 입력을 그렇게 한 것임) |
3. 그런데.. 입력된 값이 한글이라면, 깨지게 출력이 될 것이다. 한글이 표시 되야 한다면, Encoding 을 지정해줘야 한다.
1) req 객체를 사용해 한글 인코딩의 지정해보자.
코드 | // 입력되는 데이터에 한글이 포함되어 있다면... req.getParameter() 파람전에 사용해야함. req.setCharacterEncoding("EUC-KR"); |
설명 | 코드가 너무 길어 필요한 부분만 위에다가 서술 했다. 문장52: req.setCharacterEncoding("EUC-KR") 로 지정을 한다. 입력되는 값의 한글을 지원하도록 지정하는 것이기 때문에 getParameter() 메서드로 값을 한번이라도 가져온다면, Encoding 은 적용되지 않는다. |
2) 위 내용을 확인하기 위해 아래의 주소로 웹 페이지에서 열어보자.
http://localhost:8080/web/hello.html 한글 값을 입력 후 전송버튼을 선택한다.
설명 | 한글이 출력되는 것을 확인 할 수 있다. |
이번 시간엔 doPost() 메서드에 대해서 알아봤다.
doGet() 과 doPost() 의 내용은 전달 하는 방법만 다를 뿐 사용법은 같다.
다음 시간엔 ServletConfig 와 ServletContext 에 대해서 알아보자...
잡담. java servlet 에 대한 강좌가 거의 마무리가 되고 있습니다. 오늘도 파이팅! ^^"
'Developer > Java-was' 카테고리의 다른 글
#008. ServletConfig 와 ServletContext 알아보기... (3) | 2011.04.27 |
---|---|
#006. doGet() 메서드에 대해서 알아보기... (0) | 2011.04.27 |
#005. HttpServlet Class 실습을 통해 알아보기... (0) | 2011.04.26 |
#004. Servlet (서블릿)에 대해서 알아보기... (2) | 2011.04.26 |
#003. Java EE Perspective 와 간단한 HTML 문서 만들어보기... (0) | 2011.04.25 |