본문 바로가기

Developer/Java-was

#006. doGet() 메서드에 대해서 알아보기...

#006. doGet() 메서드에 대해서 알아보기...

 

1. doGet() 메서드는 클라이언트의 웹 브라우저에게 내용을 전달할 수 있다.

<< 특징 >>

1. 전달 값이 요청 URL에 노출되므로 보안에 취약하다.

2. 서버로 전달할 수 있는 데이터 크기는 최대 240 Byte 이다.

그래서 보통은 조회용으로 많이 사용을 한다.

 

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...");

        

        // 클라이언트의 웹브라우저에 전송해줄 컨텐츠의 타입을 지정한다.

        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("</body>");

        out.println("</html>");

        // 내용응 종료한다.

        out.close();

    }

}

설명

문장25: 문장20에서 파라메터로 받은 HttpServletResponse 클래스의 resp 객체로 부터 컨텐츠 타입을 지정하고 있다.

문장27: resp.getWrite() 메서드를 통해 PrintWrite 클래스의 out 객체 생성하고 있다.

문장29~35: 화면에 표시될 태그를 직접 입력하고 있다.

문장37: 리소스를 반환하고 있다.

 

2) 위에서 만든 내용을 웹 브라우저에서 확인 해보자. 아래의 사이트로 접속 해본다.

http://localhost:8080/web/hello.dh

 

3. 이번엔 자바 기본 클래스를 사용해 서버의 시간을 출력 해보자..

1) 아래의 소스코드를 입력해본다.

코드

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...");

        

        // 클라이언트의 웹브라우저에 전송해줄 컨텐츠의 타입을 지정한다.

        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("</body>");

        out.println("</html>");

        // 내용응 종료한다.

        out.close();

    }

}

설명

문장34: java 에서 제공하는 기본클래스 java.util.Date() 를 사용하고 있다.

 

2) 웹 브라우저로 다시 한번 확인 해보자.

 

4. 이번엔 Url 주소에 값을 전달 해보자.

1) 파라메터 전달 방법은 URL?msg=paramtest&pwd=1234 로 전달하게 된다.

즉, http://localhost:8080/web/hello.dh?msg=paramtest&pwd=1234 이렇게 되겠다.

msg 키에는 paramtest 라는 값이, pwd 키에는 1234 라는 값을 보내게 되는 것이다.

이와 같은 파라메터 ( ?msg=paramtest&pwd=1234 ) 의 내용을 쿼리스트링(QueryString) 이라고 부른다.

그럼 아래의 코드를 입력해서 확인 해보자.

코드

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();

    }

}

설명

문장24~25: 문장20에서 파라메터로 받은 HttpServletResquest 클래스의 req 객체로 부터 파라메터의 키에 해당하는 값을 변수로 받고 있다.

문장38~39: 변수에 담은 값을 화면에 뿌려주는 코드를 적용하고 있다.

 

2) 웹 브라우저로 파라메터를 넘겨서 다시 한번 확인 해보자.

http://localhost:8080/web/hello.dh?msg=paramtest&pwd=1234

 

5. 사용자가 값을 입력할 수 있는 간단한 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="get" 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 전달 방식은 get 방식이며, action 은 문장11의 전송버튼을 눌렀을 경우 hello.dh 로 msg, pwd 의 값을 전달 하라는 내용이다.

문장9~10: 사용자가 입력할 수 있는 텍스트 박스를 제공한다.

문장11: 사용자가 입력을 완료 후 처리할 수 있는 버튼이다.

 

2) 위에서 만든 웹 페이지를 웹 브라우저에서 열어보자.

http://localhost:8080/web/hello.html 값을 입력 후 전송버튼을 선택한다.

설명

주소에 http://localhost:8080/web/hello.dh?msg=ABCDEFG&pwd=123456 전달 하려고 하는 값이 모두 표기가 되고 있다. 암호가 보이고 있고, 암호가 보인다면 의미가 없을 것이다.

아래의 화면에서 는 값이 정상적으로 전달되는지를 확인하기 위해 화면에 출력해본 것이다.

 

이번 시간엔 doGet() 메서드에 대해서 알아봤다.

다음 시간엔 암호를 숨길 수 있는 doPost() 메서드에 대해서 알아보자...

 

잡담. 점점 내용은 없고 코드의 양만 늘어나고 있습니다. ^^*