1. JSP를 시작하며 인천대학교 컴퓨터공학과 성 미 영 http://marvel.incheon.ac.kr/~mysung mailto:mysung@incheon.ac.kr
JSP를 시작하며1 1. JSP(Java Server Page)는 웹 프로그래밍 언어이다. 원래 서블릿(servlet)과 JSP는 Sun사의 Java 웹 서버 제품의 보조 기술로 등장 첫 번째 JSP API(Application Programming Interface) 스펙(specification)이 1998년에 발표됨 1999년 5월 JSP 1.0 스펙이 발표되면서 안정적인 개발 플랫폼의 면모를 갖춤 JSP 기능 역시 서블릿 기술을 사용하여 구현 되었기 때문에 기존의 서블릿 제품들은 JSP의 장점을 그대로 충분히 흡수함 최근 JSP가 급속히 확산되고 있으며 능력 있는 개발자가 부족한 상태임 JSP(JavaServerPage)
JSP를 시작하며2 2. JSP의 특징 플랫폼에 독립적이다. 소프트웨어의 재사용성이 증가된다. “Write Once, Run Anywhere” 개발자는 하드웨어나 운영체제가 어떤 것이 돌아가는지 고려하지 않아도 된다. 개발이 되면 다른 환경으로 큰 변경 작업 없이 이식이 가능하다. 소프트웨어의 재사용성이 증가된다. 미리 개발해 놓은 자원을 다른 곳에서도 새로운 개발 없이 사용이 가능하다. 안정적이며 수행 속도가 향상된다. JSP는 스크립트지만 브라우저가 읽어 들이기 전에 JSP컨테이너에 의해 컴파일이 되고 서블릿 코드로 변환 된다는 점에서 속도가 향상된다는 말에 의문이 생길 수 있지만 이 과정은 처음에 한번만 일어나기 때문에 한번 컴파일이 된 JSP페이지는 뛰어난 속도를 자랑한다. 또한 JSP는 하나의 요청마다 쓰레드를 생성하기 때문에 하나의 요청마다 프로세스를 생성하는 CGI나 ASP보다 뛰어나다. JSP(JavaServerPage)
JSP를 시작하며3 디자인 부분과 프로그램 부분의 분리가 가능하다. JSP는 컴포넌트 중심적인 디자인이기 때문에 자바빈즈(JavaBeans)로서 만들어진 서버측 객체의 기능을 사용할 수 있는 HTML과 비슷한 태그 시스템을 가지고 있다. 프로그래머는 자바빈즈로 구현하고 프리젠테이션 팀이 JSP를 통해 자바빈즈를 사용한다. J2EE(Java 2 Enterprise Edition)의 진입로이다. Sun사는 1998년경부터 기업용 서버 플랫폼에 대비를 해오고 있다. 그 대표 적인 것이 Java 2 Enterprise Edition이다. J2EE에는 JSP를 필두로 서블릿(Servlet),XML,EJB(Enterprise JavaBean),JavaMail,JNDI(JavaNaming and Directory Interface),CORBA등의 핵심 기술로 이루어져있다.(교재 p13참조) J2EE핵심 기술들을 모두 JSP가 웹에서 연동하고 있다. JSP(JavaServerPage)
JSP를 시작하며4 3. JSP와 서블릿 서블릿(Servlet)은 서버에서 실행되도록 컴파일된 웹 어플리케이션이다. 서블릿은 소스제작→컴파일→결과물을 서버의 디렉토리에 저장하는 과정을 거친다. JSP는 컴파일하는 과정에서부터 웹 프로그램에서 서블릿을 불러들이는 과정까지를 JSP 컨테이너가 알아서 하도록 만들어졌다. JSP 컨테이너의 종류에는 Jakarta-tomcat, JRun, Resin 등이 있으며 여기서는 Jakarta-tomcat을 사용할 것이다. JSP(JavaServerPage)
JSP를 시작하며5 다음 그림은 JSP 컨테이너가 JSP서블릿을 생성하여 실행시키는 과정을 나타낸 것이다. JSP(JavaServerPage)
JSP를 시작하며6 다음은 실제로 JSP 파일을 서블릿으로 변환한 소스를 보자 위의 소스는 JSP 소스이다. 다음에 나오는 소스는 JSP 컨테이너가 JSP 소스를 서블릿으로 변환시킨 소스이다. JSP(JavaServerPage)
JSP를 시작하며7 JSP(JavaServerPage) import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; import java.io.PrintWriter; import java.io.IOException; import java.io.FileInputStream; import java.io.ObjectInputStream; import java.util.Vector; import org.apache.jasper.runtime.*; import java.beans.*; import org.apache.jasper.JasperException; public class _0002fFirst_0002ejspFirst_jsp_0 extends HttpJspBase { static { } public _0002fFirst_0002ejspFirst_jsp_0( ) { private static boolean _jspx_inited = false; public final void _jspx_init() throws JasperException { JSP(JavaServerPage)
JSP를 시작하며8 JSP(JavaServerPage) public void _jspService(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { JspFactory _jspxFactory = null; PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; String _value = null; try { if (_jspx_inited == false) { _jspx_init(); _jspx_inited = true; } _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType("text/html;charset=ISO-8859-1"); pageContext = _jspxFactory.getPageContext(this, request, response, "", true, 8192, true); application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); JSP(JavaServerPage)
JSP를 시작하며9 JSP(JavaServerPage) // HTML // begin [file="C:\\jakarta-tomcat-//3.2.2\\webapps\\examples\\First.jsp";from=(0,0);to=(4,3)] out.write("<html>\r\n<head><title>KEJ's Web-Server</title></head>\r\n<body>\r\n <hr>\r\n "); // end // begin [file="C:\\jakarta-tomcat- //3.2.2\\webapps\\examples\\First.jsp";from=(4,5);to=(8,4)] out.println("<p align='center'>Hello</p>"); out.println("<p align='center'>This is <B>KEJ'</B>s Web Server!</p>"); // HTML // begin [file="C:\\jakarta-tomcat-//3.2.2\\webapps\\examples\\First.jsp";from=(8,6);to=(12,0)] out.write("\r\n <hr>\r\n</body>\r\n</html>\r\n"); } catch (Exception ex) { if (out != null && out.getBufferSize() != 0) out.clearBuffer(); if (pageContext != null) pageContext.handlePageException(ex); } finally { if (out != null) out.flush(); if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext); } JSP(JavaServerPage)