컴퓨터과학과 김희천교수
학습개요 동적인컨텐츠를생성하는일에는 어떻게컨텐츠를생성할것인지 를지시해주기위한프로그래밍이어떤형태로든필요하다. JSP 기술은동적으로컨텐츠를생성하기위해, 프로그래밍코드가담긴스크립트를포함할수있게하고또한 HTML 태그를통해어려운자바코딩없이도자바객체를사용할수있게하고있다. JSP는 Java Server Pages의약자로최신버전은 2.1이며자바기반스크립트언어이며또한 J2EE 기술에속하는자바기술이다. JSP 기술은동적컨텐츠를만들어내는웹페이지를쉽게, 하지만최대의강력함과유연성을가지고작성할수있도록해준다.
학습목표 동적인웹컨텐츠를위한기술과구성방법을설명 JSP 기술의정의와기본개념, 장점을설명 JSP의동작원리를설명 웹어플리케이션구조와 JSP 수행흐름을설명
JSP 기술 동적인컨텐츠를만들기위해웹페이지를작성하는기술 JSP 기술의특징 JSP 페이지를만들기위한언어 JSP 페이지는클라이언트의요청에동적으로응답하기위한텍스트 HTML 페이지안에 Java 코드를포함시키거나 Java 컴포넌트를호출할수있음 플랫폼독립적으로 JSP 페이지나서버측컴포넌트를개발 Java 서블릿기술을이용 서블릿코드를작성하는편리한방법을제공
JSP 기술 JSP 기술의특징 Java EE 기술의하나로최신버전은 JSP2.1임 표현언어 (EL) 의제공 서버측객체나데이터를쉽게사용할수있음 JSP 언어의확장메커니즘제공 자바빈컴포넌트, EJB 컴포넌트, 커스텀태그라이브러리의개발과재사용
JSP 코드 <HTML> <HEAD><TITLE>Welcome</TITLE></HEAD> <BODY> <H3>Welcome!</H3> <P>Today is <%= new java.util.date() %>.</P> </BODY> </HTML>
서블릿코드 import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class Hello extends HttpServlet { public void doget(httpservletrequest rq, HttpServletResponse rsp) { rsp.setcontenttype("text/html"); try { PrintWriter out = rsp.getwriter(); out.println("<html>"); out.println("<head><title>welcome</title></head>"); out.println("<body>"); out.println("<h3>welcome!</h3>"); out.println("<p>today is "+new java.util.date()+".</p>"); out.println("</body>"); out.println("</html>"); } catch (IOException ioe) { // (error processing) } } }
JSP 페이지의구성 템플릿데이터 고정된데이터나템플릿컨텐츠 텍스트나 XML/HTML 태그를의미함 JSP 요소 : 동적인데이터의추가 JSP 기술은템플릿데이터에동적인데이터를추가하는강력한방법을제공
1 2 3 4 5 6 7 8 <HTML> <HEAD> <TITLE>JSP 예제 </TITLE> </HEAD> <BODY> <H1>Hello, JSP!</H1> </BODY> </HTML> hello_jsp1.jsp
1 2 3 4 5 6 7 8 9 10 11 <HTML> <HEAD> <TITLE>JSP 예제 </TITLE> </HEAD> <BODY> <% String str = <h1>hello, JSP!</h1> ; out.println(str); %> </BODY> </HTML> hello_jsp2.jsp
JSP 문서의기본구조 JSP 페이지의구성요소 스크립트요소 지시어 액션태그 내장객체 표현언어 사용자정의태그와 JSTL
1 2 3 4 5 6 7 8 9 10 11 12 13 <%@ page contenttype="text/html; charset=euc-kr" %> <%@ page import="java.util.date" %> <HTML> <HEAD> <TITLE> 오늘날짜와시각출력하기 </TITLE> </HEAD> <BODY> <% Date today = new Date(); out.println(today); %> </BODY> </HTML> today.jsp
스크립트요소 Java 프로그램조각 스크립트요소의종류 스크립트릿 JSP 페이지에삽입되는 Java 코드 <% %> 표현식 변수나수식의값을출력할때 JSP 페이지에삽입하는식 <%= %> 선언 JSP 페이지에삽입되는변수또는메소드선언문 <%! %>
스크립트요소 <% String a = Hello, Java ; %> <h1><%= a %></h1> <%! public int add(int a, int b) { return a + b; } %>
지시어 지시어의의미 JSP 페이지에대한전체적설정정보를지시 JSP 페이지의번역과실행과정에사용되는정보 <%@ 지시어이름속성 1= 값 1 속성 2= 값 2... %>
지시어 지시어의종류 include page JSP 페이지의특정영역에다른문서를포함 번역과정에서삽입시킬텍스트나코드를지정 JSP 페이지에대한정보를지정 사용할스크립트언어, 상속받을클래스, import할패키지, JSP가생성하는문서의타입, 출력버퍼의크기, 사용할에러페이지등 <%@ include file= /jsp/userinfopage.jsp" %> <%@ page contenttype="text/html; charset=euc-kr" %> <%@ page import="java.util.date" %>
지시어 지시어의종류 taglib 사용자정의태그라이브러리를지정 태그라이브러리파일의위치와접두어를지정 <%@ taglib uri= oracustomtags" prefix= oracust %>
내장객체 많이사용되는기능을객체형태로제공한것 내장객체 (implicit object) 의사용 별도의선언이나초기화없이사용가능 요청파라미터읽어오기, 응답결과전송하기, 세션처리하기, 웹어플리케이션정보읽어오기등 예 : request, response, session, application, out, page 등
액션태그 JSP 페이지에서특별한기능을제공하는표준액션 액션태그의의미 요청을처리할때특별한기능을수행하는것 XML 태그와같은모양 시작태그와요소이름, 속성, 몸체, 마감태그 <jsp: 액션태그이름 > 의형태
액션태그 1 2 3 4 5 6 <%@ page contenttype="text/html; charset=euc-kr" %> <HTML> <BODY> <jsp:include page="mypage.jsp" /> </BODY> </HTML> jsp_example3.jsp
표현언어 표현언어의의미 JSP 페이지내부에서사용되는간단한스크립트언어 스크립트요소의사용이없는태그기반언어 내장객체나 JSTL 과함께사용할수있음
사용자정의태그와 JSTL 사용자정의태그 사용자가정의하는태그 JSP 표준태그를확장한것 JSTL(JSP Standard Tag Library) 자주사용되는사용자정의태그들을모아표준화한태그라이브러리 조건문, 반복문과같은프로그래밍적요소를태그형태로사용할수있게함
page 지시어 페이지의속성을나타내기위한것 page 지시어의용도 출력버퍼관련속성, 생성시킬문서의기본정보, import할클래스등을설정 <%@ page contenttype= text/html; charset=euc-kr import= java.sql.* %> <%@ page session= false %> <%@ page import= packages.mypackage.* errorpage= boof.jsp %> <%@ page buffer= 20kb %>
page 지시어에서사용되는주요속성 속성설명기본값 클라이언트로전송될데이터가저장되는장소를 출력버퍼 라고하는데출력버퍼가다찼을경우자동으로버퍼를비울지의여부를나타낸다. autoflush 'true' 일경우버퍼가차게되면버퍼를비워내용을클라이언트에보낸다. 'false' 일경우버퍼가차게되면예외를발생시킨다. JSP 페이지실행결과로생성되는문서의종류 (MIME 타입 ) 와사용 contenttype 될 charset 정보를설정한다. import JSP 페이지에서사용할자바클래스를지정한다. JSP 페이지의스크립트요소 ( 스크립트릿, 표현식, 선언 ) 에서사용 language 할수있는프로그래밍언어를설정한다. JSP 현재버전에서는 java 만가능하다. true text/html java
page 지시어에서사용되는주요속성 속성설명기본값 session JSP 페이지에서 session 객체를사용할지의여부를지정한다. true' 일경우 session 객체를사용할수있고 false' 일경우 session 객체를사용할수없다. true JSP 페이지의출력버퍼크기를지정하며 8kb, 256kb 와 buffer 같이지정한다. none 일경우출력버퍼를사용하지않는다. info JSP 페이지에대한설명을텍스트로입력할때사용된다. 8kb errorpage JSP 페이지를실행하는동안에러가발생할때보여줄페 이지가무엇인지를설정할때사용된다.
page 지시어에서사용되는주요속성 속성설명기본값 현재페이지가에러페이지인지의여부를지정한다. iserrorpage true 이면현재페이지를에러페이지로사용할수있고, false 이면에러페이지로사용할수없다. pageencoding JSP 페이지자신의문자인코딩을지정한다. 표현언어를지원할지의여부를설정하며 JSP 2.0 버전부터새롭게추가된속성이다. iselignored false 일경우표현언어를지원하며 true 일경우표현언어를지원하지않는다. trimdirectivew 생성되는문서에서공백문자를제거할지의여부를지정한 hitespaces 다. true 일경우공백이제거된다. false false false
page 지시어 contenttype 속성 JSP 페이지로부터생성되는응답문서의 MIME 타입과 charset을설정 MIME는다양한종류의데이터를인터넷상에서송수신할때사용되는통신규약 기본값은 text/html이며 text/xml, text/plain 등이있음 웹서버가데이터를전송할때데이터의내용에앞서종류에대한정보를보냄 문자의인코딩방법을지정
contenttype 속성 <%@ page contenttype="text/html; charset=euc-kr" %>
page 지시어 import 속성 JDK 에서제공하는클래스를사용할때, 사용할 클래스를명시함 <%@ page import = "java.util.date" %> <%@ page improt = "java.sql.connection" %> <%@ page import = java.sql.statement %> <%@ page import = "java.util.date, java.sql.*" %>
import 속성 1 2 3 4 5 6 7 8 9 10 11 12 13 <%@ page contenttype="text/html; charset=euc-kr" %> <%@ page import="java.util.calendar" %> <HTML> <BODY> <% Calendar today = Calendar.getInstance(); int year = today.get(calendar.year); int month = today.get(calendar.month) + 1; int date = today.get(calendar.date); %> 오늘은 <%= year %> 년 <%= month %> 월 <%= date %> 일입니다 </BODY> </HTML> today_calendar.jsp
import 속성
page 지시어 trimdirectivewhitespaces JSP 실행결과에불필요한줄바꿈문자를제거함 JSP 페이지에서템플릿텍스트가공백문자로만구성되면이것이보존되기때문 1 2 3 4 5 11 12 13 <%@ page contenttype="text/html; charset=euc-kr" %> <%@ page import="java.util.calendar" %> <HTML> <BODY> 오늘은 <%= year %> 년 <%= month %> 월 <%= date %> 일입니다 </BODY> </HTML> today_calendar.jsp
trimdirectivewhitespaces 속성
trimdirectivewhitespaces 속성 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <%@ page contenttype="text/html; charset=euc-kr" %> <%@ page import="java.util.calendar" %> <%@ page trimdirectivewhitespaces="true" %> <HTML> <BODY> <% Calendar today = Calendar.getInstance(); int year = today.get(calendar.year); int month = today.get(calendar.month) + 1; int date = today.get(calendar.date); %> 오늘은 <%= year %> 년 <%= month %> 월 <%= date %> 일입니다 </BODY> </HTML> today_calendar.jsp
스크립트요소 동적인컨텐츠를만들기위해프로그램작성에사용되는요소 스크립트릿 JSP 페이지에삽입되는 Java 코드조각 <% %> 의형태
스크립트릿 1 2 3 4 5 6 7 8 9 10 11 12 <%@ page contenttype="text/html; charset=euc-kr" %> <HTML> <BODY> 30 의약수는다음과같다.<br> <% int i = 1; for(i = 1; i <= 30;i++) { if(30 % i == 0) out.print(i + ); } %> </BODY> </HTML> common_divisor.jsp
스크립트요소 표현식 스크립트릿을사용하지않고변수나수식의값을 JSP 페이지실행결과에포함시키기위한것 <%= 값또는수식 %> 의형태 String 표현으로변환되며세미콜론이없음
표현식 1 2 3 4 5 6 7 8 9 10 11 12 <%@ page contenttype="text/html; charset=euc-kr" %> <HTML> <BODY> <% String str = 표현식사용예제입니다. ; int a = 10, b = 20; %> <h2><%=str%></h2> <h3><%=a%> 더하기 <%=b%> 는 <%=a+b%> 입니다.</h3> <h3>1 부터 5 가지의합은 <%=1+2+3+4+5%> 입니다.</h3> </BODY> </HTML> expr_example.jsp
표현식
스크립트요소 선언 스크립트릿이나표현식에서사용되는메소드나멤버변수를 선언하기위한것 <%! public 리턴타입메서드이름 ( 파라미터목록 ) { 메서드내용 ; } %> <%! double f1=0.0; %>
선언 1 2 3 4 5 6 7 8 9 10 11 12 13 <%@ page contenttype="text/html; charset=euc-kr" %> <%! public int sum(int a) { int s = 0; for(int i = 1;i <= a;i++) s += i; return s; } %> <HTML> <BODY> 1 부터 100 까지숫자의합은 <%=sum(100)%> 입니다. </BODY> </HTML> sum_method.jsp
선언
선언 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <%@ page contenttype="text/html; charset=euc-kr" %> <%! public int sum(int a) { int s = 0, i = 1; for(inti=1;i<=a;i++)s+=i; return s; } %> <HTML> <BODY> <% int s1 = sum(100); int s2 = sum(1000); %> 1 부터 100 까지숫자의합은 <%=s1%> 입니다.<br> 1 부터 1000 까지숫자의합은 <%=s2%> 입니다. </BODY> </HTML> sum_method2.jsp