본문 바로가기

Servlet, JSP

Hello Servlet! 만들어보기 (IDE 없이)

반응형

서블릿 만드는 것의 의미

서버 애플리케이션을 만드는 것입니다.

서블릿의 특이사항은 사용자 요청에 따라 특정 서블릿만 실행됩니다.

예시)

리스트 요청 → 리스트 요청 서블릿만 실행

회원가입 요청 → 회원가입 요청 서블릿만 실행

 

 

Hello Servlet! 만드는 과정

자바 소스코드 작성 + 컴파일 + 배포(톰캣 폴더로 이동) + 브라우저로 서블릿 실행

 

 

자바 소스코드 작성

다음과 같이 hello Servlet 코드를 작성합니다.

작성은 메모장으로 하시면 됩니다.

WAS, 톰캣은 HttpServlet라는 추상 클래스를 상속받고, service() 함수를 구현하는 java 파일을 서블릿이라고 인지합니다. 다음과 같은 예시는 "HelloServlet" Servlet이라고 부를 수 있습니다.

import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloServlet extends HttpServlet {
	public void service (HttpServletRequest request
			, HttpServletResponse response) throws IOException, ServletException{
		System.out.print("Hello Servlet");
	}

}

 

 

자바 소스 컴파일

해당 파일을 cmd에서 다음과 같이 컴파일을 하면 에러가 발생합니다.

에러 명은 servlet class가 import 되지 못했습니다.

그 이유는 jdk는 기본적으로 servlet 라이브러리를 가지고 있지 않습니다.

해결책 : 톰캣이 가지고 있는 servlet 라이브러리를 사용해 컴파일하면 됩니다.

컴파일 중 에러가 발생함..

servlet 라이브러리는 "{톰캣 설치 경로}/lib/servlet-api.jar"입니다.

 

컴파일을 다음과 같이 했을 때 아무런 에러가 발생하지 않고 class 파일이 생성되면 컴파일에 성공한 것입니다.

에러가 발생하지 않는 컴파일

 

class 파일이 컴파일 결과로 생성됨

 

 

이제 다음과 같은 궁금증이 들 수 있습니다.
class 파일을 어디로 이동시켜야 브라우저에서 요청이 가능하지???
이런 호기심이 드셨다면 100점입니다. 

 

배포(class 파일을 어디로 이동시켜야 하지??)

정답 : {톰캣 설치경로}/webapps/ROOT/WEB-INFO/classes/

 

WEB-INFO 폴더 안에 있는 내용은 사용자가 브라우저로 직접 요청할 수 없습니다.

사용자가 class 파일을 직접 요청하면 안 되므로 WEB-INFO의 하위 폴더에 넣습니다.

classes 하위 폴더에 클래스 파일을 넣는 것은 규칙입니다.

만약 패키지가 있다면 classes/ 하위에 패키지만큼 폴더를 만들어 줘야 합니다.

 

 

URL과 서블릿 매핑

사용자가 URL로 요청했을 때 URL에 맞는 서블릿을 실행시켜야 합니다.

web.xml 설정 파일에서 할 수 있습니다.

web.xml 파일은 {톰캣 설치경로}/webapps/ROOT/web.xml입니다.

 

설정 파일을 메모장으로 열어서 다음과 같은 내용을 넣습니다.

<servlet>
	<servlet-name>hello</servlet-name>
	<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>hello</servlet-name>
	<url-pattern>/hello</url-pattern>
</servlet-mapping>

 

해당 구문의 의미는 다음과 같습니다.

사용자의 "http://localhost:8080/hello" 요청 -> 톰캣이 hello라는 이름을 가진 서블릿 클래스를(HelloServlet) 찾아서 실행함

 

서블릿 실행해보기

 

에러가 발생하지 않은 실행 결과

다음과 같이 url을 입력했을 때 에러가 발생하지 않고 빈 화면이 나온다면 정상적으로 서블릿을 실행하신 겁니다.

작성한 System.out.print("Hello Servlet");은 웹 브라우저에 나타나지 않고 서버 쪽 콘솔에 나타난 겁니다.

그래서 브라우저에서는 보이지 않습니다.

 

브라우저에 "Hello Servlet" 출력하기

java 소스 코드를 수정하고 다시 배포해야 합니다.

소스 코드 수정

import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloServlet extends HttpServlet {
	public void service (HttpServletRequest request
			, HttpServletResponse response) throws IOException, ServletException{
		// 출력 스트림을 사용 
        OutputStream os = response.getOutputStream();
        
        // 두 번째 인자값이 true -> 버퍼에 출력데이터("Hello Servlet")가 8바이트 쌓일 때까지 기다리는게 아니라 
        // print()할 때마다 바로 클라이언트에 데이터를 보낸다.
		PrintStream out = new PrintStream(os, true);
		out.println("Hello Servlet");
	}
}

위에서 했던 컴파일 + 배포 과정을 거친 이후에 다시 브라우저로 요청하면 다음과 같이
Hello Servlet이 실행됩니다.

다음에는 eclipse를 이용해 서블릿 코드 작성, 컴파일, 배포, 서버 재실행, 브라우저로 요청 5단계를 
한 단계로 줄이는 것을 소개하겠습니다.

 

 
 
 
 

 

반응형