0

这是我的代码,可让用户上传文件并将其保存以供将来参考。入口点 class-Home.java 具有以下内容——

FileUpload upload = new FileUpload();
FormPanel fp = new FormPanel();
fp.setEncoding(FormPanel.ENCODING_MULTIPART);
fp.setMethod(FormPanel.METHOD_POST);
fp.setAction("\\UploadServlet");
upload.setName("file-upload");

以及用于添加 RootPanel 和所有内容的必要附加代码。

Q1。应该像

fp.setAction(GWT.getModuleBaseURL()+"UploadServlet");

是 setAction 的首选?什么路径应该放在这里?

UploadServlet 类取自

http://www.tutorialspoint.com/servlets/servlets-file-uploading.htm

String filePath = getServletContext().getInitParameter("file-upload");

web.xml 文件也有

<servlet>
    <servlet-name>UploadServlet</servlet-name>
        <servlet-class>com.gwt.dlogpackage.client.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>UploadServlet</servlet-name>
    <url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>

Q2。现在我不知道为什么这不起作用。它在 UploadServlet 类中没有任何文件项。当我使用相同的 HTML 代码时,它可以工作,但这个 java 代码不能。有人能告诉我为什么吗?

Q3。在 web.xml 中也需要这样的东西吗?

<context-param> 
    <description>Location to store uploaded file</description> 
    <param-name>file-upload</param-name> 
    <param-value> C:\users\.. </param-value> 
</context-param>
4

3 回答 3

0

第一季度

我确实认为

fp.setAction(GWT.getModuleBaseURL()+"UploadServlet");

更好

第二季度

根据我的经验,我遇到的文件未上传的大多数问题是FormPanel需要在整个上传期间附加到页面。

如果您FormPanel在上传之后/期间删除,请尝试将其保留,直到您收到回调。所以像:

FormPanel panel = new FormPanel();
...
panel.addSubmitCompleteHandler(new SubmitCompleteHandler(){

    public void onSubmitComplete(SubmitCompleteEvent event){
        // Keep FormPanel visible until this method is called
    }

}):

第三季度

我假设你需要你的 web.xml 就像你的服务器是如何工作的那样,但是你可以很容易地拥有另一个没有那个<param-value>...</param-value>标签的实现。

于 2013-10-27T22:14:49.347 回答
0

查看模块 gwt.xml 的外观:

<module rename-to='module_name'>
...
</module>

方法 GWT.getModuleBaseURL() 返回字符串:“module_name”。因此,如果您键入:

fp.setAction(GWT.getModuleBaseURL()+"UploadServlet");

结果是:

fp.setAction("module_name/UploadServlet");

所以 web.xml 应该看起来像:

<servlet>
    <servlet-name>UploadServlet</servlet-name>
        <servlet-class>com.gwt.dlogpackage.client.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>UploadServlet</servlet-name>
    <url-pattern>module_name/UploadServlet</url-pattern>
</servlet-mapping>
于 2013-10-27T20:36:42.590 回答
0

如果您的上传文件 servlet 声明如下:

<servlet>
    <servlet-name>UploadServlet</servlet-name>
    <servlet-class>com.gwt.dlogpackage.client.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>UploadServlet</servlet-name>
    <url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>

然后你应该编码:

fp.setAction("UploadServlet");

我的意思是,在动作名称的开头没有正斜杠分隔符。这是因为你已经踩到了你的上下文的根,所以你必须在不引用根的情况下调用你的表单动作(对不起,如果我表达得不好)。

我可以添加一个建议:如果我是你,我会将 fileUploader 命名为与表单操作名称相同的名称。

最后,正如 enyrbo 所说,将 FormPanel 附加到页面(我假设您已经编写了 onSubmit 和 onSubmitComplete 处理程序)。

于 2013-10-28T14:41:46.800 回答