1

我正在尝试通过在他们的网站上运行示例来学习使用 Java 的 Google App Engine 的用法。我在 Linux 中使用 Eclipse Juno 作为我的 IDE。它成功地托管在我的本地计算机上,但是在尝试将其部署到 App Engine 时,它​​无法编译 JSP 文件。
SignGuestbookServlet.java

    package com.guest.book;

import java.io.IOException;
import java.util.Date;
import java.util.logging.Logger;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;

public class SignGuestbookServlet extends HttpServlet {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private static final Logger log = Logger.getLogger(SignGuestbookServlet.class.getName());

    public void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws IOException {
        UserService userService = UserServiceFactory.getUserService();
        User user = userService.getCurrentUser();
        String guestbookName=req.getParameter("guestbookName")==null?"default":req.getParameter("guestbookName");
        Key guestbookKey=KeyFactory.createKey("Guestbook", guestbookName);
        String content = req.getParameter("content");
        Date date=new Date();
        Entity greeting = new Entity("Greeting",guestbookKey);
        greeting.setProperty("user", user);
        greeting.setProperty("content", content);
        greeting.setProperty("date", date);

        DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
        datastore.put(greeting);
        resp.sendRedirect("/guestbook.jsp?guestbookName="+guestbookName);
   }
}  

留言簿.jsp

<%@ page import="com.google.appengine.api.users.User" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.List" %>
<%@ page import="com.google.appengine.api.users.User" %>
<%@ page import="com.google.appengine.api.users.UserService" %>
<%@ page import="com.google.appengine.api.users.UserServiceFactory" %>
<%@ page import="com.google.appengine.api.datastore.DatastoreServiceFactory" %>
<%@ page import="com.google.appengine.api.datastore.DatastoreService" %>
<%@ page import="com.google.appengine.api.datastore.Query" %>
<%@ page import="com.google.appengine.api.datastore.Entity" %>
<%@ page import="com.google.appengine.api.datastore.FetchOptions" %>
<%@ page import="com.google.appengine.api.datastore.Key" %>
<%@ page import="com.google.appengine.api.datastore.KeyFactory" %><html>
    <head>
    <title>Guestbook</title>
  </head>

  <body>

<%
    String guestbookName= request.getParameter("guestbookName");
    if(guestbookName==null)
    {
        guestbookName="default";
    }
    pageContext.setAttribute("guestbookName", guestbookName);
    UserService userService = UserServiceFactory.getUserService();
    User user = userService.getCurrentUser();
    if (user != null) {
      pageContext.setAttribute("user", user);
%>
<p>Hello, <%= user.getNickname() %>! (You can
<a href="<%= userService.createLogoutURL(request.getRequestURI()) %>">sign out</a>.)</p>
<%
    } else {
%>
<p>Hello!
<a href="<%= userService.createLoginURL(request.getRequestURI()) %>">Sign in</a>
to include your name with greetings you post.</p><br>
<%
    }
%>
<%
        DatastoreService datastore=DatastoreServiceFactory.getDatastoreService();
        Key guestbookKey = KeyFactory.createKey("Guestbook",guestbookName);
        Query query= new Query("Greeting",guestbookKey).addSort("date",Query.SortDirection.DESCENDING);
        List<Entity> greetings = datastore.prepare(query).asList(FetchOptions.Builder.withLimit(5));
        if(greetings.isEmpty())
        {%>
        <p> Guestbook <%= guestbookName %> has no messages.</p>
        <%
            }
        else
        {
        %>
        <p>Messages in Guestbook <%= guestbookName %>.</p><br>
        <%
            for(Entity greeting : greetings)
            {
                if(greeting.getProperty("user")==null){
        %>
            <p>An anonymous person wrote:</p>
        <%
            }
        else
        {
        %>
        <p><b><%= greeting.getProperty("user") %></b> wrote: </p>
        <% 
        }
        %>
        <blockquote><%= greeting.getProperty("content") %></blockquote>
        <%
            }
        }
        %>  
<form action="/sign" title="Dash" method="post">
    <div><textarea name="content" rows="3" cols="60"></textarea></div>
    <div><input type="submit" value="Post Greeting" /></div>
    <input type="hidden" name="guestbookName" value="<%= guestbookName %>"/>
  </form>
  </body>
</html>  

错误日志

com.google.appengine.tools.admin.JspCompilationException: Failed to compile jsp files.
Exception in thread "main" java.lang.ExceptionInInitializerError
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:188)
    at org.apache.jasper.JspCompilationContext.createCompiler(JspCompilationContext.java:238)
    at org.apache.jasper.JspCompilationContext.createCompiler(JspCompilationContext.java:214)
    at org.apache.jasper.JspC.processFile(JspC.java:1181)
    at org.apache.jasper.JspC.execute(JspC.java:1341)
    at com.google.appengine.tools.development.LocalJspC.main(LocalJspC.java:40)
Caused by: java.lang.NullPointerException
    at com.google.appengine.tools.development.LocalJspC$LocalCompiler.<clinit>(LocalJspC.java:53)
    ... 7 more
Error while executing: /usr/lib/jvm/java-7-openjdk-amd64/bin/java -classpath /home/abdul/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.7.7.1/appengine-java-sdk-1.7.7.1/lib/impl/appengine-api-labs.jar:/home/abdul/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.7.7.1/appengine-java-sdk-1.7.7.1/lib/impl/google_sql.jar:/home/abdul/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.7.7.1/appengine-java-sdk-1.7.7.1/lib/impl/appengine-local-runtime.jar:/home/abdul/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.7.7.1/appengine-java-sdk-1.7.7.1/lib/impl/appengine-api.jar:/home/abdul/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.7.7.1/appengine-java-sdk-1.7.7.1/lib/impl/appengine-api-stubs.jar:/home/abdul/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.7.7.1/appengine-java-sdk-1.7.7.1/lib/shared/jsp/repackaged-appengine-ant-1.7.1.jar:/home/abdul/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.7.7.1/appengine-java-sdk-1.7.7.1/lib/shared/jsp/repackaged-appengine-tomcat-juli-6.0.29.jar:/home/abdul/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.7.7.1/appengine-java-sdk-1.7.7.1/lib/shared/jsp/repackaged-appengine-jasper-6.0.29.jar:/home/abdul/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.7.7.1/appengine-java-sdk-1.7.7.1/lib/shared/jsp/repackaged-appengine-jasper-el-6.0.29.jar:/home/abdul/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.7.7.1/appengine-java-sdk-1.7.7.1/lib/shared/jsp/repackaged-appengine-ant-launcher-1.7.1.jar:/home/abdul/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.7.7.1/appengine-java-sdk-1.7.7.1/lib/shared/jsp-api.jar:/home/abdul/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.7.7.1/appengine-java-sdk-1.7.7.1/lib/shared/appengine-local-runtime-shared.jar:/home/abdul/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.7.7.1/appengine-java-sdk-1.7.7.1/lib/shared/servlet-api.jar:/home/abdul/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.7.7.1/appengine-java-sdk-1.7.7.1/lib/shared/el-api.jar:/tmp/appcfg7995795059214651808.tmp/WEB-INF/classes:/tmp/1366711497850-0:/tmp/appcfg7995795059214651808.tmp/WEB-INF/lib/jdo-api-3.0.1.jar:/tmp/appcfg7995795059214651808.tmp/WEB-INF/lib/repackaged-appengine-jasper-jdt-6.0.29.jar:/tmp/appcfg7995795059214651808.tmp/WEB-INF/lib/appengine-api-labs.jar:/tmp/appcfg7995795059214651808.tmp/WEB-INF/lib/repackaged-appengine-jakarta-standard-1.1.2.jar:/tmp/appcfg7995795059214651808.tmp/WEB-INF/lib/jta-1.1.jar:/tmp/appcfg7995795059214651808.tmp/WEB-INF/lib/datanucleus-appengine-2.1.2.jar:/tmp/appcfg7995795059214651808.tmp/WEB-INF/lib/datanucleus-core-3.1.3.jar:/tmp/appcfg7995795059214651808.tmp/WEB-INF/lib/appengine-endpoints.jar:/tmp/appcfg7995795059214651808.tmp/WEB-INF/lib/appengine-jsr107cache-1.7.7.1.jar:/tmp/appcfg7995795059214651808.tmp/WEB-INF/lib/repackaged-appengine-ant-1.7.1.jar:/tmp/appcfg7995795059214651808.tmp/WEB-INF/lib/repackaged-appengine-tomcat-juli-6.0.29.jar:/tmp/appcfg7995795059214651808.tmp/WEB-INF/lib/repackaged-appengine-jakarta-jstl-1.1.2.jar:/tmp/appcfg7995795059214651808.tmp/WEB-INF/lib/datanucleus-api-jdo-3.1.3.jar:/tmp/appcfg7995795059214651808.tmp/WEB-INF/lib/repackaged-appengine-jasper-6.0.29.jar:/tmp/appcfg7995795059214651808.tmp/WEB-INF/lib/geronimo-jpa_2.0_spec-1.0.jar:/tmp/appcfg7995795059214651808.tmp/WEB-INF/lib/repackaged-appengine-jasper-el-6.0.29.jar:/tmp/appcfg7995795059214651808.tmp/WEB-INF/lib/repackaged-appengine-ant-launcher-1.7.1.jar:/tmp/appcfg7995795059214651808.tmp/WEB-INF/lib/asm-4.0.jar:/tmp/appcfg7995795059214651808.tmp/WEB-INF/lib/datanucleus-api-jpa-3.1.3.jar:/tmp/appcfg7995795059214651808.tmp/WEB-INF/lib/jsr107cache-1.1.jar: -Dcom.google.apphosting.runtime.use_java6=false com.google.appengine.tools.development.LocalJspC -uriroot /tmp/appcfg7995795059214651808.tmp -p org.apache.jsp -l -v -webinc /tmp/appcfg7995795059214651808.tmp/WEB-INF/generated_web.xml -d /tmp/1366711497850-0 -javaEncoding UTF-8 
4

0 回答 0