상세 컨텐츠

본문 제목

[JSP] 서블릿 작성, 배포, web.xml 설정에 이해

JAVA/JSP 프로그래밍

by 미로910 2024. 7. 2. 16:17

본문

서블릿 배포란 무엇인가?

서블릿 배포는 개발된 서블릿을 애플리케이션 서버(예: 아파치 톰캣)에 올려서 클라이언트가 접근할 수 있도록 준비하는 과정을 말한다. 배포된 서블릿은 클라이언트의 HTTP 요청을 받아 처리하고, 동적 웹 페이지를 생성하여 응답한다.

 

배포 과정의 주요 단계

  1. 웹 애플리케이션 구조 설정
    • 서블릿을 포함한 모든 웹 애플리케이션 파일을 특정 디렉토리 구조에 맞게 배치한다.
  2. 배포 기술
    • web.xml 파일 또는 애노테이션을 사용하여 서블릿, 필터, 리스너 등을 설정한다.
  3. WAR 파일 생성 및 배포
    • 웹 애플리케이션을 WAR (Web Application Archive) 파일로 패키징하여 배포할 수 있다.
  4. 서버 설정
    • 웹 서버 또는 애플리케이션 서버에 웹 애플리케이션을 등록하고 실행한다.

 

웹 애플리케이션 구조

웹 애플리케이션의 기본 디렉토리 구조는 다음과 같다

web.xml 파일 설정

web.xml 파일은 웹 애플리케이션의 배포 설명자로서, 서블릿과 URL 매핑을 정의한다. 예를 들어, 다음과 같은 web.xml 설정을 통해 HelloServlet을 /hello URL에 매핑할 수 있다

<servlet>
		<description></description>
		<display-name>HelloServlet</display-name>
		<servlet-name>HelloServlet</servlet-name>
		<servlet-class>com.tenco.HelloServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>HelloServlet</servlet-name>
		<url-pattern>/hello-servlet</url-pattern>
	</servlet-mapping>

 

WAR 파일 생성 및 배포 (Root Context 와 .war 이름을 동일하게 설정)

WAR (Web Application Archive) 파일은 Java 웹 애플리케이션을 패키징하기 위한 표준 형식이며, 웹 애플리케이션을 구성하는 모든 파일들을 하나의 압축 파일로 묶어 포장한 것. 추가적인 메타 정보와 함께 .jar 파일과 비 슷하게 META-INF, WEB-INF 디렉토리를 포함하여 패키징.

Eclipse를 사용한 WAR 파일 생성

  1. 프로젝트 선택:
    • Eclipse에서 Dynamic Web Project를 선택한다.
  2. WAR 파일로 내보내기:
    • 프로젝트를 우클릭하고 Export를 선택한다.
    • WAR file을 선택한 후 Next를 클릭한다.
  3. WAR 파일 설정:
    • Destination 필드에 WAR 파일을 저장할 경로를 지정한다.
    • Export source files 옵션을 선택하여 소스 파일을 포함할지 여부를 결정한다.
    • Finish 버튼을 클릭하여 WAR 파일을 생성한다.

 

 

도전과제 - 클라이언트에게 JSON 형식에 데이터를 내려 보자
package com.tenco;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

import org.apache.tomcat.util.json.JSONParser;


public class TodoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

    public TodoServlet() {
        super();
    }
    
    // get 요청시 동작 
    // 주소설계 - http://localhost:8080/d4/todo-servlet
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("GET 요청 확인");
		
		Todo todo1 = new Todo();
		todo1.setId(100);
		todo1.setTitle("오늘은 JSON 리턴하기 연습");
		todo1.setCompleted(false);
		
		// Gson lib 사용 가능 
		
		response.setContentType("application/json");
//		String strJson = "{\r\n"
//				+ "  \"userId\": 1,\r\n"
//				+ "  \"id\": 1,\r\n"
//				+ "  \"title\": \"delectus aut autem\",\r\n"
//				+ "  \"completed\": false\r\n"
//				+ "}";
		PrintWriter pw = response.getWriter();
		pw.print(todo1.toString());
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

	}

}
package com.tenco;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter

public class Todo {
	private int id; 
	private String title; 
	private boolean completed; 
	
	@Override
	public String toString() {
		
		return "{ \"id\" : "+ id +"}";
	}
}

관련글 더보기