본문 바로가기

Developer/Java-was

#007. doPost() 메서드에 대해서 알아보기...

#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 에 대한 강좌가 거의 마무리가 되고 있습니다. 오늘도 파이팅! ^^"