2011-09-30 141 views
0

嘗試在appspot中訪問我的Java應用程序時,瀏覽器中出現以下錯誤。在appspot中部署應用程序後出現錯誤

Error: NOT_FOUND 

但是,它運行良好,當我從Eclipse或螞蟻運行。我檢查了GAE管理控制檯中的日誌,但找不到任何錯誤消息。

我也試過在構建之前刪除所有* .class文件。

該應用程序使用appengine-java-sdk-1.5.3中提供的appcfg腳本進行部署。這種行爲是否有任何特定的原因?

下面是來自GAE日誌控制檯的調試消息:

2011-10-02 22:11:39.306/302 14950ms 10348cpu_ms 315api_cpu_ms 0kb Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1 
115.119.214.18 - - [02/Oct/2011:22:11:39 -0700] "GET/HTTP/1.1" 302 191 - "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1" "xxxxxxxx-test.appspot.com" ms=14950 cpu_ms=10348 api_cpu_ms=315 cpm_usd=0.287514 loading_request=1 throttle_code=1 instance=00c61b117c46324075b13d0c2ce04f5678c813 
I 2011-10-02 22:11:26.447 
javax.servlet.ServletContext log: Initializing Spring root WebApplicationContext 
W 2011-10-02 22:11:26.728 
[s~xxxxxxxx-test/8.353561328003056299].<stderr>: log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader). 

W 2011-10-02 22:11:26.728 
[s~xxxxxxxx-test/8.353561328003056299].<stderr>: log4j:WARN Please initialize the log4j system properly. 

I 2011-10-02 22:11:37.075 
javax.servlet.ServletContext log: Initializing Spring FrameworkServlet 'dispatcher' 
I 2011-10-02 22:11:39.306 
This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This request may thus take longer and use more CPU than a typical request for your application. 

web.xml文件:index.jsp中的

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

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

     <context-param> 
       <param-name>contextConfigLocation</param-name> 
       <param-value>/WEB-INF/spring/*.xml</param-value> 
     </context-param> 
     <listener> 
       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
     </listener> 
     <servlet> 
       <servlet-name>dispatcher</servlet-name> 
       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
       <init-param> 
         <param-name>contextConfigLocation</param-name> 
         <param-value>/WEB-INF/spring/servlet-config.xml</param-value> 
       </init-param> 
       <load-on-startup>1</load-on-startup> 
     </servlet> 
     <servlet-mapping> 
       <servlet-name>dispatcher</servlet-name> 
       <url-pattern>/ExampleApp/*</url-pattern> 
     </servlet-mapping> 
     <welcome-file-list> 
       <welcome-file>index.jsp</welcome-file> 
     </welcome-file-list> 
</web-app> 

內容(歡迎文件)

<% response.sendRedirect("/ExampleApp/user/login"); %> 

這裏是build.xml:

<project> 
    <property name="sdk.dir" location="../appengine-java-sdk-1.5.3" /> 
    <import file="${sdk.dir}/config/user/ant-macros.xml" /> 

    <path id="project.classpath"> 
     <pathelement path="war/WEB-INF/classes" /> 
     <fileset dir="war/WEB-INF/lib"> 
      <include name="**/*.jar" /> 
     </fileset> 
     <fileset dir="${sdk.dir}/lib"> 
      <include name="shared/**/*.jar" /> 
     </fileset> 
    </path> 
<!-- 
    <target name="copyjars" description="Copies the App Engine JARs to the WAR."> 
     <copy todir="war/WEB-INF/lib" flatten="true"> 
     <fileset dir="${sdk.dir}/lib/user"> 
      <include name="**/*.jar" /> 
     </fileset> 
     </copy> 
    </target> 
--> 
    <target name="compile" description="Compiles Java source and copies other source files to the WAR."> 
     <mkdir dir="war/WEB-INF/classes" /> 
     <copy todir="war/WEB-INF/classes"> 
      <fileset dir="src"> 
      <exclude name="**/*.java" /> 
      </fileset> 
     </copy> 
     <javac srcdir="src" destdir="war/WEB-INF/classes" classpathref="project.classpath" debug="on" /> 
    </target> 

    <target name="datanucleusenhance" depends="compile" description="Performs JDO enhancement on compiled data classes."> 
     <enhance_war war="war" /> 
    </target> 

    <target name="runserver" depends="datanucleusenhance" description="Starts the development server."> 
     <dev_appserver war="war" /> 
    </target> 

    <target name="update" depends="datanucleusenhance" description="Uploads the application to App Engine."> 
     <appcfg action="update" war="war" /> 
    </target> 

    <target name="update_indexes" depends="datanucleusenhance" description="Uploads just the datastore index configuration to App Engine."> 
     <appcfg action="update_indexes" war="war" /> 
    </target> 

    <target name="rollback" depends="datanucleusenhance" description="Rolls back an interrupted application update."> 
     <appcfg action="rollback" war="war" /> 
    </target> 

    <target name="request_logs" description="Downloads log data from App Engine for the application."> 
     <appcfg action="request_logs" war="war"> 
     <options> 
      <arg value="--num_days=5"/> 
     </options> 
     <args> 
      <arg value="logs.txt"/> 
     </args> 
     </appcfg> 
    </target> 
</project> 
+0

我假設你在瀏覽器中看到了你的應用程序的URL。你看到了嗎?是否有任何類型的堆棧跟蹤? –

+0

是的,**未找到**是我可以在瀏覽器中看到的唯一錯誤消息。我已經從GAE日誌控制檯添加了調試消息。該應用程序在Eclipse和ant中運行時沒有任何問題。 – libregeek

+0

我很確定這個錯誤不是AppEngine的錯誤之一。是否有可能某些配置位的Spring不在您的'war'文件夾中? –

回答

0

經過幾天的測試和實驗,我得到了appspot.com中問題的解決方案。 JSP配置中存在一個問題,其中前綴具有額外的斜槓。

舊的配置:

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

新配置:

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

在控制器的返回路徑是 「/Login/LoginPage.jsp」。 (在xml文件中做了更改,因爲有太多的控制器方法返回了jsp文件位置)。

直到啓用log4j來記錄調試問題時,我才能追蹤問題。確定問題的關鍵是原木中的以下行:

2011-10-10 21:38:14.644 
[s~exampleapp-test/8.353868453989422042].<stdout>: 16:08:14,644 DEBUG [org.springframework.web.servlet.view.JstlView] - Forwarding to resource [/WEB-INF/views//Login/LoginPage.jsp] in InternalResourceView '/Login/LoginPage' 

感謝@Dave爲您的耐心和指導。

相關問題