TIL

섹션 3 독립 실행형 서블릿 애플리케이션

Containerless 개발 준비

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HellobootApplication {
	public static void main(String[] args) {
		SpringApplication.run(HellobootApplication.class, args);
	}
}
public class HellobootApplication {
	public static void main(String[] args) {
	}
}

서블릿 컨테이너 띄우기

public class HellobootApplication {

	public static void main(String[] args) {
		ServletWebServerFactory serverFactory = new TomcatServletWebServerFactory();
		WebServer webServer = serverFactory.getWebServer();
		webServer.start();
	}
}

서블릿 등록

public class HellobootApplication {

    public static void main(String[] args) {
        ServletWebServerFactory serverFactory = new TomcatServletWebServerFactory();
        WebServer webServer = serverFactory.getWebServer(context -> {
            context.addServlet("hello", ...);
        });
        webServer.start();
    }
}
public class HellobootApplication {

    public static void main(String[] args) {
        ServletWebServerFactory serverFactory = new TomcatServletWebServerFactory();
        WebServer webServer = serverFactory.getWebServer(context -> {
            context.addServlet("hello", new HttpServlet() {
                @Override
                protected void service(HttpServletRequest req,
                                       HttpServletResponse res) throws IOException {
                    String name = req.getParameter("name");
                    res.setStatus(HttpStatus.OK.value());
                    res.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_PLAIN_VALUE);
                    res.getWriter().println("Hello " + name);
                }
            }).addMapping("/hello");
        });
        webServer.start();
    }
}

프론트 컨트롤러

프론트 컨트롤러로 전환

public class HelloController {
    public String hello(String name) {
        return "Hello " + name;
    }
}
public class HellobootApplication {

    public static void main(String[] args) {
        ServletWebServerFactory serverFactory = new TomcatServletWebServerFactory();
        WebServer webServer = serverFactory.getWebServer(context -> {
            HelloController helloController = new HelloController();

            context.addServlet("front-controller", new HttpServlet() {
                @Override
                protected void service(HttpServletRequest req,
                                       HttpServletResponse res) throws IOException {
                    // 공통 기능 처리 ...
                    if (req.getRequestURI().equals("/hello") && req.getMethod().equals(HttpMethod.GET.name())) {
                        String name = req.getParameter("name");

                        String response = helloController.hello(name);

                        res.setStatus(HttpStatus.OK.value());
                        res.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_PLAIN_VALUE);
                        res.getWriter().println(response);
                    } else if (req.getRequestURI().equals("/user")) {
                        // ...
                    } else {
                        res.setStatus(HttpStatus.NOT_FOUND.value());
                    }
                }
            }).addMapping("/*");
        });
        webServer.start();
    }
}