2014-10-21 2 views
1

프론트 엔드에는 GWT가 있고 백엔드에는 스프링이있는 응용 프로그램이 있습니다. 스프링 MVC와 함께 하나의 간단한 페이지를 추가하려고하지만 매핑에 문제가있다.봄 MVC + GWT RPC

내가 만든 컨트롤러 :

@Controller 
@RequestMapping("/jobrunner.rpc") 
public class JobRunnerController { 

    @RequestMapping(method = RequestMethod.GET) 
    public String getStartPage() { 
     return "jobrunner"; 
    } 
} 

내 응용 프로그램을 실행

, 매핑에 대한 행이 : [DefaultAnnotationHandlerMapping.registerHandler (411)] 매핑 된 URL 경로 [/jobrunner.rpc] 핸들러 위에 ' jobRunnerController '

하지만이 페이지를 열하려고 할 때, 나는 로그에서 404 페이지 및 다음 줄이 있습니다 [PageNotFound.noHandlerFound (947)] URI와 HTTP 요청을 찾을 수 없습니다 매핑 [/rds/jobrunner.rpc ] 이름이 'spring-rpc'인 DispatcherServlet에서

아마도 web.xml 및 해당 필터에 문제가 있습니까? 여기에 있습니다 :

<session-config> 
    <session-timeout>15</session-timeout> 
</session-config> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<listener> 
    <listener-class>com.db.gbs.gbsapps.rds.backend.servlet.listener.StartupListener</listener-class> 
</listener> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:spring/application-config.xml</param-value> 
</context-param> 

<filter> 
    <filter-name>AuthenticationFilter</filter-name> 
    <filter-class>com.gft.riaframework.backend.api.filters.AuthenticationFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>AuthenticationFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 



<filter> 
    <filter-name>AuthorizationFilter</filter-name> 
    <filter-class>com.db.gbs.gbsapps.rds.backend.services.security.impl.live.CustomAuthorizationFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>AuthorizationFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<filter> 
    <filter-name>ExpiryFilter</filter-name> 
    <filter-class>com.db.gm.adk.server.filter.ExpiryFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>ExpiryFilter</filter-name> 
    <url-pattern>*.html</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>ExpiryFilter</filter-name> 
    <url-pattern>*.css</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>ExpiryFilter</filter-name> 
    <url-pattern>*.js</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>ExpiryFilter</filter-name> 
    <url-pattern>*.gif</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>ExpiryFilter</filter-name> 
    <url-pattern>*.png</url-pattern> 
</filter-mapping> 

<filter> 
    <filter-name>GZIPFilter</filter-name> 
    <filter-class>com.db.gm.adk.server.filter.GZIPFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>GZIPFilter</filter-name> 
    <url-pattern>*.html</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>GZIPFilter</filter-name> 
    <url-pattern>*.css</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>GZIPFilter</filter-name> 
    <url-pattern>*.js</url-pattern> 
</filter-mapping> 

<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<filter> 
    <filter-name>NoCacheFilter</filter-name> 
    <filter-class>com.db.gbs.gbsapps.rds.backend.servlet.filter.NoCacheFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>NoCacheFilter</filter-name> 
    <url-pattern>/index.html</url-pattern> 
</filter-mapping> 

<servlet> 
    <servlet-name>spring-rpc</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>spring-rpc</servlet-name> 
    <url-pattern>*.rpc</url-pattern> 
</servlet-mapping> 

<servlet> 
    <servlet-name>eventServiceImpl</servlet-name> 
    <servlet-class>de.novanic.eventservice.service.EventServiceImpl</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>eventServiceImpl</servlet-name> 
    <url-pattern>/main/gwteventservice</url-pattern> 
</servlet-mapping> 

<error-page> 
    <error-code>500</error-code> 
    <location>/WEB-INF/jsp/error.jsp</location> 
</error-page> 

<error-page> 
    <error-code>503</error-code> 
    <location>/WEB-INF/jsp/error.jsp</location> 
</error-page> 

<error-page> 
    <error-code>403</error-code> 
    <location>/WEB-INF/jsp/403.jsp</location> 
</error-page> 

<error-page> 
    <error-code>404</error-code> 
    <location>/WEB-INF/jsp/404.jsp</location> 
</error-page> 

<error-page> 
    <exception-type>java.lang.Exception</exception-type> 
    <location>/WEB-INF/jsp/error.jsp</location> 
</error-page> 

미리 감사드립니다.

답변

1

은 대부분의 경우 당신이

는 ".rpc"

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-ann-requestmapping-suffix-pattern-match

에서 봄 참조에 보라없이 매핑을하고 시도 ".rpc"를 사용하는 접미사 문제입니다

을 접미사으로

경로 패턴 매칭

기본적으로 Spring MVC는 자동으로 "을 (를) 수행합니다. "접미어 패턴이 일치하므로/person에 매핑 된 컨트롤러도/person 인 암시 적으로에 매핑되므로 파일 확장자 (예 : /person.pdf, /person.xml)를 통해 콘텐츠 유형을 나타낼 수 있습니다. 일반적인 함정은 다음과 같습니다. 매핑의 마지막 경로 세그먼트가 URI 변수 인 경우 (예 :/person/{id}) /person/1.json에 대한 요청이 경로 변수 id = 1 및 확장자 ".json"에서 올바르게 발생하는 동안 id 당연히 여기에 ".com"은 파일 확장자가 아닙니다.

이 문제를 해결하는 적절한 방법은 Spring MVC를 다음과 같이 설정하는 것입니다 : /person/[email protected]om 콘텐츠 협상을 목적으로 등록 된 파일 확장명에 대한 접미사 패턴 일치를 수행합니다. 자세한 내용은 17.16.4 절, "내용 협상"및 17.16.9 절을 참조하십시오. 등록 된 접미사 패턴 만 사용하는 방법과 함께 접미사 패턴 일치를 사용하는 방법을 보여주는 "경로 일치"