sitelink1  
sitelink2  
sitelink3  
extra_vars6  
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가 보이겠죠.

    번호 제목 글쓴이 날짜 조회 수
    37 Spring MVC 어플리케이션 개발 <11> 간단한 조회 구현 방안 비교 황제낙엽 2007.05.27 383
    36 Spring MVC 어플리케이션 개발 <10> 도메인 객체 수정시 변경 사항 황제낙엽 2007.05.27 224
    35 Spring MVC 어플리케이션 개발 <9> JSP 화면 작성 황제낙엽 2007.05.27 234
    34 Spring MVC 어플리케이션 개발 <8> Spring기반 iBatis DAO 작성 황제낙엽 2007.05.27 230
    33 Spring MVC 어플리케이션 개발 <7> Spring과 iBatis 연동을 위한 준비 황제낙엽 2007.05.26 209
    32 Spring MVC 어플리케이션 개발 <5> MVC 컨트롤러 작성 황제낙엽 2007.05.26 212
    31 Spring MVC 어플리케이션 개발 <4> 화면 요구 작성 황제낙엽 2007.05.26 224
    » Spring MVC 어플리케이션 개발 <3> Web Application Context 파일 작성 황제낙엽 2007.05.26 279
    29 Spring MVC 어플리케이션 개발 <2> Spring MVC 구동을 위한 web.xml 작성 황제낙엽 2007.05.26 220
    28 Spring MVC 어플리케이션 개발 <1> 프로젝트 디렉토리 생성 황제낙엽 2007.05.26 233
    27 Struts에서 Spring으로의 이주 가이드 - Spring (java/j2ee Application Framework) 황제낙엽 2006.02.27 213
    26 실습 STEP1 - 기초편 (Hello Spring 출력) file 황제낙엽 2007.04.27 258
    25 Bean 생명주기 관리 황제낙엽 2007.03.23 211
    24 Spring프레임워크 소개문서 (3) 황제낙엽 2007.03.22 225
    23 Spring프레임워크 소개문서 (2) 황제낙엽 2007.03.22 286
    22 Spring프레임워크 소개문서 (1) 황제낙엽 2007.03.22 279
    21 Cugain의 샘플프로젝트 jpetstore 분석기 - (1) jpetstore 설치 file 황제낙엽 2007.02.22 352
    20 Cugain의 샘플프로젝트 jpetstore 분석기 - (7) PetStoreImpl.java 황제낙엽 2007.05.24 232
    19 Cugain의 샘플프로젝트 jpetstore 분석기 - (6) petstore-servlet.xml 분석 황제낙엽 2007.04.27 203
    18 Cugain의 샘플프로젝트 jpetstore 분석기 - (5) applicationContext.xml 분석 황제낙엽 2007.04.21 438