서블릿 배포
서블릿 배포는 개발된 서블릿을 애플리케이션 서버(예 : 아파치 톰캣)에 올려서 클라이언트가 접근할 수 있도록 준비하는 과정을 말한다. 배포된 서블릿은 클라이언트의 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 |