Spring

태태개발일지 - Spring(토비님)

태태코 2024. 12. 1. 11:53
반응형

Containerless 

 

Containerless 지향적이란?

 

서블릿컨테이너와 관련된 번거롭고 복잡한 작업들, 그에대한 지식들을 상관하지않고, bean을 관리하는 것에만 초점을 맞춘 것이다.

ex) xml, 서블릿 컨테이너 설치

 

@SpringBootApplication 없이? 동작하는 방법은?

 

public static void main(String[] args){
	new Tomcat().start();
}

-> 이렇게 사용하기에는 너무 복잡하다.

 

public static void main(String[] args){
    new TomcatServletWebServerFactory server = new TomcatServletWebServerFactory();
    WebServer webServer = server.getWebServer(servletContext -> {
    	servletContext.addServlet("hello",new HttpServlet(){
          @Override
          protected void service(HttpServletRequest req, HttpServletResponse resp)throws SevletException,IOException{
           String name = req.getParameter("name");
           
           //resp.setStatus(200); 
           resp.setStatus(HttpStatus.OK.value()); 
           //resp.setHeader("Content-Type","text/plain");
           resp.setHeader("Content-Type",MediaType,TEXT_PLAIN_VALUE);
           resp.getWriter().print("Hello Servlet");
          }
        }).addMapping("/hello");
    }); 
    //-> 실제 서버 생성(서블릿 컨테이너에 필요한 서블릿을 연결하는데 사용한다.)
    //req -> request에 필요한 object 
    //resp -> response에 필요한 object
    //web 응답에 필수요소인 상태코드,반환 타입, 값 을 입력했다.
    webServer.start(); -> 서버 동작
}

-> 쉽게 톰켓을 사용할 수 있게 만든 도우미 클래스를 사용하면 된다.

 

getParameter를 사용하면 파라메터를 가져온다.

 

 서블릿 컨테이너가 여러개의 서블릿 중 결정을 하는 것을 -> Mapping한다고 한다.

 

 

FRONT CONTROLLER

 

위와 같이 메핑하면 중복된 코드가 발생하고, 하나하나 메핑해줘야하기 떄문에 공통으로 처리해주는 controller를 만들자는 의미.

 

public static void main(String[] args){
    new TomcatServletWebServerFactory server = new TomcatServletWebServerFactory();
    WebServer webServer = server.getWebServer(servletContext -> {
    	servletContext.addServlet("hello",new HttpServlet(){
          @Override
          protected void service(HttpServletRequest req, HttpServletResponse resp)throws SevletException,IOException{
           if(req.getRequestURI()).equals("/hello")&&req.getMethod().equals(HttpMethod.GET.name())){
           
           //resp.setStatus(200); 
           resp.setStatus(HttpStatus.OK.value()); 
           //resp.setHeader("Content-Type","text/plain");
           resp.setHeader("Content-Type",MediaType,TEXT_PLAIN_VALUE);
           resp.getWriter().print("Hello Servlet");
           }else if(req.getRequestURI()).equals("/user")){
           
           }else{
           	resp.setStatus(HttpStataus.NOT_FOUND.value());
           }
           
          }
        }).addMapping("/*");
    }); 
   
   
    webServer.start(); -> 서버 동작
}

 

아래와 같이 URL 요청에 따라 해당 servlet을 찾아주는 역할을 하는 FRONT CONTROLLER가 생기게 된다.

반응형