WEB 서버를 사용하는 경우 정적 파일 이나, Default 요청에 대한 자원 관리는 WAS 가 처리하지 않고, WEB 서버에게 위임 한다.
WAS(Web Application Server) 만 사용하는 경우 Servlet 등록 하고, 프로그래밍 하여 동적 페이지를 생성 한다. 모든 요청을 받는 Servlet 을 작성 하는 경우 별도 처리를 해줘야 한다.
Spring MVC 를 사용한다고 하면, 대표적으로 DispatcherServlet 를 등록하고, 모든 요청을 받게 설정을 한다.
web.xml
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:dispatcher-servlet.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
위와 같이 하는 경우 정적 파일 까지 포함해서 DispatcherServlet 이 요청을 받게 된다. 해당 요청을 처리하기 위해서는 별도의 설정이 필요 하다.
1. mvc:view-controller
dispatcher-servlet.xml
<mvc:view-controller path="/" view-name="index"/>
위 소스를 추가 하자. DispatcherServlet 에 view-controller 설정을 했다는 것은 해당 path 의 요청이 오면 view-name 으로 페이지를 연결 시켜 준다. 해당 기능은 Spring 의 AbstractController 가 AbstractUrlViewController 에게 위임 하고 있다. 아래 코드는 실제 구현 되어있는 부분이다.
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) {
String lookupPath = getUrlPathHelper().getLookupPathForRequest(request);
String viewName = getViewNameForRequest(request);
if (this.logger.isDebugEnabled()) {
this.logger.debug("Returning view name '" + viewName
+ "' for lookup path [" + lookupPath + "]");
}
return new ModelAndView(viewName,
RequestContextUtils.getInputFlashMap(request));
}
view-controller 기능을 사용하면 직접 구현하지 않아도 편하게 개발이 가능 하다.
2. mvc:resources
dispatcher-servlet
<mvc:resources location="/css/**" mapping="/css/**"/>
<mvc:resources location="/image/**" mapping="/image/**"/>
<mvc:resources location="/js/**" mapping="/js/**"/>
위 소스를 추가 하자. 설명은 Tomcat 으로 한다. location 에 대한 요청이 들어오면 해당 요청을 Tomcat 의 DefaultServlet 에 위임 한다. DefaultServlet 는 tomcat/conf/web.xml 을 참고 하면 된다.
web.xml
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- The mapping for the default servlet -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
기본적으로 등록 되어 있는 Servlet 이다. webapps 경로를 찾아 mapping 에 대한 파일을 응답 한다.
설명한 두가지 방법을 활용 한다면, WAS 만 사용하는 프로젝트나, 아니면 임시로 설정하여 개발하는대 많은 도움이 될 것이다.