while(1) work();
반응형
article thumbnail
10. 마무리

Spring MVC Request Lifecycle (이미지 출처 : http://terasolunaorg.github.io/guideline/1.0.1.RELEASE/en/Overview/SpringMVCOverview.html#id2) 지금까지 살펴본 Spring Web MVC의 LifeCycle을 한 눈에 볼 수 있는 그림이다. 그림에는 나타나있지 않지만, DispatcherServlet으로 요청이 들어오면 아래 작업들이 수행된다. LocaleResolver : 헤더 등에서 사용자의 장소를 알아냄 ThemeResolver : 테마 관련해서 사용 (6.0 부터 Deprecated 됨) MultipartResolver : 파일 업로드 등을 처리 마무리 이렇게 전반적인 Spring Web MVC의 도입 ..

9. 어노테이션 기반 컨트롤러

개요 이제, Spring Web MVC의 구조를 파악했으니, Controller(handler) 구현에 집중한다. 대부분의 프로젝트에서, HandlerMapping과 HandlerAdapter 중에 사용이 쉽고 자유도가 높은 RequestMappingHandlerMapping와 RequestMappingHandlerAdapter를 사용한다. 이제부터는 RequestMappingHandlerMapping와 RequestMappingHandlerAdapter에 대해 보다 자세히 알아본다. @Controller, @RequestMapping 앞서 살펴보았듯, 클래스에 @Controller 어노테이션을 붙이면 RequestMappingHandlerMapping이 해당 클래스 중 @RequestMapping 어노..

8. 예외 처리

개요 비즈니스 로직을 작성하다 보면 예외를 발생시켜야 할 경우가 생긴다. Handler나 Interceptor와 같이 DispatcherServlet 내에서 발생한 예외는 Spring Web MVC를 통해 처리할 수 있다. (물론 Handler나 Interceptor 내에서 catch 절을 통해 처리할 수도 있다. 처리하지 못하고 throw 된 예외를 의미한다.) HandlerExceptionResolver DispatcherServlet은 초기화 시점에 HandlerExceptionResolver 인터페이스를 구현한 빈을 찾아 handlerExceptionResolvers에 추가해둔다. //org.springframework.web.servlet.DispatcherServlet public class ..

article thumbnail
7. Filter와 Handler Interceptor

개요 사실 지금까지 만든 방명록 서비스에는 문제가 있다. 요청 본문으로 한글이 넘어오는 경우 아래와 같이 문자가 깨져서 저장된다. 톰캣의 문자셋 기본값은 ISO 8859-1이기 때문에 이러한 문제가 발생한다. 해결 방법 톰캣의 설정 변경으로 기본 문자셋을 UTF-8로 바꾸면 해결된다. 그러나, 일반적으로 UTF-8을 사용하지 아니할 이유가 없기 때문에, 애플리케이션단에서 UTF-8로 고정시키는 방법을 많이 사용한다. HttpServletRequest의 setCharacterEncoding메서드를 사용해 다음과 같은 코드를 “모든 메서드(혹은 서블릿)”에 넣어주면 문제는 해결된다. request.setCharacterEncoding("UTF-8"); 하지만 모든 메서드에 공통적인 코드를 넣는 것은 너무나도..

article thumbnail
6. DispatcherServlet 사용 및 MVC 패턴 구현

개요 이제 Spring Web MVC 공식 문서를 보기 위한 사전 지식을 다 갖추었다. https://docs.spring.io/spring-framework/docs/current/reference/html/web.html DispatcherServlet을 사용하는 두 가지 방법 DispatcherServlet을 WAS가 servlet으로 인식할 수 있도록 하는 방법은 두가지가 있다. 지난 글에서는 web.xml에 DispatcherServlet을 등록하고, DispatcherServlet의 init-param으로 bean 설정이 담긴 xml파일 경로를 넘겨 application context를 내부적으로 생성하는 방법을 설명했다. 하지만, @Servlet 어노테이션을 도입하며 기껏 없애놓은 web.x..

article thumbnail
5. MVC 패턴과 Spring Web MVC

MVC 패턴 개요 Servlet에서 요청을 받고 주 로직 처리는 JSP 에서 처리하다 보니 JSP의 코드가 굉장히 난잡해졌다. 뷰에 포함되어있던 비즈니스 로직을 컨트롤러 단으로 옮긴 뒤, 뷰에서는 화면 출력 처리만 담당하도록 개선할 수 있다. (비즈니스 로직을 컨트롤러에 두지 않고, 서비스 레이어로 한번 더 분리하기도 한다.) 뷰와 컨트롤러 사이에 데이터를 주고받을 수 있도록 데이터 전송 객체(DTO; Getter Setter만 있는 단순 객체)를 사용하는데, 이를 Model이라고 한다. Model, View, Controller가 분리된 이러한 패턴을 MVC 패턴이라고 한다. Spring Web에서의 MVC패턴 Spring에서는 모든 요청을 공통 컨트롤러(Dispatcher Servlet)가 받고, U..

2-1. Embeded Tomcat 사용하기

개요 매 번 코드 수정사항이 있을 때 마다 war로 패키징하고 Tomcat 경로에 war 파일을 넣고 Tomcat을 재시작 하는 일은 번거롭다. 다행히 Tomcat은 Embeded Tomcat을 지원하여 프로젝트 내에 Tomcat을 포함할 수 있다. pom.xml 의존성 추가 org.apache.tomcat.embed tomcat-embed-core ${tomcat.version} provided org.apache.tomcat.embed tomcat-embed-jasper ${tomcat.version} provided org.apache.tomcat tomcat-jasper ${tomcat.version} provided org.apache.tomcat tomcat-jasper-el ${tomcat...

4. JSP로 방명록 만들기

개요 Servlet에 HTML 코드가 섞여있으면 가독성도 떨어지고 유지보수 문제도 발생한다. 따라서 템플릿 엔진을 이용해 코드를 개선한다. JSP를 이용할 것이며, service 로직 호출 등은 모두 JSP 내에서 처리할 것이다. (절대 좋은 방식이 아니지만, 의도적으로 일단 그렇게 사용한다.) IndexServlet 변경 package com.lickthespring.web.servlet; import java.io.IOException; import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servl..

반응형

검색 태그