1

나는 Spring MVC와 함께 구글 앱 엔진에서 일하고 있는데 기본 헬로우 월드 예제가 작동한다고해도 "/"의 요청 매핑을 사용할 때 내 서블릿이 나타나지 않는다. 내 컨트롤러에서 요청 매핑으로 "/"를 지정하더라도 "Hello App Engine!"이 계속 나타납니다. 내 프로젝트에 대한 링크가있는 페이지 이미 웹 XML에서 환영 파일 선언을 가져 왔습니다. 기본적으로"/"매핑이있는 컨트롤러/서블릿이 "Hello App Engine!"을 재정의하지 않습니다.

...

package my.package.for.spring.stuff.controllers; 

import ....; 

// It doesn't seem to make a difference if 
// I have this reqeustmapping or not... 
@Controller 
public class MainController { 

    // If I change mapping to "/main" and then go to 
    // localhost:8888/main then everything works as expected 
    @RequestMapping("/") 
    public String HelloWorld() { 
    return "MyView"; 
    } 
} 

는 여전히에 것입니다 "안녕하세요 앱 엔진!" 페이지. 또한, 여기

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

     <context:component-scan base-package="my.package.for.spring.stuff" /> 

     <bean id="viewResolver" 
       class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
       p:prefix="/WEB-INF/views/main/" p:suffix=".jsp" /> 

</beans> 

왜 아직도 내가 '에도 게재 앱 엔진 시작 파일을 생성 내 web.xml에 ... 여기에

<?xml version="1.0" encoding="utf-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> 


    <servlet> 
     <servlet-name>SpringAppEngine</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>SpringAppEngine</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

그리고 내 스프링 XML은은 ...입니다 내 컨트롤러에서 루트 매핑을 선언합니까? requestmapping을 변경하면 모든 것이 예상대로 작동하기 때문에 설치 프로그램이 올바르게 작동해야합니다.

+0

매핑을 다른 것으로 변경하면 작동합니까? 봄 xml을 보여줄 수 있습니까? –

+0

매핑을 다른 것으로 변경 한 다음'localhost : 8888/anythingelse '로 이동하면 가능합니다. 나는 다른 XML을 얻을 수있는 곳이 아닙니다. 오늘 저녁 늦게 게시해야합니다. – Dave

+0

저는 지금 xmls와 클래스를 사용하여 질문을 업데이트했습니다. – Dave

답변

8

서블릿 3.0 스펙은 말한다 :

단지 '/'문자를 포함하는 문자열이 응용 프로그램의 "기본" 서블릿을 나타냅니다.

그리고는 말한다 :

는 기본적으로 모든 응용 프로그램은 에 오신 것을 환영합니다 - 파일 목록의 목록을 index.htm으로 (L) 및 index.jsp가있을 것이다. 설명자를 사용하여 이 기본 설정을 무시할 수 있습니다.

그래서, 컨테이너가 암시 index.html 환영 파일이 /에 매핑 기본 서블릿보다 우선 정확하게 일치이라고 간주하는 것 같아요.

해결 방법은 index.html 파일을 삭제하거나 설명자에 명시적인 빈 환영 파일 목록을 정의하는 것입니다.

1

분명히 web.xml에서 index.html 매핑을 꺼내는 것만으로는 충분하지 않습니다. 실제로 index.html을 삭제해야합니다. 누군가 내가 아직도 upvote하고 받아 들일 이유를 설명하는 대답을 게시 할 수 있다면.

0

이 게시물은 도움이되었습니다. 파일을 제거하면 문제가 해결되는 이유는 무엇입니까? GAE에 따르면, war 디렉토리의 모든 파일 (JSP와 WEB-INF의 것 제외)은 해당 파일 이름에 대한 매핑을 가져옵니다. 이 암시 적 매핑은 web.xml 파일에있는 서블릿 규칙을 대체할만한 것으로 보인다 :

https://developers.google.com/appengine/docs/java/gettingstarted/staticfiles

제거하거나 index.html을 이름을 변경하면위한 서블릿 규칙이 정적 파일에 대한 암시 적 매핑 대신 사용됩니다 "/" .