カスタムHttpServletをGAEにロードする方法はありますか? .serverパッケージにHttpServletを含むプロジェクトをアップロードし、web.xmlに追加しました...
<servlet>
<servlet-name>testServlet</servlet-name>
<servlet-class>gwtone.server.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/tester/greet</url-pattern>
</servlet-mapping>
他に何か足りないものはありますか、それとも不可能ですか?
--------編集--------
サーバーを初期化するときに表示されるもの。
Jan 22, 2012 4:23:44 AM com.google.apphosting.utils.jetty.JettyLogger info
INFO: Logging to JettyLogger(null) via com.google.apphosting.utils.jetty.JettyLogger
Jan 22, 2012 4:23:44 AM com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml
INFO: Successfully processed E:\Program Files\Eclipse-SDK-3.7.1-win32-x86_64\Workspace\gwtone\war\WEB-INF/appengine-web.xml
Jan 22, 2012 4:23:44 AM com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml
INFO: Successfully processed E:\Program Files\Eclipse-SDK-3.7.1-win32-x86_64\Workspace\gwtone\war\WEB-INF/web.xml
Jan 21, 2012 10:23:44 PM com.google.appengine.tools.development.DevAppServerImpl start
INFO: The server is running at http://localhost:8888/
Jan 21, 2012 10:23:44 PM com.google.appengine.tools.development.DevAppServerImpl start
INFO: The admin console is running at http://localhost:8888/_ah/admin
これがクラッシュしたときに表示されるものです。
WARNING: Error for /tester/greet
Java.lang.VerifyError: Expecting a stackmap frame at branch target 14 in method gwtone.server.TestServlet.doGet(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V at offset 0
at Java.lang.Class.getDeclaredConstructors0(Native Method)
at Java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at Java.lang.Class.getConstructor0(Unknown Source)
at Java.lang.Class.newInstance0(Unknown Source)
at Java.lang.Class.newInstance(Unknown Source)
at org.mortbay.jetty.servlet.Holder.newInstance(Holder.Java:153)
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.Java:428)
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.Java:339)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.Java:487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1166)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.Java:35)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.Java:60)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.Java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.Java:122)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1157)
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.Java:97)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.Java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.Java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.Java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.Java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.Java:418)
at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.Java:78)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.Java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.Java:362)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.Java:152)
at org.mortbay.jetty.Server.handle(Server.Java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.Java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.Java:923)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.Java:547)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.Java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.Java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.Java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.Java:582)
編集#2
package gwtone.server;
import Java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestServlet extends HttpServlet {
public TestServlet(){}
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("0");
try {
System.out.println("1");
resp.getWriter().println("IT WORKED");
resp.getWriter().flush();
System.out.println("2");
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("3");
}
}
GAEはJava 1.6を使用しますが、コードをJava 1.7でコンパイルしました。Java 1.6で再コンパイルする必要がありますコメントによると、Eclipseを使用しているため、プロジェクトのプロパティのJava> CompilerセクションでJavaコンパイラレベル)を設定できます。
BalusCが指摘したように、問題に対する1つの解決策は、JDK6を使用することです。
別の解決策は、JDK7を使い続けたい場合、VMの引数として「-XX:-UseSplitVerifier」を使用することです。に行く
ウィンドウ→設定→Java→インストール済みJRE→編集...→デフォルトVM arguments
そこに追加します。
-XX:-UseSplitVerifierの使用は一時的な解決策です。 Now Javaは、この不良または欠落したスタックマップフレームを許容するバイトコード検証の前のバージョンを使用します。Java8はこのオプションをサポートしていません。
Eclipse Mars/Project properties/Java compiler:
1.7の特定のコードを持っていなかったので:-)
サーバーUbuntu + JVM 1.7.0_85-b01上のTomcat 7.0.52 JDK 7u55上のEclipse Eclipse Mars