Gwt 文件上载在我的开发环境中工作,但在部署时不起作用
我正在使用GWT和谷歌应用程序来托管我的应用程序。由于我对GWT和Web编程都是新手(我大部分时间都在做驱动程序),希望我只是错过了一些东西。 我在网上找到了一些在开发模式下运行良好的示例代码。当我部署时,它不起作用。我已经在Upload类中添加了代码,以便在调用时将数据写入DB,但似乎从未调用我的服务,因为DB从未更改。 包括我正在使用的代码。如果我能去掉JSP代码就太好了,但是我不能实例化Blobstore的东西。将其转移到Java中会很好,但首先要做的是Gwt 文件上载在我的开发环境中工作,但在部署时不起作用,gwt,file-upload,upload,Gwt,File Upload,Upload,我正在使用GWT和谷歌应用程序来托管我的应用程序。由于我对GWT和Web编程都是新手(我大部分时间都在做驱动程序),希望我只是错过了一些东西。 我在网上找到了一些在开发模式下运行良好的示例代码。当我部署时,它不起作用。我已经在Upload类中添加了代码,以便在调用时将数据写入DB,但似乎从未调用我的服务,因为DB从未更改。 包括我正在使用的代码。如果我能去掉JSP代码就太好了,但是我不能实例化Blobstore的东西。将其转移到Java中会很好,但首先要做的是 FileUpload.jsp:
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>
FileUpload.jsp:
上传测试
丑陋的对话框需要更换,但本质上这是可行的。用户输入文件名并点击提交。现在,在服务器端,我有以下代码:
// 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());
}
}
}
//Upload.java
公共类上载扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
私有BlobstoreService BlobstoreService=BlobstoreServiceFactory.getBlobstoreService();
public void doPost(HttpServletRequest-req,HttpServletResponse-res)抛出ServletException,IOException{
DebugViaDb.writeDebugData(“AA”);//我知道我的DB write代码与DB的其他部分一样工作
HttpSession session=req.getSession(true);
System.out.println(“会话为”+会话);
Map blobs=blobstoreService.getUploadedBlobs(req);
BlobKey-BlobKey=blobs.get(“myFile”);
if(blobKey==null){
res.sendRedirect(“/”);
}
否则{
res.sendRedirect(“/uploadServlet?blob key=“+blobKey.getKeyString());
}
}
}
这由JSP调用,JSP反过来调用我的上载servlet:
// 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"));
...
}
}
//UploadServlet.java
公共类UploadServlet扩展HttpServlet{
public void doGet(HttpServletRequest-req、HttpServletResponse-res)抛出IOException{
DebugViaDb.writeDebugData(“BB”);
BlobKey BlobKey=新BlobKey(req.getParameter(“blob键”));
...
}
}
My 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>
myDataServiceImpl
com.blah.server.MyDataServiceImpl
上传
com.blah.server.Upload
上传servlet
com.blah.server.UploadServlet
myDataServiceImpl
/我的/我的数据
上传
/上传
上传servlet
/上传servlet
my.html
所以,问题是,当我在开发模式下运行它时,一切都能完美地工作。部署时,似乎从未调用过“上载”。我被困在服务器上调试这个,所以我不确定到底发生了什么。无法获得日志文件。首先想到的是,任何处于开发模式的URL都缺少上下文根。因此,如果您的war文件名为myapp.war,则URL看起来会有所不同。有点像这样:
http://127.0.0.1:8888/index.jsp
http://localhost:8080/myapp/index.jsp
当页面刷新时,表单提交会返回什么http代码,假设它确实尝试连接到某个地方?首先想到的是,任何处于开发模式的URL都缺少上下文根。因此,如果您的war文件名为myapp.war,则URL看起来会有所不同。有点像这样:
http://127.0.0.1:8888/index.jsp
http://localhost:8080/myapp/index.jsp
当页面刷新时,表单提交返回什么http代码,假设它确实尝试连接到某个地方?问题似乎在于
表单的操作标签中设置的URL
尝试打印
<%= blobstoreService.createUploadUrl("/upload") %>
在开发模式和部署模式中。问题似乎在于表单的操作中设置的URL
尝试打印
<%= blobstoreService.createUploadUrl("/upload") %>
在开发模式和部署模式下。能否打印出服务器上解析为的blobstoreService.createUploadUrl(“/upload”)
?也许这样做会帮你找到正确的方向。另外,在Firebug中,您是否在NET选项卡中看到对服务器的任何调用?顺便说一句+1,好问题!您能打印出服务器上解析的blobstoreService.createUploadUrl(“/upload”)
是什么吗?也许这样做会帮你找到正确的方向。另外,在Firebug中,您是否在NET选项卡中看到对服务器的任何调用?顺便说一句+1,好问题!