Java

서블릿 작성, 배포, web.xml 설정

ryeonng 2024. 7. 3. 15:49

서블릿 배포

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

 

배포 과정의 주요 단계

1. 웹 애플리케이션 구조 설정

  • 서블릿을 포함한 모든 웹 애플리케이션 파일을 특정 디렉토리 구조에 맞게 배치한다.

2. 배포 기술

  • web.xml 파일 또는 애노테이션을 사용하여 서블릿, 필터, 리스너 등을 설정한다.

3. WAR 파일 생성 및 배포

  • 웹 애플리케이션을 WAR (Web Application Archive) 파일로 패키징하여 배포할 수 있다.

4. 서버 설정

  • 웹 서버 또는 애플리케이션 서버에 웹 애플리케이션을 등록하고 실행한다.

 

웹 애플리케이션 구조

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

webapp/
├── WEB-INF/
│   ├── web.xml
│   ├── classes/
│   │   └── com/example/HelloServlet.class
│   └── lib/
│       └── (추가 라이브러리 JAR 파일들)
├── index.html
└── (기타 정적 리소스들: HTML, CSS, JavaScript 파일 등)

 

 

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 파일을 생성한다.

 

설치했던 톰캣 폴더에 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 {
		doGet(request, response);
	}

}​
package com.tenco;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
public class Todo {
	
	private int id;
	private String title;
	private boolean completed;
	
	// toString 직접 오버라이드 해서 json으로 변환
	@Override
	public String toString() {
		return "{ \"id\" : "+ id +"}";
	}
}

 

'Java' 카테고리의 다른 글

서블릿과 서블릿 컨텍스트  (0) 2024.07.04
Get, Post 요청 방식  (1) 2024.07.03
서블릿 Life Cycle  (0) 2024.07.03
서블릿  (0) 2024.07.03
WAS와 웹 컨테이너의 역할  (0) 2024.07.02