Preface
이번 장에선 JSP 파일의 기본 구조와 간단한 문법을 알아봤다.
지시어의 종류와 속성, 스크립트 요소의 사용법만 익숙해지면 딱히 어려울만한 부분은 없을 것 같다.
- JSP: 동적인 웹 페이지를 개발하기 위한 웹 프로그래밍 기술
→ 자바를 사용하여 서버 측에서 웹 페이지들을 생성해 웹 브라우저로 전송한다.
- 서버(Server): 웹에서 서비스를 제공하는 컴퓨터 시스템
- 웹 서버(Web Server): 사용자로부터 HTTP를 통해 요청을 받거나, 웹 컨테이너가 전달해준 결과물을 정적인 페이지로 생성하여 사용자에게 응답해주는 소프트웨어
- 웹 컨테이너(Web Container): 웹 서버가 전송해준 요청을 기초로 동적인 페이지를 생성하여 웹 서버로 돌려주는 소프트웨어
- WAS(Web Application Server): 웹 애플리케이션이 실행될 수 있는 환경을 제공하는 소프트웨어
→ 웹 서버와 웹 컨테이너를 포함한 개념으로 운영체제와 비슷한 역할을 하는 소프트웨어이다.
- HTTP(HyperText Transfer Protocol) / HTTPS(HTTPS Secure): www에서 웹 서버와 사용자 사이의 통신을 위해 사용하는 통신 프로토콜이며, HTTPS는 암호화된 HTTP이다.
- 프로토콜(Protocol): 네트워크를 통해 컴퓨터들이 정보를 주고받는 절차 혹은 통신 규약
- 포트(Port): 컴퓨터 사이에서 데이터를 주고받을 수 있는 통로
1) 인터넷에선 IP 주소를 통해 서버 컴퓨터의 위치를 파악한다.
2) 컴퓨터가 제공하는 특정 서비스는 포트 번호를 통해 알 수 있다.
1. 동적 웹 페이지로의 여정과 JSP
- 전처리: JSP 페이지가 서블릿으로 변환되기 전에 수행되는 단계
- 자바 애플릿(java Applet): 웹에서 실행되도록 설계된 자바 앱을 통째로 웹 브라우저로 전송한 후, JVM을 탑재한 웹 브라우저가 이를 실행하는 방식으로 구동되는 기술
→ 현재 지원되지 않는 기술이다.
- 서블릿(Servlet): 클라이언트의 요청을 받으면 서버에서 처리한 후, 응답으로 결괏값만 보내주는 구조
→ 자바 파일(.java)을 컴파일한 클래스 파일(.class) 형태이다.
- 서블릿 컨테이너: 서블릿을 실행하고 관리해주는 런타임
→ 아파치 톰캣(Apache Tomcat)이 대표적이다.
- JSP 구동 방식: HTML을 기본으로 하고, 필요한 부분에만 자바 코드를 삽입하는 형태
1) JSP 파일을 서블릿으로 변환하여 서블릿을 실행하는 방식
2) JSP는 클라이언트에 보여지는 결과 페이지를 생성할 때, 서블릿은 UI가 없는 제어나 기타 처리 용도로 사용된다.
- 서블릿과 JSP의 차이
서블릿 | JSP |
자바 코드 안에서 전체 HTML 페이지를 생성한다. | HTML 코드 안에서 필요한 부분만 자바 코드를 스크립트 형태로 추가한다. |
변수 선언 및 초기화가 반드시 선행되어야 한다. | 자주 쓰이는 기능을 내장 객체로 제공하여 즉시 사용할 수 있다. |
컨트롤러(Controller)를 만들 때 사용한다. | 처리된 결과를 보여주는 뷰를 만들 때 사용한다. |
→ 컨트롤러: 입력에 따른 작업을 수행 (SW 시스템의 로직을 조정하고, 다른 구성요소 간의 상호작용을 관리한다.)
- 최근에 웹은 정적 웹 페이지와 동적 웹 페이지가 혼합된 형태를 띈다.
2. JSP 파일 기본 구조
- JSP 파일은 일반적인 HTML 파일에 몇가지 요소가 추가된 형태이다.
1) 지시어
2) 스크립트 요소: 선언부, 표현식, 스크립틀릿으로 나뉜다.
3. 지시어(Directive)
- 지시어: JSP 페이지를 자바(서블릿) 코드로 변환하는 데 필요한 정보를 JSP 엔진에 알려준다.
1) 지시어 종류 뒤에 다수의 속성을 지정할 수 있다.
2) 지시어 종류로는 page, include, taglib 세 가지가 있다.
<% 지시어종류 속성1="값1" 속성2="값2" ... %>
- page 지시어: JSP 페이지에 대한 정보를 설정
1) 문서 타입, 에러 페이지, MIME 타입 등의 정보를 설정한다.
2) MIME(Multipurpose Internet Mail Extensions): 인터넷에서 데이터 식별을 위해 사용하는 식별자
→ 파일 종류를 인식하고 적절한 처리 방법을 결정하는 데 사용한다.
속성 | 내용 | 기본값 |
info | 페이지에 대한 설명을 입력한다. | 없음 |
language | 페이지에서 사용할 스크립팅 언어를 지정한다. | java |
contentType | 페이지에서 생성할 MIME 타입을 지정한다. | 없음 |
pageEncoding | charset과 같이 인코딩을 지정한다. | ISO-8859-1 |
import | 페이지에서 사용할 자바 패키지와 클래스를 지정한다. | 없음 |
session | 세션 사용 여부를 지정한다. | true |
buffer | 출력 버퍼의 크기를 지정한다. 버퍼를 사용하지 않으려면 "none"으로 지정한다. | 8KB |
autoFlush | 출력 버퍼가 모두 채워졌을 때 자동으로 비울지 여부를 결정한다. buffer 속성이 none일 때 flase로 지정하면 에러가 발생한다. | true |
trimDirevtiveWhitespaces | 지시어 선언으로 인한 공백 제거 여부를 지정한다. | false |
errorPage | 해당 페이지에서 에러가 발생했을 때 에러 발생 여부를 보여줄 페이지를 지정한다. | 없음 |
isErrorPage | 해당 페이지가 에러를 처리할지 여부를 지정한다. | false |
- JSP는 실행 도중 에러가 발생하면 "HTTP Status 500" 에러 화면을 웹 브라우저에 표시해준다.
1) try / catch를 사용하여 직접 에러를 처리한다.
2) errorPage, isErrorPage 속성을 사용하여 설정한 페이지로 대체한다.
- errorPage, isErrorPage 속성 사용 방법
1) 오류가 발생할 페이지 상단 지시어 부분에 errorPage 속성을 추가한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
errorPage="출력할 에러 페이지 경로" %>
2) errorPage 속성에 연결한 에러 페이지를 작성한다.
3) 에러 페이지에서는 isErrorPage 속성을 반드시 "true"로 설정해야 한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isErrorPage="true" %>
- trimDirevtiveWhitespaces는 page 지시어가 웹 서버에서 처리된 후 공백으로 남게된 부분을 삭제하는 속성이다.
→ 일반적으로 공백은 큰 문제가 되지 않지만, 종종 안드로이드와 같은 외부 기기 연동 시 문제를 일으킬 수도 있다.
- JSP는 버퍼를 사용함으로써 포워드와 에러 페이지를 처리할 수 있다.
1) 실행 도중 에러가 발생하면 버퍼에 저장된 내용을 삭제하고 에러 화면을 표시한다.
2) 포워드(forward): 한 JSP 페이지나 서블릿에서 다른 JSP 페이지나 서블릿으로 제어를 전달하는 기능
3) 버퍼 용량이 부족한 경우 "JSP 버퍼 오버플로우" 오류 메시지가 출력된다.
- include 지시어: 반복되는 부분을 별도의 파일에 저장해두고 필요한 페이지에서 포함시킬 때 사용
1) 포함될 파일엔 <html> 등과 같은 태그는 모두 제거한 후 작성한다.
2) page 지시어는 필수적이므로 생략하지 않는다.
<%@ include file="포함될 파일 경로" %>
- taglib 지시어: EL(표현 언어)에서 자바 클래스의 메소드를 호출하거나 JSTL(JSP 표준 태그 라이브러리)을 사용하기 위한 지시어
4. 스크립트 요소(Script Elements)
- 스크립트 요소: JSP에서 자바 코드를 직접 작성할 수 있게 해준다.
→ 선언부, 스크립틀릿, 표현식으로 나뉜다.
- JSP 파일은 변환 과정에서 _jspService( ) 메소드가 생성되는데, 변환된 코드의 위치는 스크립트 요소에 따라 다르다.
- 선언부(Declaration): 스크립틀릿이나 표현식에서 사용할 멤버 변수나 메소드를 선언한다.
→ _jspService( ) 메소드 외부에 선언된다.
<%! 메소드나 멤버 변수 선언 %>
- 스크립틀릿(Scriptlet): JSP 페이지가 요청을 받을 때 실행돼야 할 자바 코드를 작성하는 영역
→ _jspService( ) 메소드 내부에 그대로 기술된다.
<% 자바 코드 %>
※ 스크립틀릿에서는 선언부에서 정의한 메소드를 호출만 할 수 있고, 다른 메소드를 선언할 순 없다.
- 표현식(Expression): 주로 변수의 값을 웹 브라우저 화면에 출력할 때 사용
1) 스크립틀릿 안에서 변수를 출력할 땐 out.println( )을 사용해야 하지만, 조금 더 단순한 방법으로 출력하기 위해 사용한다.
2) 반환값이 있는 메소드는 표현식에서 바로 호출할 수 있다.
<$= 자바 표현식 %>
- 스크립트 요소 코드
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%! // 선언부(메서드 선언)
public int add(int num1 , int num2) {
return num1 + num2;
}
%>
<html>
<head><title>스크립트 요소</title></head>
<body>
<% // 스크립틀릿(자바 코드)
int result = add(10, 20);
%>
덧셈 결과 1 : <%= result %> <br />
<!-- 표현식(변수) -->
덧셈 결과 2 : <%= add(30, 40) %>
<!-- 표현식(메소드 호출) -->
</body>
</html>
'JSP > 성낙현의 JSP 자바 웹 프로그래밍' 카테고리의 다른 글
쿠키(Cookie) (0) | 2023.06.04 |
---|---|
내장 객체의 영역(Scope) (0) | 2023.05.30 |
내장 객체(Implicit Object) (0) | 2023.05.29 |
이클립스 JSP 404 에러 해결 방법 (0) | 2023.05.26 |
성낙현의 JSP 자바 웹 프로그래밍 출처 (0) | 2023.05.25 |
댓글