Servlet 과 JSP

동적 HTML을 구성하는 방법은 여러가지가 있다

Perl , 
PHP ,
JSP나 Servlet을 사용하기도 한다


자바가 가진 네트워크 프로그램에서 장점이나, 프로그램의 깔끔함은 저주받은 I/O 성능에 비해 아주 대단하다 할 수 있으므로 JSP나 Servlet을 이용하지 않을 이유가 없다


JSP를 이해하기 위해서는 Servlet을 먼저 이해해야 한다

Servlet은 동적으로 HTML을 생성하는 자바 프로그램이라고 볼 수 있다.


서블릿은 동작 원리가 정해져 있다

메모리에 최초 로딩 될 때 수행 되어져야 하는 내용의 것들이 init()에 작성되고,

실제 Client에 제공하는 서비스 내용이 Service()에 작성되며, 메모리에서 해제 될 때 수행 되어지는 것들이 destroy()에 작성 된다


서블릿의 init()과 destroy()에서 하는 일은 고정적인 일이다

모든 서블릿에 대해서 공통적으로 수행하는 일들이기 때문에 기본 Servlet class에서 위 메소드는 정의 되어 있다

Client의 요청에 따라 실제 서비스를 해야 하는 것은 요구에 따라 다 다르기 때문에 service() 메소드는 따로 프로그래머가 정의를 해야 한다

사용자 2명이 동시에 서버에 요청을 보내면, service를 수행하는 쓰레드가 2개 만들어져 동작한다


그런데, 자바코드로 HTML Page를 만들어 내면 코드 내부의 HTML이 직관적이지 못하다는 문제가 생긴다

테이블을 만들기 위해 for문과 print문이 반복되는 것은 그래도 이해 할 만 하지만,

조금 더 복잡한 테이블의 경우 코드 사이즈가 길어지더라도 HTML 코드로 만들었을 때가 오히려 더 직관적으로 이해하기 쉽다


JSP는 이런 문제점을 해결하기 위한 대안이라고 할 수 있다

그러므로 짐작하는 바와 같이 JSP는 자바 코드와 HTML 코드를 함께 쓸 수 있게 되어 있다

JSP는 기본적으로 HTML 코드에 바탕을 두고 있고, 자바 코드를 삽입할 수 있는 영역을 할당 해준다고 보는 편이 쉽다


디자이너나 퍼블리셔가 표현하고자 하는 페이지 형태는 HTML 코드를 이용해 만든다

그리고 동적으로 바뀌는 부분들만 개발자가 자바 코드를 이용해 페이지에 작업한다

이것이 JSP를 사용하는 목적이다


JSP Container (웹 컨테이너의 한 부류==웹로직, 톰캣)는 JSP 페이지를 바로 이해하지는 못한다

JSP Container는 Servlet만 이해 할 수 있으며, JSP 파일에 대해서는 사전에 Servlet Class로 변환하는 과정을 거친다

위에서 설명한 Servlet 동작 원리와 함께 정리하면 JSP Container는 JSP 파일이 변경이 되었거나 새로 만들어져서 Servlet Class로 변환해야 하는지를 확인하고, 그런 경우 Servlet Class로 변환한 뒤 메모리에 적재한다

메모리에 적재될 때 최초 init() 메소드를 수행하고 요청에 따라서 servlet() 메소드가 쓰레드로 요청을 수행한다. 메모리에 해제되면서 destroy() 메소드를 수행한다


하나의 JSP 페이지가 하나의 Servlet Class로 변환된다는 점에 주목할 필요가 있다.
JSP에서 자바 코드를 삽입하는 부분은 3가지이다.
선언문, 스크립트릿, 표현식이 그 3가지 이다. 
선언문과 스크립트릿의 차이는 JSP가 표현하는 Servlet Class의 멤버변수나 멤버 함수, 로컬변수를 다루는 차이라고 생각하면 된다.

1) 선언문
선언문은 Servlet Class의 멤버 변수나 멤버 함수를 선언한다.
선언문의 형식은 다음과 같다.
<%!
선언문 내용
%>

2) 스크립트릿
스크립트릿은 Servlet Class의 Service()에서 사용되는 지역 변수나 루틴을 표현한다.
스크립트릿의 형식은 다음과 같다.
<%
스크립트릿 내용
%>

3) 표현식
표현식은 Servlet Class의 변수나 메서드 결과 값을 화면에 출력하는 역할을 한다.
표현식의 형식은 다음과 같다.
<%= 변수 혹은 메서드 %>

위 요소를 사용한 다음 예제를 보고 정리한다.
<html>
<body>
<%!
String str = "No";
%>

<%
int i = 0;
if(str == "NO")
i = 1;
else
i = 2;
%>

<%= (i == 1) ? "Good Job" : "No Way"%>
</body>
</html>


http://www.thinkonweb.com/jspbook/lecture/Chapter03.pdf - 참조

+ Recent posts