2014-11-09 4 views
3

InternalResourceViewResolver 만 사용하면 뷰가 올바르게 해석됩니다. 내 구성 파일에 주석 기반을 추가하면 내보기가 해결되지만 내 자원은 해결되지 않습니다.Spring MVC InternalResourceViewResolver 및 정적 리소스

<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
    <display-name>spring.introduction</display-name> 

    <servlet> 
     <servlet-name>ApplicationServlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> 
     </init-param> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>ApplicationServlet</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

    <welcome-file-list> 
     <welcome-file>WEB-INF/views/index.jsp</welcome-file> 
    </welcome-file-list> 

</web-app> 

서블릿-context.xml에 :

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns:beans="http://www.springframework.org/schema/beans" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:mvc="http://www.springframework.org/schema/mvc" 
       xmlns:context="http://www.springframework.org/schema/context" 
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <context:component-scan base-package="com.tsystems.sample" /> 

    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <beans:property name="prefix" value="/WEB-INF/views/" /> 
     <beans:property name="suffix" value=".jsp" /> 
    </beans:bean> 

    <mvc:resources location="/js/**" mapping="/resources/js/" /> 
    <!--mvc:default-servlet-handler/--> 
    <mvc:annotation-driven/> 

</beans:beans> 

기본 흐름 : 의 index.jsp이 여기

src 
    main 
     java 
     resources 
      css 
      js 
       ajaxHandler.js 
     webapp 
      WEB-INF 
       spring 
       appServlet 
        servlet-context.xml 
       views 
        index.jsp 
        internalview.jsp 
       web.xml 

내 web.xml에의 ... 나를 미치게된다 indexController에 "보낸 사람 : 색인"을 POST로 전달하는 양식이 있습니다. 아래의 방법으로 넘어 가야합니다 :

@RequestMapping(value = "/Forward", method = RequestMethod.POST) 
public ModelAndView forward(@RequestParam(value = "sender", required = true) String sender, Model model) { 

    m_logger.info(String.format("Captured sender attribute: " + sender)); 

    ModelAndView mav = new ModelAndView("internalview"); 
    mav.addObject("sender", sender); 

    return mav; 
} 

이것은 지금까지 작동합니다. 정보 메시지가 서버 로그에 나타나고 내부보기가 나타납니다. 다음과 같이 내 internalview.jsp에서 나는 JS를로드하려고 :

[org.springframework.web.servlet.PageNotFound] (default task-20) No mapping found for HTTP request with URI [/spring.introduction/js/ajaxHandler.js] in DispatcherServlet with name 'ApplicationServlet' 

내가 제거하면 annotation- :

<script type="text/javascript" src="<c:url value="/js/ajaxHandler.js"/>"></script> 

좋은 404 오류 및 server.log에 아래의 메시지와 함께 종료 구성 파일에서 내보기조차 404 NOT FOUND가됩니다. 주석 중심의 mvc : resources를 제거하면 작동하지만 물론 .js가로드되지 않습니다.

이 문제를 어떻게 해결할 수 있습니까? (이와 비슷한 질문이 있지만 그 답을 시도한 후에 아무도 그렇게 일하지 않아서 그 질문이 다른 사람에게 중복 될 수 있다고 인정하는 동안 답이 하나도 없기 때문에 아직 열어 두지 않습니다)

답변

4

JavaScript 및 CSS와 같은 웹 리소스는 일반적으로 src/main/webapp 디렉토리 아래에 있어야합니다. 그래서 귀하의 경우 (귀하의 mvc:resources 매핑을 기반으로), src/main/webapp 디렉토리에 resources 디렉토리를 만들고 거기에 에서 jscss 디렉토리를 이동해야합니다.

src/main/webapp/resources/js 
src/main/webapp/resources/css 
+0

매력처럼 작동합니다. 감사합니다. – Wrath

관련 문제