java - 无法使用GAE运行Web项目

标签 java eclipse google-app-engine

我刚刚开始使用没有 GWT 的 GAE SDK 制作一个新的 Web 项目,但在控制台中我得到的只是:

WARNING: Failed startup of context com.google.appengine.tools.development.DevAppEngineWebAppContext@689a1f91{/,C:\Users\Mike\workspace\project\war}
java.lang.IllegalStateException: No such servlet: default
    at org.mortbay.jetty.servlet.ServletHandler.updateMappings(ServletHandler.java:1026)
    at org.mortbay.jetty.servlet.ServletHandler.setServletMappings(ServletHandler.java:1110)
    at org.mortbay.jetty.webapp.WebXmlConfiguration.initialize(WebXmlConfiguration.java:306)
    at org.mortbay.jetty.webapp.WebXmlConfiguration.configure(WebXmlConfiguration.java:222)
    at org.mortbay.jetty.webapp.WebXmlConfiguration.configureWebApp(WebXmlConfiguration.java:180)
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1247)
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
    at org.mortbay.jetty.Server.doStart(Server.java:224)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:196)
    at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:239)
    at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:146)
    at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:173)
    at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48)
    at com.google.appengine.tools.development.DevAppServerMain.<init>(DevAppServerMain.java:120)
    at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:96)

这是 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>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.png</url-pattern>
    <url-pattern>*.js</url-pattern>
    <url-pattern>*.css</url-pattern>
  </servlet-mapping>
  <filter>
    <filter-name>sitemesh</filter-name>
    <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>sitemesh</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <welcome-file-list>
    <welcome-file>dispatcher</welcome-file>
  </welcome-file-list>
  <session-config>
    <session-timeout>30</session-timeout>
  </session-config>
</web-app>

最佳答案

如错误消息所示,您有一个到名为 default 的 servlet 的映射:

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.png</url-pattern>
    <url-pattern>*.js</url-pattern>
    <url-pattern>*.css</url-pattern>
</servlet-mapping>

但没有 servlet 调用它。这是唯一定义的 servlet:

  <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

当您使用 spring 时,您可能不需要默认的 servlet,因为 spring 可能会负责将您的请求分派(dispatch)到正确的处理程序。如果删除上面的第一段代码,应该没问题。

我假设您正在使用 Spring MVC。如果是这样,您需要设置 spring 来扫描组件,以便它可以拾取带注释的 Controller 来处理请求,或者手动设置到 Controller 的映射。

关于java - 无法使用GAE运行Web项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10248642/

相关文章:

java - GAE HDR : Are entity retrievals by key eventually consistent within a XG transaction?

带有 Firebase 和 Google App 引擎的 Java 服务器

java - 如何控制日志文件的大小?

java - SequenceFile 到 .txt 转换

java - eclipse hell 。 . .读取项目描述文件(.project)失败

c++ - 使用来自控制台的输入进行 Eclipse 调试

python - 应设置 oauth2client.client.ApplicationDefaultCredentialsError : 'type' , 'authorized_user' 或 'service_account' 值

java - "Negative time"尝试运行使用 tomcat7-maven-plugin :exec-war-only 生成的 WAR

java - junit 测试用例问题!避免代码重复

java - 如何将应用程序部署到谷歌应用程序引擎中