Response 객체는 주로 JSP 컨테이너에서 처리된 결과를 클라이언트로 다시 전송합니다. 쿠키, HTTP 파일 헤더 정보 등 응답 변수를 통해 HTTP 상태를 설정하고 클라이언트에 데이터를 보낼 수 있습니다.
일반적인 응답은 다음과 같습니다.
HTTP/1.1 200 OKContent-Type: text/htmlHeader2: ...HeaderN: ... (빈 줄)<!doctype ...><html><head>...</head><body> ... </body></html>
상태 줄에는 HTTP/1.1과 같은 HTTP 버전 정보, 200과 같은 상태 코드, OK와 같은 상태 코드에 해당하는 매우 짧은 메시지가 포함됩니다.
다음 표에는 네트워크 프로그래밍에서 자주 볼 수 있는 HTTP 1.1 응답 헤더의 가장 유용한 부분이 요약되어 있습니다.
응답 헤더 | 설명하다 |
---|---|
허용하다 | 서버에서 지원하는 요청 방법(GET, POST 등)을 지정합니다. |
캐시 제어 | 응답 문서를 안전하게 캐시할 수 있는 상황을 지정합니다. 일반적으로 값은 public , private 또는 no-cache 등입니다. 공개는 문서를 캐시할 수 있음을 의미하고, 비공개는 문서가 단일 사용자에게만 제공되고 개인 캐시만 사용할 수 있음을 의미합니다. 캐시 없음은 문서가 캐시되지 않음을 의미합니다. |
연결 | 지속적인 HTTP 연결을 사용할지 여부를 브라우저에 지시합니다. close 값은 브라우저에 지속적인 HTTP 연결을 사용하지 않도록 지시하는 반면, keep-alive는 지속적인 연결을 사용함을 의미합니다. |
컨텐츠 처리 | 브라우저가 사용자에게 주어진 이름으로 디스크에 응답을 저장하도록 요청하도록 합니다. |
콘텐츠 인코딩 | 전송 중 페이지의 인코딩 규칙을 지정합니다. |
내용 언어 | en, en-us, ru 등과 같이 문서를 표현하는 데 사용되는 언어입니다. |
콘텐츠 길이 | 응답의 바이트 수를 나타냅니다. 브라우저가 연결 유지 HTTP 연결을 사용하는 경우에만 유용합니다. |
콘텐츠 유형 | 문서에서 사용되는 MIME 유형을 나타냅니다. |
만료 | 캐시에서 만료 및 제거 시기를 표시합니다. |
최종 수정됨 | 문서가 마지막으로 수정된 시기를 나타냅니다. 클라이언트는 문서를 캐시하고 후속 요청에 If-Modified-Since 요청 헤더를 제공할 수 있습니다. |
위치 | 상태 코드가 포함된 모든 응답 주소를 포함하여 300초 이내에 브라우저가 자동으로 다시 연결되어 새 문서를 검색합니다. |
새로 고치다 | 브라우저가 페이지 업데이트를 요청하는 빈도를 나타냅니다. |
재시도 후 | 503(서비스를 사용할 수 없음)과 함께 사용하여 요청이 응답되기까지 걸리는 시간을 사용자에게 알려줍니다. |
세트쿠키 | 현재 페이지에 해당하는 쿠키를 나타냅니다. |
응답 객체는 javax.servlet.http.HttpServletResponse 클래스의 인스턴스입니다. 서버가 요청 객체를 생성하는 것처럼 클라이언트 응답도 생성합니다.
응답 객체는 HTTP 헤더 생성을 처리하기 위한 인터페이스를 정의합니다. 개발자는 이 객체를 사용하여 새로운 쿠키나 타임스탬프, HTTP 상태 코드 등을 추가할 수 있습니다.
다음 표에는 HTTP 응답 헤더를 설정하는 데 사용되는 메서드가 나열되어 있습니다. 이러한 메서드는 HttpServletResponse 클래스에서 제공됩니다.
SN | 방법 및 설명 |
---|---|
1 | String encodeRedirectURL(String url)은 sendRedirect() 메소드에서 사용하는 URL을 인코딩합니다. |
2 | String encodeURL(String url)은 URL을 인코딩하고 세션 ID가 포함된 URL을 반환합니다. |
3 | boolean containHeader(String name)은 지정된 응답 헤더가 존재하는지 여부를 반환합니다. |
4 | boolean isCommitted()는 응답이 클라이언트에 제출되었는지 여부를 반환합니다. |
5 | void addCookie(Cookie cookie) 지정된 쿠키를 응답에 추가합니다. |
6 | void addDateHeader(String name, long date) 지정된 이름의 응답 헤더와 날짜 값을 추가합니다. |
7 | void addHeader(String name, String value) 지정된 이름의 응답 헤더와 값을 추가합니다. |
8 | void addIntHeader(String name, int value) 지정된 이름의 응답 헤더와 int 값을 추가합니다. |
9 | void flashBuffer()는 모든 캐시의 내용을 클라이언트에 씁니다. |
10 | void Reset()은 상태 코드 및 다양한 응답 헤더를 포함하여 모든 캐시의 모든 데이터를 지웁니다. |
11 | void ResetBuffer()는 응답 헤더와 상태 코드를 제외한 기본 캐시 데이터를 지웁니다. |
12 | void sendError(int sc)는 지정된 상태 코드를 사용하여 클라이언트에 오류 응답을 보낸 다음 캐시를 지웁니다. |
13 | void sendError(int sc, String msg)는 지정된 상태 코드와 메시지를 사용하여 클라이언트에 오류 응답을 보냅니다. |
14 | void sendRedirect(String location)는 지정된 URL을 사용하여 클라이언트에 임시 간접 응답을 보냅니다. |
15 | void setBufferSize(int size)는 응답 본문의 버퍼 크기를 설정합니다. |
16 | void setCharacterEncoding(String charset)은 UTF-8과 같은 응답 인코딩 세트(MIME 문자 세트)를 지정합니다. |
17 | void setContentLength(int len)는 HTTP 서블릿의 응답 콘텐츠 길이를 지정합니다. 이 메서드는 HTTP Content-Length 정보 헤더를 설정하는 데 사용됩니다. |
18 | void setContentType(String type) 응답이 아직 제출되지 않은 경우 응답의 콘텐츠 유형을 설정합니다. |
19 | void setDateHeader(String name, long date) 지정된 이름과 값을 사용하여 응답 헤더의 이름과 내용을 설정합니다. |
20 | void setHeader(String name, String value) 지정된 이름과 값을 사용하여 응답 헤더의 이름과 내용을 설정합니다. |
스물하나 | void setIntHeader(String name, int value) 지정된 이름과 값을 사용하여 응답 헤더의 이름과 내용을 설정합니다. |
스물 둘 | void setLocale(Locale loc) 응답이 아직 제출되지 않은 경우 응답의 로케일을 설정합니다. |
스물셋 | void setStatus(int sc)는 응답의 상태 코드를 설정합니다. |
다음 예제에서는 setIntHeader() 메서드와 setRefreshHeader() 메서드를 사용하여 디지털 시계를 시뮬레이션합니다.
<%@ page import="java.io.*,java.util.*" %><html><head><title>자동 새로 고침 헤더 예</title></head><body><center><h2 >자동 새로고침 헤더 예</h2><% //5초마다 자동 새로고침 설정 response.setIntHeader("Refresh", 5) //현재 시간 가져오기 Calendar Calendar = new GregorianCalendar(); am_pm; int 시간 = Calendar.get(Calendar.HOUR); int 분 = Calendar.get(Calendar.MINUTE); int 초 = Calendar.get(Calendar.SECOND); 0) am_pm = "AM"; else am_pm = "PM"; 문자열 CT = 시+":"+ 분 +":"+ 초 +" "+ am_pm; out.println("현재 시간: " + CT + "n");
위 코드를 main.jsp로 저장하고 브라우저를 통해 접속합니다. 5초마다 현재 시스템 시간을 표시합니다.
실행 결과는 다음과 같습니다.
자동 새로 고침 헤더 예현재 시간: 오후 9:44:50
위의 코드를 직접 수정하고 다른 방법을 시도하여 더 깊이 이해할 수도 있습니다.