Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 我的控制器/servlet带有/&引用;映射不是';t凌驾于“之上”;你好,应用程序引擎&引用;_Google App Engine_Servlets_Spring Mvc_Web.xml_Sts Springsourcetoolsuite - Fatal编程技术网

Google app engine 我的控制器/servlet带有/&引用;映射不是';t凌驾于“之上”;你好,应用程序引擎&引用;

Google app engine 我的控制器/servlet带有/&引用;映射不是';t凌驾于“之上”;你好,应用程序引擎&引用;,google-app-engine,servlets,spring-mvc,web.xml,sts-springsourcetoolsuite,Google App Engine,Servlets,Spring Mvc,Web.xml,Sts Springsourcetoolsuite,我正在google app engine上使用Spring MVC,尽管我已经得到了一个基本的hello world示例,但当我使用“/”的请求映射时,我无法让我的servlet显示出来。即使我在控制器中指定“/”作为我的请求映射,我仍然会得到“Hello App Engine!”页面,其中包含指向我的项目的链接。我已经从web xml中提取了欢迎文件声明 基本上 package my.package.for.spring.stuff.controllers; import ....; //

我正在google app engine上使用Spring MVC,尽管我已经得到了一个基本的hello world示例,但当我使用“/”的请求映射时,我无法让我的servlet显示出来。即使我在控制器中指定“/”作为我的请求映射,我仍然会得到“Hello App Engine!”页面,其中包含指向我的项目的链接。我已经从web xml中提取了欢迎文件声明

基本上

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";
  }
}
仍将转到“Hello App Engine!”页面。还有,这是我的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>

斯普林加彭
org.springframework.web.servlet.DispatcherServlet
1.
斯普林加彭
/
这是我的SpringXML

<?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>


为什么即使我在控制器中声明根映射,应用引擎生成的欢迎文件仍会显示?我知道我的设置应该是正确的,因为当我更改requestmapping时,一切都按预期进行。

显然,从web.xml中拉出index.html映射是不够的,实际上必须删除index.html。如果有人能给出一个答案,解释为什么我仍然会投票并接受。

显然,从web.xml中删除index.html映射是不够的,实际上你必须删除index.html。如果有人能给出一个答案,解释为什么我仍然会投票并接受。

servlet 3.0规范说:

仅包含“/”字符的字符串表示“默认值” 应用程序的servlet

它还说:

默认情况下,所有应用程序中都会有index.htm(l)和index.jsp 欢迎文件列表。描述符可用于 覆盖这些默认设置

因此,我猜想容器认为隐式
index.html
欢迎文件是一个精确匹配的文件,它优先于映射到
/
的默认servlet


解决方案是删除index.html文件,或者在描述符中定义一个显式的空欢迎文件列表。

servlet 3.0规范说明:

仅包含“/”字符的字符串表示“默认值” 应用程序的servlet

它还说:

默认情况下,所有应用程序中都会有index.htm(l)和index.jsp 欢迎文件列表。描述符可用于 覆盖这些默认设置

因此,我猜想容器认为隐式
index.html
欢迎文件是一个精确匹配的文件,它优先于映射到
/
的默认servlet


解决方案是删除index.html文件,或者在描述符中定义一个显式的空欢迎文件列表。

这篇文章帮助了我,我想我可以进一步解释为什么删除该文件可以解决问题。根据GAE,war目录中的任何文件(JSP和WEB-INF中的任何文件除外)都会获得到该文件名的映射。此隐式映射似乎取代了web.xml中的任何servlet规则:


一旦删除或重命名index.html,就会使用“/”的servlet规则,而不是静态文件的隐式映射。

这篇文章帮助了我,我想我可以进一步解释为什么删除该文件可以解决问题。根据GAE,war目录中的任何文件(JSP和WEB-INF中的任何文件除外)都会获得到该文件名的映射。此隐式映射似乎取代了web.xml中的任何servlet规则:


删除或重命名index.html后,将使用“/”的servlet规则,而不是静态文件的隐式映射。

如果将映射更改为其他映射,是否有效?您可以显示您的spring xml吗?是的,如果我将映射更改为其他内容,然后转到
localhost:8888/anythingelse
,它就可以工作了。我不是在一个可以得到其他XML的地方。今晚晚些时候我必须发布这些内容。我已经更新了问题w/myxmls和类,几乎和我现在使用的一样。这个“hello”字符串来自哪里?这可能只是应用程序引擎中的一个bug。如果文本位于index.html或index.jsp中,您是否尝试过删除此html/jsp?如果您将映射更改为其他内容,是否有效?您可以显示您的spring xml吗?是的,如果我将映射更改为其他内容,然后转到
localhost:8888/anythingelse
,它就可以工作了。我不是在一个可以得到其他XML的地方。今晚晚些时候我必须发布这些内容。我已经更新了问题w/myxmls和类,几乎和我现在使用的一样。这个“hello”字符串来自哪里?这可能只是应用程序引擎中的一个bug。如果文本位于index.html或index.jsp中,您是否尝试过删除此html/jsp?