Java Server Pages

JSP 데이터 전이와 내장 객체

나주나주 2024. 1. 31. 16:22

<%@ Directive %>

1. page

: 문서의 타입, 에러페이지, MIME 타입과 같은 정보 설정

속성 설명
Info 페이지에 대한 설명
contentType 생성할 MIME 타입 지정
PageEncoding charset과 같이 인코딩 지정 (기본값: ISO-8859-1 → UTF-8로 변경)
import 페이지에서 사용할 패키지클래스 지정
session 세션 사용 여부 지정 (기본값: true)
buffer 출력 버퍼(임시 메모리)의 크기 지정 (none: 사용안함, 기본 8KB) 
autoFlush 출력 버퍼가 모두 차면 비울지 결정 (기본값: true)
trimDirective Whitespaces 지시어 선언으로 인한 공백 제거 (기본값: false)
errorPage 에러 내용을 보여줄 페이지 지정 (일일히 해줘야 하는 점에서 xml 추천)
isErrorPage 해당 페이지가 에러를 처리할 지 여부 (기본값: false)

 

 buffer

  • jsp의 실행 과정:
  • jsp파일은 서블릿 코드로 변환 된 후 컴파일되어 class 파일로 만들어진 뒤, 버퍼에 저장하고 일정량이 되었을 때 전송한다. 최종적으로 html형태로 웹 브라우저에 보내 화면에 출력 된다 (buffer는 임시 저장소를 두어 데이터를 큰 단위로 묶어 한 번에 보내는 등 효율적으로 처리함)

(ex) <%@ page buffer="1kb"%>   //버퍼 크기의 기본 값은 8kb

 

  autoFlush

: 버퍼가 모두 채워졌을 때 처리 방법

true 버퍼가 채워지면 자동 flush(버퍼 안의 데이터를 목적지로 전송하고 버퍼를 비움)
false 버퍼가 채워지면 예외 발생

 

2. include

: 외부 파일을 현재 페이지에 포함, Ctrl + Space Bar (단축키)


jsp 파일을 소스 코드 보기(F12)로 확인해 보면 5행 정도의 공백을 확인할 수 있다. page 지시어가 있던 부분으로
컴퓨터가 공백을 문자로 인식하기 때문에 안드로이드와 같은 외부 기기 연동 시 문제를 일으키는 경우가 있다.
→  trimeDirectiveWhiespaces = "true" 를 넣어 공백 제거!


3. taglib

: 표현언어에서 사용할 자바 클래스나 JSTL 선언

 

<% Scriptlet (Script Elements) %>

: 자바 코드 직접 작성, JSP는 클라이언트의 요청을 받아 실행 될 때 서블릿(자바코드)으로 변환되고, 클래스로 컴파일된 후 응답을 하게 된다. 이 과정에서 _jspService() 메서드가 생성되는데, 변환된 코드의 위치는 스크립트 요소에 따라 _jspService() 메서드 내부 혹은 외부에 놓을 수 있다.

 

<%! 선언부 %>

: 사용할 멤버 변수, 메서드 선언

 scriptlet에서는 선언부에 정의한 메서드를 호출만 할 수 있다. (스크립틀릿에서 메서드를 선언한다면 _jspService() 내부에 또다른 메서드를 선언하는 것)

 

<%= 표현식 %>

: 실행결과로 하나의 값이 남는 문장, 스크립틀릿 안에서 변수를 출력할 때는 out.print()를 사용해야 하므로... 표현식으로 단순하게!


_jspService()

: 탐색기나 네비게이터를 활용한다. 01DirectiveScript 폴더에 오면 조금 전 실행했던 jsp파일이 java파일과 class 파일로 만들어서 보임

 

Implicit Object 내장 객체

변수 이름 제공하는 기능 / 변수의 역할 변수 타입
request doGet, doPost 메서드의 첫 번째 파라미터 javax.servlet.http.HttpServletRequest
response doGet, doPost 메서드의 두 번째 파라미터 javax.servlet.http.HttpServletResponse
out 웹 브라우저로 HTML 코드를 출력하는 기능 javax.servlet.jsp.JspWriter
application JSP 페이지가 속하는 웹 애플리케이션에 관련된 기능 javax.servlet.ServletContext
config JSP 페이지의 구성 정보를 가져오는 기능 javax.servlet.ServletConfig
pageContext JSP 페이지 범위 내에서 사용할 수 있는 데이터 저장 기능 javax.servlet.jsp.PageContext
session 세션에 관련된 기능 javax.servlet.http.HttpSession
page JSP 페이지로부터 생성된 서블릿 java.lang.Object
exception   java.lang.Throwable

 

내장 객체의 영역 Scope

  • 내장 객체의 영역은 공유 된다
  • 영역의 속성 값을 사용하여 객체 전달 (form으로 객체 전달이 불가능하기 때문에)
  • Object 타입으로만 저장

각 객체가 저장되는 메모리의 유효기간, 각 영역에 저장된 데이터는 공유 범위가 서로 다름 (page < request < session < application 순)

데이터 전송 객체 DTO → 내장 객체 영역

 

웹에서 페이지page들이 모여 하나의 요청request을 처리하며, 요청들이 모여서 하나의 session을, session이 모여서 하나의 웹 application을 이룬다

내장객체 영역 메모리 소멸
영역 설명
page 동일한 페이지에서만 공유
request  하나의 요청에 의해 호출된 페이지와 forward(요청 전달)된 페이지까지 공유
session 클라이언트가 처음 접속한 후 웹 브라우저를 닫을 때까지 공유
application 한 번 저장되면 웹 어플리케이션이 종료 될 때까지 유지
주요 메서드 설명
getParameter(name) String으로 반환
Object getAttribute(String name) K에 해당하는 V 값을 가져옴
속성이 없을 경우 null 리턴
setAttribute(String name, Object value) 생성, 각 영역에 속성 저장, Object 타입은 모든 객체 저장 가능
removeAttribute(String name) 저장된 속성 삭제 (세션 만료, 로그아웃 등에서 사용)
삭제할 속성명이 존재하지 않더라도 에러Null Pointer Exception 발생 X

 

1. request 요청

: 클라이언트가 전송한 요청에 대한 정보를 가진 객체

요청 정보 전달 방법 특징
GET URL에 key와 value를 전달 url, 포트번호, 쿼리스트링 (ex) ?age=20 등 명시
POST BODY에 전달 보안성이 좋고 많은 양 전달 가능

Tip1) 용량이 큰 파일 전송 시 url의 용량에 제한이 있으므로 post와 get을 적당히 분배하여 사용

Tip2) POST 전송 시 한글 깨짐 주의!

request.setCharacterEncoding("UTF-8");

 

헤더 정보

user-agent: 웹브라우저의 종류

referer: 웹 서핑 시 링크를 통해 이동할 때 남는 흔적

cookie: 서버와 클라이언트 사이에 존재하는 정보

<body>
<a href="RequestHeader.jsp">요청 헤더 정보 읽기</a>
</body>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Enumeration" %>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RequestHeader</title>
</head>
<body>
	<h2>3. 요청 헤더 정보 출력하기</h2>
	<%
	Enumeration headers = request.getHeaderNames(); /* 요청한 곳의 모든 key값을 가져옴 */
	while (headers.hasMoreElements()) {
		String headerName = (String)headers.nextElement(); /* 헤더의 요소값을 headerName에 담음 */
		String headerValue = request.getHeader(headerName); 
		out.print("헤더명: " + headerName + ", 헤더값: " + headerValue + "<br>"); /* <%= 로 단순하게 표현 가능 */
	}
	%>
	<p>이 파일을 직접 실행하면 referer 정보는 출력되지 않습니다.</p>
</body>
</html>

 

2. response 응답

: 요청에 대한 응답을 웹 브라우저로 보내줌 (페이지 이동을 위한 redirect와 http 헤더에 응답 헤더 추가)

Tip) 페이지를 이동하기 위해서 html 에서 <a>, 자바스크립트에서는 location, jsp에서는 response 내장객체의 sendRedirect() 를 이용! (URL이 바뀌지 않는다)

 

3. out 객체

: scriptlet 내 변수 값 출력, 출력되는 모든 정보는 버퍼에 저장된 후 웹 브라우저에 출력

Tip) out.println은 자동 개행 X → String intro = request.getParameter("introduce").replace("\r\n""<br>"); /* 엔터를 <br>로 교체 */

 

4. application

: 내장 객체는 웹 앱당 하나만 생성된다.

   web.xml:  웹 앱에 대한 설정 관리 

 

 4-1. 드라이버 연결 정보 입력

<!-- 컨텍스트 초기화 매개변수 web.xml 추가 설정-->
<context-param>
	<param-name>INIT_PARAM</param-name>
    <param-value>web.xml에 저장한 초기화 매개변수</param-value>
</context-param>

Tip) <%! > 에서 내장 객체를 바로 사용할 수 없어 this를 사용한다. <% > 이나 <%@ > 은 내장객체를 그대로 사용하면 된다.

 

4-2. 에러별 출력 페이지 설정

<!-- 에러페이지 분기 설정: location은 위치 정보로 컨텍스 루트를 제외한 경로 -->
<error-page>
	<error-code>404</error-code>
    <location>/02ImplicitObject/Exception.jsp</location> <!-- 웹 페이지 이동 -->
</error-page>
<error-page>
	<error-code>405</error-code>
    <location>/02ImplicitObject/Exception.jsp</location>
</error-page>
<error-page>
	<error-code>500</error-code>
    <location>/02ImplicitObject/Exception.jsp</location>
</error-page>

 

'Java Server Pages' 카테고리의 다른 글

JSP JDBC ~ (0201 ~02)  (0) 2024.02.01
JSP 쿠키  (0) 2024.02.01
JSP 세팅 순서  (0) 2024.01.31
JSP 클라이언트 에러 암기  (0) 2024.01.31
Servlet  (0) 2024.01.30