简体   繁体   中英

Error after deploying the application in appspot

I get the following error in the browser when trying to access my Java application in appspot.

Error: NOT_FOUND

However it works fine when I run from Eclipse or ant. I have checked the logs in GAE admin console but couldn't find any error messages.

I have also tried by removing all the *.class files before building.

The application is deployed using the appcfg script provided in appengine-java-sdk-1.5.3. Is there any specific reason for this behaviour?

Here is the debug messages from GAE log console:

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:

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

Contents of index.jsp (welcome-file)

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

Here is the 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>

After several days of tests and experiments, I got the solution for the problem in appspot.com. There was an issue with the JSP configuration in which the prefix had an additional slash.

Old Configuration:

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

New configuration:

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

In the controller the return path was "/Login/LoginPage.jsp". ( did the change in xml file since there were too much controller methods which returned the jsp file location).

I couldn't trace the issue until log4j was enabled to record the debug issues. The key in identifying the issue was the following line in the logs:

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'

Thanks @Dave for your patience and guidance.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM