JSP 기본 2

여러가지 page 지시자의 속성들

세션

page지시자의 session 속성 = "true" or "false" 디폴트는 true
세션이란 웹 서버의 서비스를 받는 사용자를 구분하는 단위. 쉽게 예를 들어서 naver에 로그인 한 상태로 mail메뉴에 있다가 다른 화면을 들어갔다가 다시 mail 메뉴를 가면 여전히 로그인 상태가 유지되어 있음. 이는 세션(사용자를 구분하는 단위. 이 단위로 사용자의 로그인 정보를 기억하고 있음.)에서 정보를 기억하고 있어서 로그인 정보가 유지될 수 있음. 세션이 없다면 다른 페이지 갈때마다 로그인 해야함. 과거엔 쿠키로 저장했으나 파일만 열어보면 아이디 비밀번호를 알 수 있는 보안성의 취약점 때문에 세션으로 넘어옴.

버퍼 속성

page지시자의 buffer 속성
데이터(예를 들어 동영상)를 웹서버에서 사용자에게 보낸다면 웹 서버는 데이터들을 출력 스트림을 통해서 제공한다. 이때 동영상 파일을 한 번에 다 읽어들이는게 아니라 일정 사이즈만큼 출력 버퍼에 보내질 때까지 기다렸다가 꽉 차면 출력 스트림을 통해 사용자에게 전송하게 된다. 이때 일정한 사이즈를 buffer 사이즈를 통해서 관리한다.
예를 들어서 버퍼 사이즈를 8kb로 한다면 동영상 파일의 데이터를 8kb만큼 받을때까지 기다렸다가 8b가 다 모이면 클라이언트에게 보낸다. 이렇게 동영상 파일을 8kb씩 계속 보내는데 이때 8kb를 모으는 시간 동안 버퍼링이 걸리게 된다. 이 단위를 너무 크게 하면 해당 사이즈가 모일때까지 출력 스트림에서 데이터를 내보내지 않으므로 오히려 버퍼링이 길어지게 된다. 즉 용량을 적게 여러 번 전송하는게 버퍼링을 줄일 수 있다.
버퍼 기본 사이즈는 8kb

autoFlush

page 지시자의 속성.
버퍼가 꽉 차면 데이터를 지우는 기능. 기본적으로는 true값. false로 지정하면 버퍼가 꽉 차면 에러가 발생.(당연한 일. 꽉 차고 데이터 보내면 지우고 다시 채워야함.)
임의적으로 버퍼가 꽉 차지 않아도 비우고 싶다면 autoFlush를 false로 하고 out객체의 flush()메서드를 사용하면 가능.

isThreadSafe 속성

쓰레드 = > 실행 흐름. 카톡을 예로 들면 카톡 하나(프로세스)에서 여러 쓰레드(실행 흐름)이 존재 가능(이렇게 여러개가 동작하면 멀티 쓰레드).여기서 여러 쓰레드는 회사 카톡방 키고 친구 카톡방 키고 가족 카톡방 키고 이러한 느낌.
이때 멀티스레드(여러개의 쓰레드가 존재하는 상황)에서 주의할 점은 여러 사용자가 동시에 접속할 경우 주의해야 한다. 만약 10명의 사업자들(사용자)이 a의 계좌에서 동시에 돈을 빼간다면 동시에 스레드가 생성되어서 동시에 처리가 일어나서 문제가 발생할 수 있다. 이때 해야하는 일이 동기화이다. 동기화는 하나의 스레드 작업이 완료될 때까지 기다렸다가 완료되어야지만 다음 스레드 작업이 시작될 수 있도록 해주는 작업이다. isThreadSafe를 true로 하면 여러 사용자가 웹 페이지에 들어와서 무언가 작업 요청을 동시에 하더라도 순차적으로 처리를 하기에 안전하게 작업이 가능하나 false로 두면 여러 요청을 동시에 처리하게 되므로 공유되는 객체들의 경우에는 따로 동기화를 시켜줘야해서 false값은 일반적으로 사용하지 않는다.

에러 관련 속성들

errorPage 속성

jsp에서 에러가 발생했을 때 보여줄 에러 페이지를 지정.

isErrorPage 속성

현재의 페이지가 에러 페이지인지 아닌지를 정하게 됨. 보통은 에러 페이지가 아니기 때문에 false값이지만 true를 줘서 현재 페이지를 에러 페이지로 만들고 exception 객체를 사용해 예외 원인을 알 수 있다.

errorPage 설정을 해줌.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page errorPage = "error.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
0으로 나누는 것은 불능입니다.
<%= 2/0 %>
</body>
</html>

isErrorPage를 사용해서 에러 페이지로 만들고 exception 객체를 통해 에러 메시지를 출력.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page isErrorPage = "true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
다음과 같은 에러가 발생하였습니다.
<%= exception.getMessage() %>
</body>
</html>

include 지시자

현제 페이지에 html 혹은 jsp페이지 내용을 삽입할 때 사용.
속성을 유힐하게 file 1개 뿐이다.
< %@ include file = "URL" %>
쉽게 메소드와 비슷한데 모든 웹 페이지에 공통적으로 들어가는 내용을 하나의 jsp파일로 만들어서 모든 페이지에 include 시킴으로써 추가할 수 있다. 대표적인 예로는 홈페이지 하단에 저작권 표시나 기타 정보를 표시하는 메뉴의 경우 모든 페이지에 존재하는데 이러한 경우에 include를 사용하면 한 번만 jsp 코드를 작성해두면 그 다음부터는 include를 사용하여 한 줄로 불러올 수 있어 편하다.

메인 페이지

코드 앞, 끝 부분 생략
<body>
<h3> 프론트 페이지</h3>
<a href = "08_sub.jsp"> 서브 페이지로 이동하기</a> <br>
<%@ include file = "footer.jsp" %>
</body>

서브 페이지

<h3>서브 페이지</h3>
<a href = "08_main.jsp">메인 페이지로 되돌아가기</a><br>
<%@ include file = "footer.jsp" %>
</body>

footer

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<hr>
<div id = "copytight">
All contents Copyright 어저구 저저구<br>
Contact mail : [email protected]어저구 저저구
</div>

출처 : 국비 교육

좋은 웹페이지 즐겨찾기