http://blog.empas.com/ahnyounghoe/13186543
이젠 article-servlet.xml 파일을 작성할 차례군요. 먼저 WEB-INF 폴더에 article-servlet.xml 라는 이름으로 파일을 하나 생성합니다. xml 이기 때문에 Schema나 DTD 정의가 필요하죠. 아래 틀을 사용합니다.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<!-- == Web Application Layer == -->
<beans>
</beans>
 
Web Application Context 파일에 정의되는 객체의 주요 유형은 다음과 같습니다.
 
  • Handler Mappings
  • View Resolver
  • Handler(Controller)
  •  
    Handler Mappings는 브라우저에서 서버로 오는 요청의 URL에 따라 어떤 객체가 호출되어야 하는지를 알려주는 객체입니다. 아무 설정도 하지 않으면 객체 정의(bean)할 때 이름(name 속성)으로 요청 url을 사용할 때 쓰는 BeanNameUrlHandlerMapping가 쓰입니다.
     
    View Resoler는 view(화면)의 이름을 실제 파일 이름으로 변경해주는 해석기 역할을 합니다. Spring MVC는 jsp 이외에도 Velocity나 FreeMarker 등을 기본 지원하고 그 외에의 화면을 사용할 수 있게 하기 위해서 view 이름을 파일 이름이 아닌 논리적 이름(변수명)으로 취급합니다.
     
    jsp 파일을 WEB-INF/jsp 폴더에 넣기 위해서는 다음과 같은 설정이 필요합니다. 이렇게 하면 view의 이름 앞과 뒤에 각각 /WEB-INF/jsp/ 와 .jsp 가 붙는 효과가 나죠. 아래 설정을 위의 xml 파일에 넣어봅니다.
     
     <bean id="viewResolver"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="viewClass"
       value="org.springframework.web.servlet.view.JstlView" />
      <property name="prefix" value="/WEB-INF/jsp/" />
      <property name="suffix" value=".jsp" />
     </bean>
     
    위에서 viewClass 프로퍼티로 JstlView를 설정했는데요. Jstl을 포함한 Jsp를 HTML 템플릿 기술로 쓸 때 적합한 클래스죠. Velocity나 FreeMarker를 쓰기 위해선 다른 클래스를 넣으면 되겠구나 짐작할 수 있죠. 결국 코드 수정을 최소화 하고 템플릿 기술을 바꿀 수 있단 것이죠.
     
    하나 설명 안한 항목이 Handler죠. 요청 처리기인데요. Spring MVC는 기본적으로 다양한 Controller를 제공합니다.
     
    자세한 것은 Spring MVC컨트롤러 탐험기 안내 를 참조하세요.
     
    Handler는 이들 Controller의 메소드를 의미합니다. 그러나, 객체는 클래스 단위로 등록되기 때문에 Controller를 등록하시는거죠. 아무튼 요청을 처리하는 녀석은 Controller / Handler라고 한다는 것을 기억하세요.
     
    index.do 요청에 대해서 404 에러가 나지 않도록 처리기와 화면(view)를 만들어보죠. 먼저 view부터 해보겠습니다. WEB-INF 폴더 밑에 jsp 폴더를 먼저 만듭니다. 그 아래 index.jsp 파일을 새로 만듭니다. index.jsp 파일에는 아무런 내용이나 입력합니다. 저는 ok라고만 넣었습니다. 404 에러 대신 보여질 것을 넣는 것이죠.
     
    이젠 view는 만들어 두었고, Handler/Controller 설정을 해야 하는데.. 앞으로 이들을 싸잡아서 처리기 혹은 요청 처리기라고 부르겠습니다. 단순히 특정 view(앞으로 화면이라고 하겠습니다.) 이름을 반환하는 처리기를 정의해보죠. Spring MVC가 제공하는 ParameterizableViewController 타입을 쓰면 됩니다.
     
     <bean name="/index.do"
      class="org.springframework.web.servlet.mvc.ParameterizableViewController">
      <property name="viewName" value="index" />
     </bean>
     
    이제 index.do 요청이 발생하면 ParameterizableViewController 객체에게 요청이 넘겨지고, 이 녀석은 화면 이름으로 index를 반환합니다. 그러면, 다시 Spring MVC의 Front Controller에선 결과 화면으로 해당 화면 이름을 가진 실제 페이지를 찾아서(View Resolver를 통해) 보여주는 것이죠.
     
    404를 알리는 페이지가 브라우저에 떠 있는 상태라면 서버를 다시 실행합니다. (브라우저를 닫으신 분들은 Run As > Run on Server를 수행하세요.)


    Servers 뷰에서 좌측에 돌아가는 화살표 아이콘을 눌러 서버를 재구동하면 됩니다. 저와 동일하게 하셨다면, 다음과 같은 에러가 발생합니다.
     
    java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/fmt/LocalizationContext
     
     
    StackTrace를 보면 JstlView가 JstlUtils을 사용하는데, JstlUtils가 사용하는 LocalizationContext를 찾지 못해서 발생하는 오류임을 알 수 있습니다. Classpath Helper 플러그인(JAR 의 의존성까지 체크해주는 이클립스 플러그인, Classpath Helper  참조)을 설치했다면 좀 더 쉽게 알 수 있죠.
     
    org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/fmt/LocalizationContext
    java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/fmt/LocalizationContext
     at org.springframework.web.servlet.support.JstlUtils.exposeLocalizationContext(JstlUtils.java:83)
     at org.springframework.web.servlet.view.JstlView.exposeHelpers(JstlView.java:82)
    ...
     
    spring 라이브러리 zip 파일(with dependencies 다운 로드시)의 lib/j2ee에 들어 있는 jstl.jar 파일을 WEB-INF/lib로 드래그앤드롭합니다. 서버를 재시작하고 브라우저에서 F5키를 누르면 ok가 보이겠죠.

    번호 제목 글쓴이 날짜 조회 수
    공지 [작성중/인프런] 스프링부트 시큐리티 & JWT 강의 황제낙엽 2023.12.20 5083
    84 @ConfigurationProperties 사용하기 황제낙엽 2025.10.23 1617
    83 Spring Boot 에서 서버 로직의 역할별 애노테이션 구분 황제낙엽 2025.10.13 1411
    82 (확인전) [2021.03.12] Eclipse에서 Spring Boot로 JSP사용하기(Gradle) file 황제낙엽 2023.12.23 2817
    81 Spring Boot PetClinic Sample Application 황제낙엽 2023.12.21 2575
    80 Eclipse, Spring Boot, Gradle, SVN 레거시(2019) 시스템 유지보수 환경 구축 file 황제낙엽 2023.11.14 1732
    79 [시리즈 강좌] 스프링부트로 웹서비스 구축하기 황제낙엽 2023.07.13 1691
    78 Spring Boot에서의 RESTful API 모듈 file 황제낙엽 2020.04.16 1896
    77 [POST] Spring MVC 구조 분석 황제낙엽 2024.01.17 2053
    76 Spring Framework 에서 사용하는 annotation 황제낙엽 2024.01.17 2093
    75 Spring MVC configuration file 황제낙엽 2024.01.17 2041
    74 [스프링 시큐리티 OAuth2] 강의 자료와 학습용 소스 file 황제낙엽 2024.01.15 1595
    73 OAuth 2.0 Resource Server - Spring Security OAuth2.0 황제낙엽 2023.12.27 2016
    72 Spring, JSP, Gradle, Eclipse 환경 구축[2] - 샘플 프로젝트 file 황제낙엽 2023.12.24 1922
    71 Spring, JSP, Gradle, Eclipse 환경 구축[1] - 레퍼런스 조사 황제낙엽 2023.12.23 2056
    70 spring-security-samples 황제낙엽 2023.12.22 1800
    69 [Bard] Spring 과 Spring Boot의 차이 file 황제낙엽 2023.12.21 1803
    68 Spring 과 Spring Boot의 차이 file 황제낙엽 2020.05.26 2308
    67 Spring Security OAuth2.0 파헤치기 황제낙엽 2019.09.05 2079
    66 Spring Security OAuth2구현 file 황제낙엽 2019.09.05 2208
    65 Spring Security OAuth 황제낙엽 2019.09.05 2442