GWTとGoogleAppsを使用してアプリをホストしています。私はGWTとWebプログラミングの両方に慣れていないので(私の人生のほとんどをドライバーに費やしました)、うまくいけば、私は単に何かが欠けています。開発モードで完全に機能するサンプルコードをオンラインで見つけました。デプロイすると機能しません。Uploadクラスにコードを記述して、呼び出されたときにDBにデータを書き込みましたが、DBが変更されないため、サービスへの呼び出しが行われないようです。私が使用しているコードが含まれています。JSPコードを取り除くことができれば素晴らしいのですが、Blobstoreのものをインスタンス化することはできません。これをJavaに移行するのは素晴らしいことですが、まず最初に。
FileUpload.jsp:
<%@ page import="com.google.appengine.api.blobstore.BlobstoreServiceFactory" %>
<%@ page import="com.google.appengine.api.blobstore.BlobstoreService" %>
<%
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
%>
<html>
<head>
<title>Upload Test</title>
</head>
<body>
<form action="<%= blobstoreService.createUploadUrl("/upload") %>" method="post" enctype="multipart/form-data">
<input type="text" name="foo">
<input type="file" name="myFile" size="50">
<input type="submit" value="Submit">
</form>
</body>
</html>
置き換える必要がある醜いダイアログですが、基本的にこれは機能します。ユーザーがファイル名を入力し、送信を押します。これで、サーバー側に次のコードがあります。
// Upload.java
public class Upload extends HttpServlet {
private static final long serialVersionUID = 1L;
private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
DebugViaDb.writeDebugData("AA"); // I know my DB write code works as other parts of the code work with the DB
HttpSession session = req.getSession(true);
System.out.println("Session is " + session);
Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(req);
BlobKey blobKey = blobs.get("myFile");
if(blobKey == null) {
res.sendRedirect("/");
}
else {
res.sendRedirect("/uploadServlet?blob-key=" + blobKey.getKeyString());
}
}
}
これはJSPによって呼び出され、JSPはアップロードサーブレットを呼び出します。
// UploadServlet.java
public class UploadServlet extends HttpServlet {
<edited>
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
DebugViaDb.writeDebugData("BB");
BlobKey blobKey = new BlobKey(req.getParameter("blob-key"));
...
}
}
私のweb.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee">
<!-- Servlets -->
<servlet>
<servlet-name>myDataServiceImpl</servlet-name>
<servlet-class>com.blah.server.MyDataServiceImpl</servlet-class>
</servlet>
<servlet>
<servlet-name>Upload</servlet-name>
<servlet-class>com.blah.server.Upload</servlet-class>
</servlet>
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>com.blah.server.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myDataServiceImpl</servlet-name>
<url-pattern>/my/myData</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Upload</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/uploadServlet</url-pattern>
</servlet-mapping>
<!-- Default page to serve -->
<welcome-file-list>
<welcome-file>my.html</welcome-file>
</welcome-file-list>
</web-app>
したがって、問題は、これを開発モードで実行すると、すべてが完全に機能することです。デプロイすると、「アップロード」が呼び出されたようには見えません。サーバーでこれをデバッグするところまで行き詰まっているので、何が起こっているのかわかりません。ログファイルを取得する運はありません。