ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JSP] JSP(Java Server Pages)와 자바 서블릿(Java Servlet)
    Legacy/JAVA 2015. 8. 26. 22:10
    728x90

    참고 - 뇌를 자극하는 JSP & Servlet, 위키백과


    JSP와 서블릿은 둘 다 동적으로 HTML 문서를 생성하는 기술이다.

    JSP는 HTML 문서 안에 Java 코드를 포함하고 있는 반면,

    자바 서블릿은 자바 코드 안에 HTML을 포함하고 있다.


    이 둘 중 JSP가 더 선호되고 있지만, JSP는 서블릿을 기반으로 하는 기술이기 때문에 서블릿에 대해서도 알아야 한다.


    서블릿에 대해,

    서블릿은 자바를 기반으로 하는 웹 어플리케이션 프로그래밍 기술이다. 이 기술에서는 자바 클래스 형태로 웹 어플리케이션을 작성해야 하는데, 그 클래스를 서블릿 클래스라고 한다. 이 서블릿 클래스를 작성할 때는 지켜야할 규칙이 있다. (참고 - 서블릿 규격서(Servlet Specification))

    첫째, 서블릿 클래스는 javax.servlet 패키지에 속하는 Servlet 인터페이스를 구현하도록 만들어야한다. 하지만, 이 인터페이스를 구현하는 클래스를 작성하는 것은 아주 복잡하고 번거로운 작업이다. 그래서 서블릿 규격서에서는 그보다 쉬운 방법을 권장하고있다. 그것은 Servlet 인터페이스를 구현하는 javax.servlet.http.HttpServlet이라는 클래스의 서브클래스를 작성하는 방법이다.

    둘째, doGet이나 doPost라는 메소드를 선언하고, 그 안에 서블릿 클래스가 호출되었을 때 해야 할 일을 넣어야 한다. 이 메소드를 작성할 때도 지켜야 할 것이 있는데, 그것은 메소드의 파라미터와 익셉션에 관한 것이다. 이 두 메소드는 각각 두 개의 파라미터를 받아야한다. 첫 번째는 javax.servlet.http.HttpServletRequest 타입이어야하고, 두 번째는 javax.servlet.http.HttpServletResponse 타입이어야 한다. 그리고 java.io.IOException과 javax.servlet.ServletException 익셉션을 던질 수 있도록 선언해야한다.

    셋째, 동적 HTML 문서를 생성하기 위해서는 doGet, doPost 메소드의 두 번째 파라미터(javax.servlet.http.HttpServletResponse)를 이용해야한다. 이 파라미터에 대해 getWriter라는 메소드를 호출하면 PrintWriter 타입의 객체가 리턴되고, 그 객체에 대해 print, println, printf 등의 메소드를 호출하면 웹 브라우저로 HTML 코드를 출력할 수 있다.


    이 외에도 지켜야 할 규칙은 많이 있지만 이 세 가지는 가장 기본적인 것들이다.

    다음은 위 세 가지 규칙을 지켜 만든 서블릿 클래스이다. 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    public class HundredServlet extends HttpServlet {
        public void doGet(HttpServletRequest request, HttpServletResponse reponse) throws ServletException, IOException {
            PrintWriter out = response.getWriter();
            out.println("<HTML>");
            out.println("<HEAD><TITLE>Sum of 1 to 100</TITLE></HEAD>");
            out.println("<BODY>");
            int total = 0;
            for(int cnt = 1; cnt <= 100; cnt++)
                total += cnt;
            out.println("1 + 2 + 3 + ... + 100 = " + total);
            out.println("</BODY>");
            out.println("</HTML>");
        }
    }
    cs

    서블릿은 자바의 장점을 물려받았다는 것에서 큰 이점이 있다.

    하지만 서블릿은 프로그래밍 작업을 효율성을 떨어뜨린다. 그 이유는 HTML 코드가 자바 코드 안으로 들어가 있기 때문이다. 이것은 디자인 작업을 위해서도 자바 소스에 손을 대야하는 비효율성을 낳는다. 이를 보완하기 위해 새로운 기술이 개발되었는데 그것이 JSP이다.


    JSP에 대해,

    JSP는 Java Server Pages의 약자이다. 이 역시 서블릿과 마찬가지로 자바를 기반으로 하는 웹 어플리케이션 프로그래밍 기술이다. 다음은 JSP 코드의 예이다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <HTML>
    <HEAD><TITLE>1부터 100까지의 합</TITLE></HEAD>
    <BODY>
    <%
        int total = 0;
        for(int cnt = 1; cnt <= 100; cnt++)
            total += cnt;
    %>
    1부터 100까지의 합은?    <%= total%>
    </BODY>
    </HTML>
    cs

    <% %> 태그와 <%= %> 태그ㅡ가 존재한다. <% %>태그는 그 안에 자바 명령문이 들어올 수 있고,

    <%= %> 태그에는 자바 식을 쓸 수 있다. 이 식은 웹 서버 쪽에서 계산되고 그 결과만 웹 브라우저로 전송된다. 즉 1부터 100까지 더한 5050이 브라우저로 전송된다.

    위에 있는 서블릿보다 훨씬 간단하다. 또한 디자이너는 HTML 코드만을 고칠 수 있고, 프로그래머는 자바 코드만을 고칠 수 있다.

    그렇다면 서블릿은 필요하지 않고 JSP만 있으면 모든 것이 해결될까?

    그렇지 않다. HTML 중심의 코드 구조가 오히려 소스 코드를 이해하기 어렵게 만들 수 있다. JSP는 컴파일하지 않고 소스코드를 그대로 저장하기 때문에 문제가 발생할 여지가 있다.

    때문에 JSP 기술과 서블릿 기술을 혼용한 프로그래밍 방법이 권장되고 있다. 


Designed by Tistory.