이 글은 Java에서 웹 서비스 프로젝트(JSP servlet)를 작성하는 방법에 대한 글입니다.
웹이라는 프로그램은 Server(Web server)와 client(Browser)간의 정해진 표준 규약으로 소켓 통신을 하는 것을 말합니다.
간단하게 설명하면 client(Browser)에서 url 주소 포함 경로와 ParamString(주소줄에 ?뒤에 적혀있는 일련의 값들)과 기본적인 http 해더와 요청 값을 작성하여 Server에 요청을 하게되면 해당 값을 계산하여 응답하고 접속을 끊는 규약을 우리는 웹 서비스라고 합니다.
그래서 우리는 웹 서비스 서버를 만들기 하기 위해서는 웹으로부터 오는 값을 해석을 해야하고 그 값에 맞게 응답 헤더와 data값을 작성해야 합니다. 그것을 일일히 콘솔 환경에서 만들기는 무척 힘이 듭니다.
Java에서는 특정한 요청을 자동으로 파싱하고 우리는 간단하게 변수등을 이용해서 그 값을 쉽게 취득하고 다시 응답 헤더와 data 값을 만들 때도 간단한 값만 return 함으로써 쉽게 웹 서비스 서버를 만들 수 있습니다.
그것을 Java Server Page(JSP)라고 이야기 합니다.
참고로, 우리가 웹서비스를 하기 위해서는 스트럿츠나 스프링 등등의 이야기를 많이 듣게 됩니다. 스트럿츠나 스프링 등은 웹 프로그래밍의 프레임워크 라이브러리이지 그것이 웹 플렛폼에 대한 이야기는 아닙니다.
프레임워크라는 것은 우리가 프로그램을 만들 때, 자주 사용되는 함수나 라이브러리 그리고 복잡한 알고리즘을 간단하게 작성할 수 있게 도와주는 잡약된 라이브러리라고 생각하면 됩니다. 즉, 기본적으로 JSP 프로젝트 위에서 이 JSP를 더욱 쉽게 다루기 위한 도구입니다.
그래서 처음 Java로 웹 서버를 만들게 된다고 하면 스트럿츠나 스프링을 알기 전에 Java servlet을 이해할 필요가 있습니다.
프로젝트를 생성하면 먼저 web.xml를 살펴보겠습니다. web.xml은 servlet에서 사용될 환경 변수 같은 것입니다. 각자 Web Server와 환경과 구축 사양이 다르기 때문에 설정이 필요합니다. web.xml를 없는 경우는 아래와 같은 방법으로 생성하면 됩니다.
이클립스에서 기본 브라우저로 확인도 가능합니다만 기본 브라우저로 보면 약간 이상헤 보이기 때문에 자주 사용하는 Chrome 브라우저를 이용해서 결과를 확인하는 것이 좋습니다.
일단 웹 서비스는 기동했습니다. 그러나 우리가 만들고 싶은건 static 프로젝트처럼 웹페이지를 응답하는 것이 아닌 서블릿 페이지입니다.
즉, 브라우저에서 요청하는 값에 따라 프로그램 처리를 따라서 결과를 내보내고 싶은 것입니다.
먼저 기동되었던 웹 서버를 끕니다.
그리고 프로젝트에서 서블릿을 추가합니다.
우선, 저는 Test라는 서블릿을 만들었습니다.
그럼 아래 이미지 같이 서블릿이 생성됩니다.
// 패키지 설정
package test;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// 페이지 요청 호스트
@WebServlet("/Test")
// 호스명과 클래스 이름은 꼭 같은 필요는 없다. 그러나 클래스 관리가 쉽게 하기 위해서는 맞추는 게 좋다.
public class Test extends HttpServlet {
// 직렬화 키, HttpServlet 클래스는 기본적으로 Serializable를 상속 받고 있다
private static final long serialVersionUID = 1L;
// 생성자
public Test() {
super();
}
// 브라우저에서 method가 get방식으로 호출할 때, 실행되는 함수
// 파라미터 request는 브라우저에서 요청하는 값이 있는 파라미터
// 파라미터 response는 브라우저로 응답할 값을 저장해야하는 파라미터
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// response.getWriter()함수로 데이터 영역의 Stream를 받는다.
// 기본적이 요청에 문자 Served at를 입력하고 요청 url를 넣는다.
response.getWriter().append("Served at: ").append(request.getContextPath());
// 개행을 넣는다.
response.getWriter().append("<br />");
// Hello world 문자를 넣는다.
response.getWriter().append("Hello world");
}
// 브라우저에서 method가 post방식으로 호출할 때, 실행되는 함수
// 파라미터 request는 브라우저에서 요청하는 값이 있는 파라미터
// 파라미터 response는 브라우저로 응답할 값을 저장해야하는 파라미터
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// doGet함수를 실행한다.
// 즉, get방식 요청이나 post방식 요청이나 결과값은 같다.
doGet(request, response);
}
}
작성이 끝났으면 서버를 다시 실행합니다.
저는 호스트를 /Test로 지정했을 때 servlet를 요청하는 것으로 작성하였기 때문에 웹 브라우져 경로에 Test를 입력하고 접속합니다.
개행 태그가 그대로 나왔습니다. 소스 보기로 확인하겠습니다.
이유인즉, 정상적인 html 태그가 아니기 때문에 html 문서가 아닌 text문서로 읽어들인 것이었습니다.
정상적인 html 태그는 Docuemnt 태그가 필요하고 기본적으로 html 태그로 시작하여 내용은 body태그 안에 넣어야 합니다.
여기까지 Java에서 웹 서비스 프로젝트(JSP servlet)를 작성하는 방법에 대한 설명이었습니다.