이클립스에서 Servlet 생성하기 / HttpServlet 클래스와 메소드
예전에 Servlet API 관련하여 포스팅했던 적이 있는데,
오늘은 이클립스에서 Servlet 파일 생성하기,
그리고 HttpServlet클래스와 메소드에 대해서 따로 정리해보도록 하겠습니다.
https://mundol-colynn.tistory.com/74
이클립스에서 Servlet 클래스 생성하기
먼저, Eclipse에서 Servlet 파일을 만들어보겠습니다.
1. 서블릿 생성을 원하는 폴더 우클릭 -> Servlet 클릭 -> Next
2. Class Name: 원하는 클래스명 입력 후 next
3. Name: 해당 서블릿클래스와 매핑을 원하는 매핑값 기입 (미기입시 클래스명으로 자동 매핑)
Name 속성을 기입하면, 하단 URL Mappings 의 값도 자동으로 이에 따라 변경되는 것을 확인할 수 있습니다.
4, Finish 버튼 클릭
그러면, 아래와 같이 Servlet클래스 파일이 자동으로 생성됩니다.
Servlet 클래스 구조
아래 코드는 위 과정으로 생성된 "ServletTest"클래스입니다.
package com.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;
/**
* Servlet implementation class ServletTest
*/
@WebServlet(name = "test.do", urlPatterns = { "/test.do" })
public class ServletTest extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ServletTest() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
자동으로 import된 클래스들과
자동으로 구현된 메소드들이 보입니다.
그 중, @WebServlet이라는 어노테이션으로 내가 mapping 값으로 작성해두었던 "/test.do"가 자동으로 매핑되어 들어가 있는 것을 확인할 수 있습니다.
import 문 하단을 보면
/**
* Servlet implementation class ServletTest
*/
즉, 위 방식으로 서블릿 파일 생성을 통해 만든 모든 클래스는 "HttpServlet"를 상속받는 클래스임을 알 수 있습니다.
그렇다면, Servlet클래스들의 조상인 HttpSerlvlet에 대해 알아보아야겠죠.
HttpServlet클래스와 메소드
HttpServlet 클래스는 자바에서 HTTP 프로토콜을 이용하는 서블릿을 개발하기 위한 클래스입니다.
HttpServlet은 Java Servlet API에서 제공하는 클래스이며, javax.servlet.http 패키지에 속해 있습니다.
HttpServlet 클래스는 GenericServlet 클래스를 상속받아 구현되어 있습니다.
GenericServlet 클래스는 서블릿 프로그래밍을 위한 기본적인 구현을 제공하는 추상 클래스로, HttpServlet 클래스에서는 HTTP 프로토콜에 맞는 메소드를 추가적으로 구현합니다.
메소드 | 설명 |
doGet (HttpServletRequest req, HttpServletResponse resp) |
클라이언트로부터 GET 요청을 받았을 때 호출 |
doPost (HttpServletRequest req, HttpServletResponse resp) |
클라이언트로부터 POST 요청을 받았을 때 호출 |
doPut (HttpServletRequest req, HttpServletResponse resp) |
클라이언트로부터 PUT 요청을 받았을 때 호출 |
doDelete (HttpServletRequest req, HttpServletResponse resp) |
클라이언트로부터 DELETE 요청을 받았을 때 호출 |
doHead (HttpServletRequest req, HttpServletResponse resp) |
클라이언트로부터 HEAD 요청을 받았을 때 호출 |
doOptions (HttpServletRequest req, HttpServletResponse resp) |
클라이언트로부터 OPTIONS 요청을 받았을 때 호출 |
doTrace (HttpServletRequest req, HttpServletResponse resp) |
클라이언트로부터 TRACE 요청을 받았을 때 호출 |
service (HttpServletRequest req, HttpServletResponse resp) |
모든 HTTP 요청에 대해 호출 요청 메소드를 분석하여 각각의 메소드에 대응하는 doXXX() 메소드를 호출합니다. |
init() | 서블릿이 초기화될 때 호출 서블릿에서 사용할 데이터베이스 연결 등을 초기화하거나, 설정 정보를 로딩 |
destroy() | 서블릿이 종료될 때 호출 서블릿에서 사용한 리소스를 해제하거나, 정리 작업을 수행 |
HttpServlet 클래스에서 구현된 메소드들 중에서,
가장 많이 사용되는 메소드는 doGet(), doPost(), doPut(), doDelete() 등이 있습니다. 이들 메소드는 클라이언트가 요청하는 HTTP 메소드에 맞춰 서블릿에서 실행되어야 하는 코드를 작성할 수 있도록 지원합니다.
HttpServlet을 상속받는 클래스가 반드시 해야하는 것!
HttpServlet 클래스는 추상 클래스이므로,
추상 메소드인 doXXX() 메소드를 구현해주어야 합니다. doXXX() 메소드는 클라이언트로부터의 HTTP 요청에 대한 처리를 담당하는 메소드이며, 요청 메소드(GET, POST, PUT, DELETE 등)에 따라 적절한 doXXX() 메소드를 호출하여 처리합니다.
따라서, HttpServlet 클래스를 상속받는 클래스에서는,
위에서 나열된 메소드들 중에서 doXXX()로 시작하는 메소드 중 적어도 하나를 반드시 구현해주어야 합니다.
예를 들어, GET 요청에 대한 처리를 담당하는 doGet() 메소드, POST 요청에 대한 처리를 담당하는 doPost() 메소드 등을 구현해야 합니다.
하지만, HttpServlet 클래스에서 제공하는 doGet(), doPost() 메소드 등이 요청 메소드에 대한 처리를 대표적으로 담당하기 때문에, 이들 메소드를 오버라이드하여 사용하는 경우가 많습니다.
따라서,
위 방식으로 Servlet클래스를 생성하였다면, 작성되어 있는 doGet, doPost 메소드 코드블럭 내 해당 요청을 받아줄 코드를 작성하는 것이 일반적입니다.
HttpServlet 클래스는 자바 웹 애플리케이션 개발에서 매우 중요한 역할을 하며, 대부분의 서블릿이 이 클래스를 상속받아 개발됩니다.
또한, HttpServlet 클래스에서 제공하는 init(), service(), destroy() 메소드를 필요에 따라 오버라이드하여 구현할 수도 있습니다. 이러한 메소드를 구현함으로써 서블릿의 생명주기를 관리하거나, 초기화 작업을 수행할 수 있습니다.
Servlet의 생명주기와 위 세 메소드에 관한 설명은 다음 포스팅에서 이어가도록 하겠습니다.
References
https://www.javatpoint.com/servlet-api
https://www.tutorialspoint.com/servlets/servlets-client-request.htm
https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
https://www.devkuma.com/docs/jsp-servlet/httpservletrequest-%EB%A9%94%EC%86%8C%EB%93%9C/
'Spring' 카테고리의 다른 글
MVC (Model-View-Controller) 패턴 (0) | 2023.03.29 |
---|---|
Spring MVC프로젝트의 폴더 구조 (0) | 2023.03.28 |
Spring2: root-context.xml (0) | 2022.12.29 |
Spring - Context Hierarchy (0) | 2022.12.29 |
Spring 1 : web.xml (배포서술자 /Deployment Descriptor) (0) | 2022.12.29 |