본 강좌는 jsp를 통해 동적 웹 페이지를 어떻게 개발하고 향상시킬 수 있는 가에 관한 내용을 담고 있습니다. Jsp 강좌를 시작하기에 앞서 본 강좌는 현재로서는 어느 정도 웹개발에 친숙한 분을 가정하여 아주 기초부터 설명을 드리지는 않습니다. 물론 추후에 계속된 업데이트와 수정을 거쳐 세상에서 가장 쉬운 설명이 되도록 노력하겠습니다. Jsp는 Asp와 마찬가지로 자바를 모르더라도 사용할 수 있는 스크립트 언어로써 웹개발에 사용되지만 자바의 원래 가지고 있던 장점들을 고스란히 Jsp페이지에서 구현할 수 있으려면 먼저 어느정도의 자바기초문법에 대한 이해와 그에 따른 Servlet 구조를 나름대로 알고 있으셔야 합니다.제대로된 그리고 나름대로 특화된 웹개발을 하고자 하시는 분은 이 순서를 꼭 밟으시기를 권해드리면서 추후에 이 모든 강좌를 이곳에서 보실수 있도록 하겠습니다. Jsp 기초 - 스크립트 프로그래밍- Jsp 지시자(directive) 사용하기 - 문서를 어떻게 처리할 것인가?
- Jsp 스크립트 요소(scripting element) - 스크립트 언어로 작성된 내용을 삽입
- 주석(comment) - 세가지를 지원
1. Jsp 태그의 유형 1)스크립트 지향 태그 : ASP와 같은 스크립트 류에서 사용되는 형식의 이 태그는 구분자로 쉽게 알아 볼 수 있습니다. <% 로 시작하여 %> 로 끝나는 것이 기본이며 부가적으로 !, @, = 등과 같은 문자를 추가해 줌으로써 태그가 가지는 의미를 부여하고 있습니다. 2)XML기반의 태그 : XML문법과 XML태그 규칙을 따르는 태그이다. XML태그는 몸체를 가지는 태그와 몸체를 가지지 않는 태그로 구분됩니다. *몸체를 가지지 않는 태그의 예 <jsp:forward page=login.jsp />
*몸체를 가지는 태그의 예 <jsp:forward page=login.jsp > <jsp:param name=scmd value=log /> <jsp:param name=uid value=zezz /> <jsp:param name=token value=<%=token%> /> </jsp:forward>
2. JSP 지시자(Directive) : Jsp Container(혹 무슨 단어인지 모르다면 Jsp 파일을 컴파일하고 처리하는 일종의 작은 서버라고 생각해 두고 넘어갑시다.) 에게 현 Jsp 페이지와 관련된 여러가지 정보들을 보내는 역할을 합니다. 예를 들어 현재 페이가 사용할 수 있는 스크립팅 언어를 지시한다거나 다른 페이지의 코드 그 자체를 현 페이지에 그대로 삽입할 것을 지시한다거나(마치 CSS처럼)하는 일 등을 말합니다. <%@ 지시자 속성1=값 속성2=값2 ……..%> 1) Page 지시자 : page 지시자는 JSP페이지 전체에 대한 정보값들을 설정하는데 사용됩니다. page 지시자는 좀 종류가 많습니다. 다만 주로 사용하는 것만 사용하고 나머지는 기본값을 사용하므로 다 기억하고 있으실 필요는 없을 듯 싶군요. 그리고 대소문자를 자바에서는 철저히 구분한다는 것 아시죠? 여기서도 역시 마찬가지입니다. (1)language 속성 : Jsp 페이지의 모든 스크립트 요소에서 사용되는 스크립트 언어를 지정한다. 기본값은 Java 이며 Jsp Container에 따라서 자바 이외의 다른 스크립트언어를 지원할 지의 여부가 결정된다. <%@ page language=java %> (2) contentType 속성 : Jsp 페이지가 생성하는 문서의 MIME(Multipurpose Internet Mail Extentions) 타입을 나타내는 데 사용됩니다. 기본값은 text/html 입니다. <%@ page contentType =text/html %> 또한, contentType 속성을 Jsp페이지에서 사용하는 문자셋을 지정하는데 사용할 수 있습니다. 기본값은 ISO-8859-1 입니다. <%@ page contentType =text/html; charset=EUC-KR %> (3) info 속성: 페이지를 설명해 주는 문자열입니다. 값의 내용이나 길이의 제한은 없으며 기본값은 입니다. <%@ page info=Copyright 2000 by JspStudy.co.kr %> (4) import 속성:패키지의 이름을 명시하지 않고 클래스를 참조하고자 하는 경우에 사용됩니다. <%@ page import=java.util.* , java.io.*, java.sql.* ,…. %> (5) session 속성 :session 속성은 jsp페이지가 세션관리에 참여하는지를 나타냅니다. 값으로 false 또는 true 값을 가질 수 있으며 기본값은 true 입니다. <%@ page session=false %> (6) buffer 속성:bufer 속성은 페이지로부터 출력되는 내용을 처리하는 JspWriter의 버퍼링 상태를 지정한다. 기본값은 8kb 입니다. <%@ page buffer=none %> <%@ page buffer=16kb %> 버퍼를 사용함으로 생각해 볼 점은 페이지가 생성중인 출력스트림을 즉각적으로 보내지 않고 버퍼에 담아 둠으로 다른 페이지로 제어를 옮긴다거나 에 러가 발생했을 경우 버퍼에 저장된 스트림을 취소하여 원하는 출력물을 사용자에게 보여 지도록 할 수 있다는 것이다. (7) autoflush 속성 :버퍼가 다 찰 경우 어떻게 페이지를 처리할 것인가를 지정합니다. 다시 말해 true로 설정해 놓으면 버퍼가 다 찼을 경우 자동적으로 비워지게 되어 요청한 내용을 웹브라우저에게 전송하기 위해 HTTP서버에 보내지게 됩니다. 기본값은 true 이며 만약 buffer 속성의 값이 none 일 경우 autoflush 속성을 false로 지정할 수 없습니다. <%@ page autoflush=false %> (8) isThreadSafe 속성 :페이지에 대한 여려명의 사용자의 요청이 동시에 들어 올 경우에 안전하게 응답할 수 있는지의 여부를 나타날 때 사용됩니다. 기본값은 true 이며 이 속성값을 false 로 지정해 놓으면 요청을 동시에 처리하지 않고 요청한 순서대로 처리하므로 사용자의 내용을 처리하는데 상당히 오랜 시간이 걸릴 수 있으므로 충분히 처리시간을 고려하여 결정하셔야 합니다. <%@ page isThreadSafe=false %> (9) errorPage 속성 : Jsp 페이지를 처리하는 도중 페이지에서 오류가 발생할 경우 자신이 오류를 처리하지 않고 다른 페이지에서 처리하도록 지정할 수 있는 속성입니다. 직접 에러를 처리할 페이지의 로컬 URL을 적어 주시면 됩니다. <%@ page errorPage=/error/error.jsp %> URL에는 위의 예처럼 절대 URL을 사용할 수도 있고 상대 URL을 사용할 수 있습니다. 절대 경로는 '/'를 포함하며 상대경로는 '/'를 URL 맨 처음에 포함하지 않고 시작합니다. (10) isErrorPage 속성: 현재 자신의 페이지가 에러처리를 담당할 페이지임을 나타냅니다. <%@ page isErrorPage=true %> 기본값은 false 이며 에러페이지로 지정될 경우 예외에 관한 객체인 exception 객체를 사용할 수 있게 된다. (11)extends 속성 : 강의를 하지 않았습니다만 Jsp 페이는 Jsp 컨테이너의 의해 일단 Servlet으로 변환된 후(서블릿은 그냥 기존의 CGI를 자바언어로 대체하기 위한 특별한 목적의 순수자바소스코드라고 생각하시면 됩니다.) 요철을 처리하고 그 결과를 웹서버에 전송하여 클라이언트에게 보여 주게 됩니다. 이 때 컴파일 시점에서 자신이 상속을 받을 클래스를 지정할 수 있는데 이때 extends 속성을 사용할 수 있습니다. 물론 대부분의 컨테이너가 알아서 적정할 클래스들을 상속시켜 변환해 줌으로 거의 사용할 일은 없으리라 생각됩니다. <%@ page extends=kr.co.jspstudy.board.lecture.JspPage %>
2)include 지시자 : 지시자 중 두번째인 include 지시자는 단어 뜻 그대로 다른 페이지의 내용을 현재 페이지에 포함시킬 때 사용됩니다. <%@ include file=로컬URL%> URL은 상대경로와 절대경로 모두 가능하며 슬래쉬 '/' 의 유무에 따라 구분합니다.(error 속성 참조) <html> <body> <%@ include file=/board/Board.jsp %> </body> </html> include 지시자외에 뒤에서 배울 액션태그를 통해서도 페이지 삽입이 가능합니다. 다만 둘의 의미가 약간의 차이가 있습니다. include 지시자는 한마디로 include 시킬 파일의 내용(소스자체)을 전부 페이지에 넣어 함께 서블릿으로 컴파일을 시킨답니다. 이렇게 될 경우 포함될 페이지가 포함될 페이지의 모든 지역변수들을 사용할 수 있다는 의미가 됩니다. 그러나 앞으로 설명할 액션태그의 경우에는 소스자체를 포함시키는 것이 아니라 해당시점에 해당 리소스를 호출하여 수행결과를 포함하는 방법을 취하고 있습니다. 3)taglib 지시자 : 태그라이브러리란 Jsp기능을 확장할 때 사용하는 커스텀태그의 집합을 말합니다. 한마디로 Jsp태그(액션태그)가 지원하지 못하는 부분을 사용자가 직접 작성하여 그 태그를 불러다 사용하겠다는 말이지요. Jsp로 동적인 웹페이지를 구현할 때 가장 좋은 점은 구현부와 표현부를 분리하여 디자이너와 프로그래머가 상호 개별적으로 작업을 수행할 수 있다는 것인데 기존의 태그만으로 이런한 상호 분리를 완전히 해 내지 못할 때가 있습니다. 기존의 빈 관련태그만으로는 이러한 분리를 완벽히 소화해 낼 수 없다는 것이지요. 그래서 복잡한 코드가 JSP 파일안에 들어갈 수 밖에 없게 된다는 것입니다. 이런 경우 커스텀태그를 사용자가 직접 만들어 taglib지시자를 사용하여 호출하여 사용함로써 이러한 부분을 보완 할 수 있습니다. 참고로 말씀드리면 커스텀태그를 사용하기 위해서는 XML문법을 어느정도 아셔야 합니다. 따라서 여기서는 이런 것이 있다는 정도만 아시고 XML의 기초부분만이라도 공부를 하시는 것이 좋을 듯 싶군요. 여기서는 이런것이 있다는 정도만 알고 넘어가도록 하죠. 추후 장을 달리하여 XML과 함께 설명을 드리도록 하겠습니다. <%@ taglib URI=tagLibraryURI prefix=tagPrefix %> URI 는 커스텀 태그라이브러리가 있는 URI를 지정하며 prefix는 커스텀 태그를 구분하기 위한 구분자를 표시합니다.
3. 스크립트 요소(Scripting elements)
: 스크립트 요소란 한마디로 Jsp페이지에 직접 코드를 삽입할 수 있도록 해 줍니다. 기본적으로 <% … %>사이에 넣으며 ! 기호 및 = 기호를 추가하여 특별한 다른 의미를 부여하기도 합니다. 따라서 세가지로 구분할 수 있는데 <%…%>, <%!….%>, <%=….%> 입니다. 1)표현식(Expressions) : 표현식의 결과를 출력스트림에 추가합니다.<%= Expression ........... %> Current time: <%= new java.util.Date() %> <%=2000/345%> 2)스크립트릿(Scriptlets) : ASP 나 PHP와 유사한 형태로 스크립트 언어를 사용할 수 있게 해 주는 부분이다. 일반적으로 자바가 스크립트 언어가 된다. <% Java Code %> <% String queryData = request.getQueryString(); out.println(Attached GET data: + queryData); %> <% if (Math.random() < 0.5) { %> Have a nice day! <% } else { %> Have a lousy day! <% } %> <table> <% for(int i=0;i<10;i++) {%> <tr> <td><%=i%>번</td> </tr> <%}%> </table> 3)선언부(Declarations) : JSP 페이지에 사용될 변수와 메소드를 정의하는 영역입니다.<%! 선언부분 ........... %> <%! private int accessCount = 0; %> 서버가 재 기동되기전까지 계속적으로 증가 <%= ++accessCount %>
4. 주석(Comment)
1) HTML 형식의 주석 : HTML을 작성할 때와 같은 주석의 형태입니다. JSP 페이지내에 이러한 주석이 있을 경우 페이지가 서블릿으로 컴파일 되고 사용자의 브라우저에 출력할 때는 소스보기를 통해 주석코드가 보여 집니다. <!-- 주석내용 --> 만일 주석태그 내에 표현식을 사용하면 사용자가 원하는 주석을 동적으로 생성시킬 수도 있습니다.
<!-- 나의 이름은 <%=name%> --> 만일 name의 값이 '천풍' 이였다면 브라우저에서 소스보기할때 <!-- 나의 이름은 천풍 -->과 같은 코드가 보여집니다. 2) JSP 형식의 주석 : 이 주석은 오직 JSP 소스파일에만 사용되며 출력결과를 브라우저상에서 소스보기를 해도 이 태그를 사용한 주석처리는 나타나지 않습니다. 당연히 서블릿으로 코드 전환될 때에 이 주석은 아예 무시를 하게 됩니다. <%-- 주석내용 --%> <%-- 나의 이름은 <%=name%> --%> 여기서 한가지 집고 넘어가야 할 부분이 있습니다. HTML 주석의 경우는 서블릿으로 코드 전환시 주석을 무시하는 것이 아니라 생성되는 출력물에 주석으로서 처리되어 들어가게 되므로 주석안에 있는 표현식을 같이 컴파일 하게 됩니다. 따라서 name이라는 변수가 없다면 정의되어 있지 않은 변수입니다 라는 에러메시지를 띄우게 되는 것이지요. 하지만 JSP주석의 경우에는 아예 주석문 안에 있는 코드 전부를 무시해 버리므로 name이라는 변수가 없더라도 에러메시를 띄우지 않게 되는 것입니다. 아시겠죠? 3) 스크립트 언어 주석 : 스크립트릿이나 선언부에 사용되는 스크립트 언어가 지원하는 주석표기를 사용하는 것입니다. Resin 서버 같은 경우 스크립트언어로 자바스크립트까지 지원한다 하지만 JSP 파일을 생성하면서 자바언어를 사용하지 않는 다는 건 제 개인적인 생각으로 상상할 수가 없군요.. 그럼 자바언어의 경우 주석처리는 하는 법을 보겠습니다. <% ....... /* 주석 */ (여러줄 주석) ...... %> <% ..... // 주석(한줄 주석) .... %> |