JSP - chapter03

ZiSoOm·2021년 7월 19일
0

JSP

목록 보기
5/12

✨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"로 변경해주면 에러 해결

0개의 댓글