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);
}
}
@SpringBootApplication
SpringApplication.run()
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();
}
}
ServletWebServerFactory
로 업캐스팅 가능하다.WebServer
ServletWebServerFactory.getWebServer
메서드를 통해 얻을 수 있다.start()
메서드를 통해 웹 서버를 동작시킬 수 있다.contorller
가 존재하더라도 404 not found 응답을 반환한다.
ServletWebServerFactory.getWebServer는
ServletContextInitializer
를 파라미터로 받아 서블릿을 추가할 수 있다.ServletContextInitializer
onStartUp(ServletContext)
메서드 하나만 가지는 함수형 인터페이스ServletContext
의 addServlet
을 통해 서블릿 등록 가능
Servlet
인터페이스를 받을 수 있다.public class HellobootApplication {
public static void main(String[] args) {
ServletWebServerFactory serverFactory = new TomcatServletWebServerFactory();
WebServer webServer = serverFactory.getWebServer(context -> {
context.addServlet("hello", ...);
});
webServer.start();
}
}
Servlet
또한 인터페이스이지만 오버라이딩할 메서드가 너무 많다.HttpServlet
을 통해 필요한 값만 오버라이딩하여 서블릿을 등록할 수 있다.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();
}
}
name
을 HelloController
에게 전달