Programing/JAVA

요청과응답

nickas 2012. 11. 9. 19:54

요청 : 웹 클라이언트가 웹 서버에게 특정 페이지의 전송을 요구하는 것

응답 : 웹 서버가 웹 클라이언트에게 결과를 전송해 주는 것

11.jpg

 

request 객체와 response 객체(서블릿 컨테이너가 요청을 받고 응답을 제공할 수 있어야 함)

  • request 객체(클라이언트의 요청을 표현하는 JSP 내장 객체)

    • 서블릿 컨테이너는 요청 정보를 서블릿에게 제공하기 위해 request 객체를 만들어 서블릿의 서비스 메소드 deGet(), doPost()에 인자로 제공
    • 기능

      • 클라이언트 관련 정보 읽기

        • 메서드

          • getRemoteAddr()

            • 리턴타입 : String
            • 기능 : 클라이언트 컴퓨터의 IP주소를 리턴
          • getContentLength()

            • 리턴타입 : long
            • 기능 : 클라이언트가 전송한 요청 정보의 길이를 리턴 길이를 알 수 없는 경우 -1을 리턴
          • getCharacterEncoding()

            • 리턴타입 : String
            • 기능 : 클라이언트가 요청 정보를 전송할 때 사용한 문자열 인코딩을 리턴
          • getContentType()

            • 리턴타입 : String
            • 기능 : 클라이언트가 요청 정보를 전송할 때 사용한 문서 타입을 리턴
          • getProtocol()

            • 리턴타입 : String
            • 기능 : 클라이언트가 요청한 프로토콜을 리턴
          • getMethod()

            • 리턴타입 : String 
            • 기능 : 클라이언트가 데이터를 전송할 때 사용한 방식을 리턴
          • getRequsetURI()

            • 리턴타입 : String
            • 기능 : 클라이언트가 요청한 URL에서 경로를 리턴
      • 서버 관련 정보 읽기

        • 메서드

          • getContextPath()

            • 리턴타입 : String
            • 기능 : JSP 페이지가 속한 웹 어플리케이션의 JSP 페이지의 경로를 리턴
          • getServerName()

            • 리턴타입 : String
            • 기능 : 연결할 때 사용한 서버 주소를 리턴
          • getServerPort()

            • 리턴타입 : int
            • 기능 : 연결할 때 사용된 서버의 포트 번호를 리턴
      • 클라이언트가 전송한 데이터(파라미터) 읽기

        • 메소드

          • getParameter(String name)

            • 리턴타입 : String
            • 기능 : 입력 폼을 통해 전송된 이름이 'name'인 파라미터 값을 리턴. 해당 이름이 없을 경우 null
          • getParameterValues(String name)

            • 리턴타입 : String[]
            • 기능 : 이름이 'name'인 파라미터의 모든 값을 배열로 리턴. 없을 경우 null
          • getParameterNames()

            • 리턴타입 : Enumeration
            • 기능 : 웹 브라우저가 전송한 파라미터의 이름 리턴
          • getParameterMap()

            • 리턴타입 : Map
            • 기능 : 웹 브라우저가 전송한 파라미터를 Map 형식으로 리턴. Map은 <파라미터 이름, 값>으로 구성
      • 클라이언트가 전송한 헤더, 쿠키 정보 읽기

        • 메소드

          • getHeader(String name)

            • 리턴타입 : String
            • 기능 : 지정한 이름의 헤더 값을 리턴
          • getHeaders(String name)

            • 리턴타입 : Enumeration
            • 기능 : 지정한 이름의 헤더 목록을 리턴
          • getheaderNames()

            • 리턴타입 : Enumeration
            • 기능 : 모든 헤더의 이름을 리턴
          • getIntHeader(String name)

            • 리턴타입 : int
            • 기능 : 지정한 헤더의 값을 정수로 리턴
          • getDateHeader(String name)

            • 리턴타입 : long
            • 기능 : 지정한 헤더의 값을 시간 값으로 리턴. 이때 시간은 1970년 1월 1일 이후로 흘러간 1/1000초 단위의 값을 가진다.
      • 속성 처리
  • reponse 객체(클라이언트에게 응답을 제공하기 위한 인터페이스를 구현한 객체)

    • 서블릿이 응답을 표현할 수 있도록 response 객체를 만들어 제공
    • 기능

      • 응답 헤더 정보 설정하기
      • 다른 페이지로 강제 이동 시키기
      • 쿠키 추가

        • addCookie()
      • 상태 코드 설정하기

        • setStatus()
      • 응답 메시지의 몸체를 만들기 위한 출력 스트림 객체 제공
      •  - getWriter() 또는 getOutputStream()

 

HTML 폼과 요청 파라미터의 처리

  • HTML 폼

    • 입력을 위한 틀
    • 서버로 전송할 데이터를 사용자가 입력하기 위한 것
  • 폼과 request 객체

    • 폼에 입력된 정보는 파라미터로 전송됨
    • 서버는 request 객체를 이용하여 사용자가 보낸 데이터를 읽을 수 있음

 

웹 브라우저의 데이터 전송 방식

  • GET 방식에 의한 요청

  • POST 방식에 의한 요청

    • HTTP 메시지의 몸체에 데이터를 전달
    • 예 : <FORM ACTION="form_process.jsp" METHOD='POST'>
    • 길이에 제한이 없으며 보안이 상대적으로 유리

      • 게시글을 포스팅 할 때
      • 암호나 신용 카드 정보를 보낼 때
  • 전송 데이터의 인코딩

    • 클라이언트는 특정 charset을 이용하여 데이터를 인코딩하여 전송
    • 서버는 같은 charset으로 디코딩해야 함
    • request.setCharacterEncoding()

      • 파라미터의 값을 디코딩할 때 사용할 charset을 지정할 수 있음