JSP란 무엇일까?
JSP는 자바가 서버에서 실행되는 형태로 문서내에 있는 자바코드를 서버에서 실행시켜주는 페이지(?) 같다.
EJS처럼 html문서 내에 자바코드가 들어가게 되는 형태이다.
구조
1. 지시영역 (<%@ %>)
지시영역는 해당 페이지의 정보를 설정한다고 보면 된다.
예를 들면 <%@ page contentType="text/html;charset=utf-8"%>이런 식으로 페이지의 파일 형태나 인코딩방식을 정의할 수 있고, <%@ page import="java.sql.Connection"%> 이런 식으로 클래스를 import할 수 있다.
2. 선언부 (<%! %>)
선언부는 멤버변수를 선언하는 것과 같다고 볼 수 있다.
<%! int number=3%>와 같이 쓸 수 있으며, 이 변수는 응답에 완료하기 전까지 메모리에 남아있는 변수로 생각할 수 있다.
3. 스크립트릿 (<%%>)
스트립트릿(Scriptlet)는 단순히 문서내에 자바코드를 삽입할 수 있는 영역이다.
<table>
<tr>
<%for(int i=0;i<10;i++){%>
<td><%out.print(i);%></td>
<%}%>
</tr>
</table>
EJS와 매우 흡사하며, 위 코드와 같이 사용할 수 있다.
4. 표현식 (<%= %>)
표현식은 페이지내에 선언된 메모리에 남아있는 변수들을 쉽게 사용할 수 있는 방법이다.
3번 코드블럭 내에 <%out.print(i);%>를 단순히 <%=i%>로 간편히 사용할 수 있게 된다.
작동원리
JSP문서는 서버에서 처리를 하게 되는데, 만약 서버로 정적인 요소(html, image..)들이 요청된다면, 서버는 단지 요청하는 요소를 클라이언트측으로 응답만 한다.
만약 .jsp 파일이 요청된다면 서버는 해당 파일내에 <%%>(스크립트릿)의 내용들을 해석하여 실행한 뒤, 이 문서를 html형태의 문서로 변환하여 클라이언트측으로 응답하게 된다! (정말 신기함)
<%@ page contentType="text/html;charset=utf-8"%>
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<script>
function getMsg(){
return "<%="안녕"%>";
}
<%
out.print(getMsg()+" 하세요");
%>
</script>
</head>
<body>
</body>
</html>
예를 들어, 위와 같은 코드의 문서를 서버로 요청하게 된다면?? 과연 실행이 될까??
getMsg()는 현재 스크립트 영역 내에 존재하는 메서드이다. 그리고, 바로 아래에 <%%>내에서 getMsg()를 호출하고 있다.
위에서 말했듯이, <%%>는 서버에서 실행되는 영역이다. 그리고 스크립트 영역의 코드는 반드시 클라이언트 측에서 실행된다. 이 개념을 이해했다면, 왜 에러가 나는 지 알 수 있다.
이유는, 실행순서(?)이다.
1. 먼저, 클라이언트가 .jsp 파일을 요청하게 되면 서버는 해당 파일 내에 존재하는 <%%>를 실행하게 된다.
2. 실행도중 getMsg()라는 메서드를 만나게 되는데, 이때 undefine 예외가 발생한다.
3. 왜냐하면, getMsg()는 스크립트 영역 내에 존재하는 메서드로 클라이언트에서 실행되기 때문에, 서버가 코드를 해석할 때는 아직 define되지 않은 상태이기 때문이다!!
내장객체
jsp에서 지원하는 내장객체는 아래와 같다.
1. request : 클라이언트의 요청정보를 갖는 객체 (요청에 대한 처리 완료 시 소멸)
2. response : 클라이언트에게 보낼 응답정보를 갖는 객체 (요청에 대한 처리 완료 시 소멸)
3. out : jsp에 출력을 담당하는 객체
4. session : 정보를 세션 범위에서 유지하지 위해 지원되는 객체(로그인 정보 처리 시 사용할 예정)
5. application : 정보를 어플리케이션 범위에서 유지하기 위해 지원되는 객체
6. page : jsp를 표현한 객체
7. config : jsp 설정 정보를 보유한 객체
8. exception : jsp에서 발생한 예외정보를 보유한 객체
또한, 내장객체는 이미 내부적으로 인스턴스가 지원되면서, 해당 인스턴스의 변수명까지 이미 정해진
상태이므로, 개발자는 그냥 사용하기만 하면 된다!!
해당 객체들의 상세한 내용은 다음 시간에 ~ ^^
참고
jsp 파일 내에서 라이브러리나 외부클래스들을 사용하고 싶다면??
Sun사에서 이미 정해놓은 WEB-INF라는 보안된 디렉터리에 파일들을 위치시켜야한다!!(프로젝트 폴더 내에서)
클래스의 위치는 WEB-INF/classes, 라이브러리의 위치는 WEB-INF/lib에 두어야한다!
'프로그래밍 > JSP' 카테고리의 다른 글
JSP | session (0) | 2020.12.16 |
---|---|
JSP | 커넥션풀(Connection Pool) (0) | 2020.12.11 |
JSP | MyBatis 사용해보기 (0) | 2020.12.10 |
JSP - 페이징 이해 (0) | 2020.12.08 |
JSP - 이미지 업로드 (0) | 2020.12.04 |