예를 들어서 위와 같은 주소로 웹 브라우저로 접근을 하면 HelloServlet 이라는 문자가 출력되도록 할 수 있게 하는 것이 Servlet 이라고 할 수 있습니다.
이클립스에서 Servlet 을 생성해봅시다. 위와 같이 자바 패키지와 클래스 이름을 입력하고 Next를 클릭합니다.
이런 화면이 나오게 되는데 여기서 중요한 부분은 URL mappings 부분입니다. 우리의 웹 페이지가 WAS 에 배포될 때 사용될 이름을 나타내게 됩니다. 클래스 이름과 같은 HelloServlet 으로 입력되어 있는 것을 볼 수 있는데 이클립스가 기본으로 입력해준 것입니다.
이클립스는 런타임으로 설정된 WAS에 위와 같은 규칙에 URL 로 서블릿을 실행하도록 설정이 되어 있습니다. 포트 이후에 프로젝트 이름 / URL Mapping 값으로 서블릿이 실행됩니다. 이런 규칙 때문에 http://localhost:8080/firstweb/HelloServlet 이라는 주소로 우리가 원하는 웹 페이지의 요청을 서블릿을 통해서 할 수 있게 됩니다.
Next 를 클릭하면 위와 같은 화면이 나오게 됩니다. 메서드가 여러 개가 있는데 doGet 이라는 체크 버튼만 남겨두고 나머지는 없애주겠습니다. doPost 를 제외하면 되겠죠. 그 다음 Finish 를 눌러주세요.
그럼 위와 같은 Servlet 파일이 생성된 것을 확인할 수 있습니다. 우리가 HTTP 프로토콜에 대해서 배울 때 HTTP request 의 첫 번째 줄에 메서드라는 것이 있다고 배웠었습니다. 메서드에는 Get, Delete 등이 있다고 배웠습니다. 웹 브라우저가 Get 메서드 방식으로 요청을 보낼 때 서블릿에 doGet 메서드가 호출됩니다. Get 메서드는 웹 브라우저가 서버에게 문서를 요청할 때 사용하는 방식입니다. 우리의 현재 목적은 서블릿의 실행을 보는 것이기 때문에 코드를 조금 수정해 보겠습니다. 우선, 서블릿을 통해 Get request 가 전달될 때 실제로 실행되는 부분은 doGet 메서드 부분입니다. 그러니까 해당 부분의 메서드를 우리의 필요에 따라 수정해보겠습니다.
response 객체를 이용할 것인데요. response 객체는 응답할 내용들을 몽땅 모아놓은 추상화된 객체라고 이해할 수 있습니다. 응답 결과를 보내 줄 이 객체에 Content Type 을 정해주는 코드입니다. 우리는 응답 결과가 뭐야라는 것을 브라우저에게 알려줘야지 브라우저가 들어오는 것을 제대로 해석할 수 있습니다. 우리는 응답 결과로 text 를 보낼 건데, 이 text 는 HTML 이야 라는 의미를 담고 있는 코드입니다. 여기에 charset=UTF-8 을 사용한다고 알려주는 코드도 같이 작성되었습니다.
이번에는 실제로 텍스트를 쓸 수 있는 통로를 얻어와야 합니다. Input Output 이 필요한 시점이겠죠. Printwriter 라는 객체가 있습니다. Printwriter 객체를 생성하기 위해 response 객체가 가지고 있는 메서드 중에서 getWriter( ) 메서드를 활용했습니다. 응답 결과를 보낼 통로를 얻었으니까 우리가 보내줄 값을 적어주면 됩니다. out.print( ) 를 통해서 원하는 출력 값을 입력해주었습니다.
실제로 서블릿을 실행시켜봅시다. src 폴더에 보면 우리가 작성한 서블릿 파일이 있는 것을 확인할 수 있습니다. 우클릭 후 Run On Server 를 클릭합니다. 항상 이 서버를 사용할 것이기 때문에 Always use this server when running this project 를 체크하고 Finish 를 눌러줍니다.
Tomcat 이 실행되는 로그창이 막 나오는 것을 볼 수 있습니다. 이클립스 내장 웹 브라우저를 통해서 화면이 출력된 것을 볼 수 있습니다. 여기에서 사용된 URL 주소를 다른 웹 브라우저를 통해서 실행해도 같은 화면이 잘 보이게 됩니다. 만약 실행할 때 이클립스 내장 브라우저 말고 외부 브라우저를 사용하고 싶다면 Window - Web Browser 설정창을 통해서 설정해줄 수 있습니다.
Servlet 이란?
Servlet 은 이클립스 내부에서 설정한 런타임; (우리의 경우 톰캣으로 설정했었습니다.) 톰캣에 의해서 동작하게 됩니다. 이렇게 WAS 의 일종인 톰캣을 통해서 Servlet 은 동작하게 됩니다. 그 이후 웹 브라우저를 이용해서 톰캣 서버에 URL 요청을 보내고 Hello.servlet 이 실행되는 결과를 웹 브라우저로 확인해 보았습니다. 앞에서 만들었던 것이 바로 자바 웹 Application 입니다. 자바 웹 Application 에는 HTML, CSS, jsp, 이미지, 자바로 작성된 클래스(Servlet 포함됨, package, 인터페이스 등), 각종 설정 파일 등이 포함됩니다. 이런 모든 파일들이 하나의 웹 어플리케이션에서 여러 개 포함될 수 있습니다. 복잡한 웹 어플리케이션일수록 이런 구성요소들이 굉자히 많이 들어가게 됩니다. 인터넷 상에 존재하는 많은 쇼핑몰, 기업 홈페이지 등이 웹 어플리케이션이라고 할 수 있습니다. 앞에서 만든 first 는 하나의 서블릿으로 구성된 아주 간단한 웹 어플리케이션이라고 할 수 있습니다.
다시 정리해보겠습니다. Servlet 이란 자바 웹 어플리케이션의 구성요소 중 동적인 처리를 하는 프로그램의 역할을 수행합니다. 서블릿을 정의해보면 첫 번째, 서블릿은 WAS 에서 동작하는 Java 클래스이다. 두 번째, 서블릿은 HttpServlet 클래스를 상속받아야한다. 세 번째, 서블릿과 JSP로부터 최상의 결과를 얻으려면, 웹 페이지를 개발할 때 이 두 가지(JSP, 서블릿)를 조화롭게 사용해야 한다. (예시 : 웹 페이지를 구성하는 화면 HTML 은 JSP로 표현하고, 복잡한 프로그래밍은 서블릿으로 구현한다) JSP도 간단하게만 설명을 하면 우리가 서블릿을 통해서 화면을 구성할 때 Printwriter 객체를 사용해서 실제로 HTML 에 들어갈 내용을 일일이 적어주었는데요. 이 작업을 수많은 웹 페이지에 직접하는 것은 정말 힘든 일이겠죠. 이런 점을 보완하는 것이 JSP 라고 이해하시면 됩니다.