✨request 기본 객체
- 주요 정보 제공 메서드
-getRemoteAddr() : 클라이언트의 IP주소를 구함
-getMethod() : 웹브라우저가 정보 전송시 사용한 방식(GET, POST)
-getRequestURI() : 웹브라우저가 요청한 URL 경로
-getContextPath() : 웹어플리케이션의 컨텍스트 경로
-getServerName() : 연결시 사용한 서버이름 구함
-getServerPort() : 서버가 실행중인 포트 번호 구함
✨buffer 속성 사용
- 버퍼 크기 지정 (kb)
-buffer속성을 통해 크기를 명시하지 않아도 기본 8kb의 버퍼가 사용됨.
-버퍼 사용하지 않는 경우, none으로 지정하면 됨.
✨autoFlush 속성 사용
- 출력 결과가 버퍼에 가득 찼을 경우 행동 지정
-true : 버퍼가 가득 차면 버퍼 내용을 클라이언트로 전달 후 버퍼 비움
-false : 버퍼가 가득 차면 IOException(입출력 예외)을 발생시키고 작업 중단
✨request 객체 및 autoFlush
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%-- <%@ page buffer="5kb" autoFlush="false"%> --%>
<%@ page buffer="1kb" autoFlush="true"%>
<!DOCTYPE html>
<html>
<head>
<title>request기본 객체 및 autoFlush 속성값 true 예제</title>
</head>
<body>
<%
//page buffer="8kb" : 기본값
//크기가 4kb 이상의 데이터가 생성됨
//page buffer="1kb" autoFlush="false"로 하면 에러남
//에러 해결 : buffer를 키우거나, autoFlush를 true로 함
/* for(int i=0; i < 1000; i++) {
out.print("1234");
} */
%>
웹 어플리케이션 컨텍스트 경로 : <%=request.getContextPath() %><br>
웹브라우저가 정보 전송 시 사용한 방식 : <%=request.getMethod() %><br>
클라이언트 IP 주소 : <%=request.getRemoteAddr() %><br>
웹브라우저가 요청한 URI 경로 : <%=request.getRequestURI() %><br>
서버 이름 : <%=request.getServerName() %><br>
서버가 실행중인 포트 번호 : <%=request.getServerPort() %>
</body>
</html>
- request 객체 출력해보기
-컨텍스트 경로는 tomcat의 path가 /로 설정되있기 때문에 출력되지 않음
- autoFlush = false일경우
-페이지 에러
- autoFlush = true일 경우
-작성한 for문이 정상적으로 실행됨
autoFlush 연습2
- page 디렉티브의 buffer 속성 값을 8kb로 설정
- autoFlush : false일 경우, 페이지의 결과 데이터가 8kb를 초과 시 오류 발생
- autoFlush : true일 경우, 오류 발생하지 않음
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page buffer="8kb" autoFlush="false" %>
<!DOCTYPE html>
<html>
<head>
<title>버퍼 정보</title>
</head>
<body>
<%-- <%
//버퍼오버플로우 발생 시키기
for(int i=0; i<10000; i++) {
out.print("개똥이");
}
//버퍼오버플로우 해결 : 버퍼 크기 늘리거나 autoFlush=true로 함
%> --%>
버퍼 크기(8192) : <%=out.getBufferSize() %> <br>
버퍼의 남은 크기(8059) : <%=out.getRemaining() %> <br>
auto flush 여부(false) : <%=out.isAutoFlush() %>
</body>
</html>
- 버퍼오버플로우 발생시키기 전, 버퍼 정보 출력
- 버퍼오버플로우 발생시키면, autoFlush="false"로 인해 페이지 에러남
- autoFlush="true"로 변경해주면 에러 해결