본문 바로가기
JAVA/JSP

request, response 객체정리

by solutionmaster 2023. 5. 11.

1. 질의 문자열
- 클라이언트가 웹서버에 정보를 요청할때 사용하는 문자열   
- 규칙
 . name = value 형식으로 전달
 . 여러개의 쌍으로 전달될때는 &를 구분자로 한다.
 . 영문자 숫자, 일부 특수문자는 그대로 전달가능하지만, 
 . 그외의 문자(한글) 등은 %기호와 함께 전달된다.(서버에서 복원 처리를 해줘야한다.)
 . 공백문자는 + 기호로 변경되어 전달된다.
 . url은 공백을 포함할수 없는 특징을 갖고 있다면 공백앞까지를 URL로 인식한다. 
 
2. JSP에 내장되어 있는 객체 
- request : 클라이언트의 요청정보에 대한 객체 - ServletRequest 클래스
- response : 웹서버에서 클라이언트에 보내는 응답정보객체 - ServletResponse 클래스
- pageContext : 페이지에대한 정보관리 객체 (JSP 페이지당 1개 1:1대응) - PageContextJSP 클래스
- session : 세션정보관리 - HTTPSession 클래스
 * HTTP프로토콜의 특징 중 하나로 무상태성(Statless)가 있다.
  - 한번 요청하고 한번응답 받으면 접속이 끊기는 것.
 * 세션이란 쿠키를 기반으로 일정시간동안 동일한 브라우저로 부터 들어오는 요청을 
하나의 상태로보고 그상태를 유지하는 기술이다.

- application : 웹어플리케이션에 대한 정보관리 - ServletContext 클래스
- exception : 예외처리에 이용되는 객체, 오직 에러페이지에서만 import하여 사용할수있다. - Throwable 클래스

3. Request객체 : 클라이언트에 관련된 정보, 서버에 관련된 정보, 클라이언트가 요청한 데이터, 쿠키정보 등 - ServletRequest 클래스
1)클라이언트 정보
 . 클라이언트 IP주소   - getRemoteAddr( ) ip v4, ip v6
 . 요청한 정보의 길이   - getcontentLength( )
 . 요청할때 사용한 문자열 인코딩 - getCharacterEncoding( )
 . 요청받은 문자열 인코딩 설정 - setCharacterEncoding("utf-8")
 . 전송할때 사용한 문서타입 - getContentType( )
 . 전송할떄 사용한 전송방식 - getMethod( )
 . 전송할때 사용한 URL경로 - getRequestURL( )

2) 서버관련정보
 . 서버의 주소 - getServerName( )
 . 연결한 포트번호 - getServicePort( )

3) 클라이언트가 웹서어베 전송한 데이터
 . 폼의 name값 읽기 - getParameter( ) >>String
 . 폼에서 복수의값을 읽기 - getParameterValues( ) >> String[ ]
 . 웹브라우저가 전송한 파라미터의 name들 읽기 - getParameterNames( ) >> Enumeration 

4) request객체에 데이터 저장관리
 . 데이터 저장 - setAttribute(String name, Object obj)
 . 데이터 읽기 - getAttribute(String name) >> object
 . 전체 데이터읽기 - getAttributeNames( ) >> Enumeration 
 . 데이터 삭제 - removeAttribute(String name)

5) 세션 
 . 요청한 클라이언트가 사용한 session객체를 읽기, 만약 반환한 session객체가 없으면 생성해서 반환해준다. - getSession( )
 . 요청받은 서버가 그전에 클라이언트에게 보냈던 모든 쿠키 읽기 - getCookies( ) - cookie[ ]

6) 서블릿(servlet)객체
 . 서버가 시작될때 웹애플리케이션 단위로 생성되는 ServletContext 객체의 주소를 반환 - getServletContext( ) - ServletContext 클래스

4. response 객체
1) 응답전송방식과 상태/오류
 . HTTP응답상태 코드결정 -sendStatus(int 상태코드)
 . 응답할 내용의 MIME타입설정 - setContentType(String type) 
 . MIME타입 읽기 - getContentType( )
 . 응답할 문자 인코딩방식 설정 - setCharterEncoding( )
 . 응답할 문자 인코딩방식 읽기 - getCharterEncoding( )
 . 에러응답을 클라이언트에 전송 - sendError(int status_code)

2) 출력버퍼설정
 . 출력버퍼 크기 설정 - sendBufferSize(int size)
 . 버퍼크기 알아보기  - getBufferSize( )
 . 버퍼내용 클라이언트에 전송 - flushBuffer()

3) 페이지 전환
 . 현재 페이지를 다른 페이지로 이동 - sendRedirect(String location)(vs. forward)

5. Forward와 Redirect 차이
1) Forward
 . URL이 변경되지 않는다.
 . request, response가 유지된다.
 . request에 들어있는 값이 유지된다.
 . 데이터 유지를 위해서 setAttribute( ), getAttribute( )를 활용한다.
 . request.froward(location)

2) Redirect
 . 웹서버가 웹브라우저에게 다른 페이지로 이동하라고 지시하는것을 의미한다.
 . URL이 변경된다.
 . 요청시시마다 request, response객체가 생성된다.
 . getAttribute( )를  사용 할 수없다. getParameter( )를 사용해야한다. 
 . 주소줄에 한글/특수문자가 존재한다면 반드시 URLEncode를 해서 전송해야 한다.
 . response.sendRedirect( )

6. 요청방식에 따른 처리 : 최초요청 >> init( )실행 >> 요청시(요청정보 ~ 응답정보 생성) 마다 request객체생성/response객체생성 

---------------------------------------------------------------------

(요청 메시지)                                                      (응답 메시지)
요청방식 Reauest - URI HTTP버전       ~~~~~    HTTP버전 상태코드 상태텍스트
                    헤  더                                                                     헤  더
         Accept, Accept-Encoding                            Cache-Control, Connection
       Accept-language, user-Agent                       Content-Encoding, content-type
         cache-Control                                                      Date, Server
                     바  디                                                                     바  디
        (post방식 내용) 
*Get    /book/A   HTTP/1.1                                            HTTP/1.1   200  OK
-----------------------------------------------------------------------
* 서버자원정보(URI)
   - URL에서 포트번호 다음부터가 URI이다.
>> URI 정보로 웹서버에서 클라이언트가 요청한 문서를 찾아서 실행후 결과(또는 파일)을 클라리언트에 응답한다.
1)Get - 검색
 . URL로 데이터를 넣어 요청할때 
 . <a href="">태그를 클릭하여 요청하는 경우
 . 폼 태그에 method속성을 생략할 경우
 . 255바이트 미만, 노출되어도 상관없는 것, 속도가 빠르다.
 . 질의 문자열을 요청줄에 포함하여 전달한다.

2)Post - 초기화 / 추가 / 생성
 . 요청 정보를 바디에 포함하여 전달한다. 
 . 데이터의 길이 제한이 없다.
 . 속도는 상대적으로 느리다.
 . form태그를 사용해야만 요청 할 수있다.

3)Put - 수정(update)에 주로 사용

4)Delete - 서버에서 리소스를 삭제하는 경우

7. 상태코드 : 요청처리 결과를 숫자세자리로 나타낸다. 즉, 클라이언트 요청에 대한 처리결과를 의미한다.
 . 1XX : 조건부응답
 . 2XX : 성공
 . 3XX : 리다이렉션 완료
 . 4XX : 요청보류
 . 5XX : 서버오류에 관한 코드

    - 200 : 클라이언트의 요청처리 성공
    - 400 : 클라이언트의 문법적인 오류등 잘못된 요청으로 서버가해석불가
    - 401 : 클라이언트가 잘못된 인증정보를 헤더에 넣었을 경우
    - 403 : 사용자 허가모드 오류 - 페이지접근제한 거부
    - 404 : 요청한 문서가존재하지않음 - 경로확인
    - 405 : 서비스요청방식 지원 X

댓글