Web Programming/JSP

[JSP] JSP 동작원리(톰켓)와 서블릿

IT수정 2024. 9. 27. 12:32

웹 애플리케이션 생성

Tomcat 9.0\webapps\의 위치에 'myapp' 폴더를 생성한다.

 

myapp 폴더 밑에 'WEB-INF' 폴더를 생성한다. 또 그 안에 'classes' 폴더를 생성한다.

 

Tomcat 9.0\conf 폴더의 server.xml을 에디터 or 메모장으로 실행한 후 다음 코드를 추가한다.

 

해당 경로의 web.xml 파일을 복사해서 이전에 만들었던 WEB-INF 폴더에 넣어준다.

 

복사한 web.xml에 하단의 코드를 추가한다.

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
      <param-name>debug</param-name>
      <param-value>0</param-value>
    </init-param>
    <init-param>
      <param-name>listings</param-name>
      <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

 

더보기

배치기술자(web.xml)

웹 애플리케이션을 배치하기 위해 필요한 내용을 설정한 파일이다. 이 배치기술자는 하나의 웹 애플리케이션당 하나가 필요하다. 웹 애플리케이션은 웹 컨테이너가 설치된 곳에 설치가 되어 동작할 수 있다.

 

[제어판]-[관리 도구]-[서비스]에 들어가서 Apache Tomcat 9.0을 재가동한다.

 

'http://localhost/myapp/' 경로로 이동해 다음과 같이 실행되면 정상.

 

JSP 예제 출력하기

에디터에 예제 코드를 작성한다.

<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<body>
<%
   String strVar = "Korea Fighting!!!";
%>
   JSP 명령어로 작성한 <%=strVar%><br/>
   HTML 태그로 작성한 Korea Fighting!!!
</body>
</html>

 

다음 경로에 저장해준다.

 

'http://localhost/myapp/koreaFighting.jsp' 경로에 들어가서 다음과 같이 뜨는지 확인한다.

 

마우스 오른쪽 클릭 후 페이지 소스 보기를 클릭해 소스를 확인한다.

 

우리가 JSP로 작성한 코드와 소스 코드가 공통된 부분이 많으면서도 없어진 부분이 많다는 것을 볼 수 있다.

사라진 코드들은 JSP 컨테이너에서 처리가 되고 실행 후에는 HTML 태그로만 구성된 페이지를 생성해서 사용자의 브라우저에 보이게 되는 것이다.

 

JSP의 동작 구조

JSP 파일 변환

 

JSP 파일 동작 단계

 

JSP의 Life Cycle

jsp 페이지는 서블릿으로 변환이 되고 클래스 파일로 컴파일되면서 초기화, 요청 처리단계, 소멸 단계를 거치게 된다. 이 단계가 JSP의 생명주기이다.

 

  • init() 메서드

처리에 필요한 자원에 대한 초기화 작업

  • service() 메서드

요청에 대해서 필요한 처리, 실제 요청에 대한 처리를 담당하는 메서드로 필요한 로직이 담겨있는 메서드

  • destroy() 메서드

사용된 자원을 해제한 뒤, 서블릿을 종료

 

 

서블릿이란?

서블릿은 JSP가 나오기 이전에 Sun에서 동적인 웹페이지 콘텐츠를 생성하는 기술로 제공되었다. 그러나 서블릿은 자바의 많은 장점들을 사용할 수 있었지만 HTML과 연동하기에는 많은 단점이 있어 JSP가 탄생하게 되었다.

 

Applet은 클라이언트 브라우저에서 호출이 되면 클래스 파일이 클라이언트 PC로 다운로드되어 실행되는 클라이언트 측 프로그램이고, 서블릿(Server + Applet)은 브라우저에서 호출이 되면 WAS에서 웹페이지를 동적으로 생성하여 결과를 전송해 주는 서버 측 프로그램이다.

더보기

WAS(Web Application Server)

서버 단에서 애플리케이션이 동작할 수 있도록 지원하는 컨테이너가 포함된 서버를 말한다.

WAS의 종류로는 Tomcat, WebLogic(BEA), WebSphere(IBM), JEUS(티맥스-국산) 등이 있다.

 

서블릿의 Life Cycle

  1. 브라우저에서 서블릿을 호출하면 WAS는 서블릿 클래스를 로딩한다.
  2. 서블릿 클래스가 로딩이 되면 인스턴스가 생성이 되고 약속된 서블릿 메서드가 자동적으로 호출된다.
  3. 호출된 서블릿 인스턴스로부터 스레드를 생성하고 생성된 서블릿 클래스에 있는 service() 메서드를 호출한다.
  4. 서블릿 종료 시 destroy() 메서드를 호출한다.

 

간단한 서블릿 예제 만들기

1. 에디터로 생성하기

에디터에서 예제 코드를 작성한다. 이름은 Myservlet1.java로 저장한다.

저장 경로는 C:\JSP\Tomcat 9.0\webapps\myapp\WEB-INF\src이다.

package ch03;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;

@WebServlet(urlPatterns = "/ch03/myServlet1")

public class MyServlet1 extends HttpServlet {

    @Override
    public void service(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>MyServlet</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Fighting Korea!!!</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}

 

명령 프롬프트에서 해당 경로에 다음 명령어를 입력한다. (컴파일 과정)

cd C:\JSP\Tomcat 9.0\webapps\myapp\WEB-INF\src
javac -d ../classes MyServlet1.java

 

다음 경로에 해당 파일이 생성되었는지 확인한다.

 

http://localhost/myapp/ch03/myServlet1 링크에 접속해서 다음과 같이 실행되는지 확인한다.

 

2. 이클립스로 생성하기

다음과 같이 서블릿을 생성한다.

 

예제 코드를 작성한다.

package ch03;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;

@WebServlet(urlPatterns = "/myServlet2")

public class MyServlet2 extends HttpServlet {

    @Override
    public void service(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>MyServlet</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>파이팅 코리아!!!</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}

 

myapp/WebContent/WEB-INF/web.xml에 다음과 같이 입력한다.

    <servlet>
        <servlet-name>MyServlet2</servlet-name>
        <servlet-class>ch03.MyServlet2</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>MyServlet2</servlet-name>
        <url-pattern>/myServlet2</url-pattern>
    </servlet-mapping>

 

*경로 확인 필수
C:\JSP\myapp\src\main\java\ch03 경로에 MyServlet2.java 파일
C:\JSP\myapp\WebContent\WEB-INF 경로에 web.xml 파일
C:\JSP\myapp\WebContent\WEB-INF\classes\ch03 경로에 MyServlet2.class 파일

 

http://localhost/myapp/myServlet2 링크에 들어가서 다음과 같이 뜨면 된다.

 

'Web Programming > JSP' 카테고리의 다른 글

[JSP] Page Directive  (0) 2024.09.30
[JSP] JAVA 기초 문법  (0) 2024.09.27
[JSP] 이클립스 설치  (3) 2024.09.26
[JSP] Tomcat 설치  (1) 2024.09.26
[JSP] JDK 설치  (0) 2024.09.26