Skip to content

Commit

Permalink
독립 실행형 서블릿 애플리케이션 : 프론트 컨트롤러 전환, 매핑과 바인딩
Browse files Browse the repository at this point in the history
  • Loading branch information
gvo-cheryl committed Mar 9, 2023
1 parent c2d84fb commit 127b5f8
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 8 deletions.
2 changes: 0 additions & 2 deletions src/main/java/tobyspring/helloboot/HelloController.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,8 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

@GetMapping("/hello")
public String hello(String name){
return "Hello " + name;
}
Expand Down
41 changes: 35 additions & 6 deletions src/main/java/tobyspring/helloboot/HellobootSelfApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServer;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
Expand All @@ -14,17 +18,42 @@ public class HellobootSelfApplication {

public static void main(String[] args) {
ServletWebServerFactory serverFactory = new TomcatServletWebServerFactory();

// 서블릿 컨테이너 띄우기
WebServer webServer = serverFactory.getWebServer(servletContext -> {
servletContext.addServlet("hello", new HttpServlet() {

// 서블릿 등록
servletContext.addServlet("frontController", new HttpServlet() {

final HelloController helloController = new HelloController();

@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setStatus(200);
resp.setHeader("Content-Type", "text/plain");
resp.getWriter().println("Hello Servlet");
// 인증, 보안, 다국어 및 공통 기능 처리
if (req.getRequestURI().equals("/hello") && req.getMethod().equals(HttpMethod.GET.name())){

// 서블릿 요청 처리 - request
String name = req.getParameter("name");

// 컨트롤러 매핑
// 바인딩 : 직접적인 웹 요청에 데이터 타입에 맞게 전달
String ret = helloController.hello(name);

// 서블릿 요청 처리 - response
resp.setStatus(HttpStatus.OK.value());
resp.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_PLAIN_VALUE);
resp.getWriter().println(ret);

} else if (req.getRequestURI().equals("/user")) {
//
} else {
resp.setStatus(HttpStatus.NOT_FOUND.value());
}

}
}).addMapping("/hello");
}).addMapping("/*"); // 슬래시 이후 모든 경로를 처리한다.
});
webServer.start(); // Tomcat 서블릿 컨테이네 동작
webServer.start(); // Tomcat 서블릿 컨테이너 동작

}

Expand Down

0 comments on commit 127b5f8

Please sign in to comment.