3

我遇到了这样的问题

我已经HttpServlet用 apache FileUploadlib 用 Ja​​va 实现了。

当我将此代码作为简单的 Java Web 项目进行测试并将其部署在 Tomcat 中时,它可以工作。但是当我在 Grails 项目中将它部署为 servlet 时,List<FileItem> items它总是空的。

我很确定这是因为 Grails 中的某些内容在我执行之前正在消耗请求正文Servlet,但我不知道如何强制 Grails 在我之前不使用请求。

我需要将纯 Java servlet 添加到 grails 项目,因为我需要将一些已经编写的 Java 代码与 Grails 集成。

这是servlet代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        List<FileItem> items = new ServletFileUpload(
                new DiskFileItemFactory()).parseRequest(request);
        for (FileItem item : items) {
            if (item.isFormField()) {
                String fieldname = item.getFieldName();
                String fieldvalue = item.getString();
                System.out.println(fieldname + "=" + fieldvalue);
            } else {
                String fieldname = item.getFieldName();
                String filename = FilenameUtils.getName(item.getName());
                InputStream filecontent = item.getInputStream();
                String value = IOUtils.toString(filecontent);
                System.out.println(fieldname + "=" + value);
            }
        }
    } catch (FileUploadException e) {
        throw new ServletException("Cannot parse multipart request.", e);
    }
}

它只是读取请求正文并打印到 sysout。

现在我有表格:

<html>
 <body>
   <form action="http://localhost:8080/Tst/photoServlet" method="post" enctype="multipart/form-data">
     <input type="text" name="fieldId" value="field_photo"/>
     <input type="file" name="Afile" />
     <input type="submit" />
   </form>
 </body>
</html>

我还在web.xmlGrails 中添加了这样的映射:

<servlet>
    <servlet-name>photoServlet</servlet-name>
    <servlet-class>com.tst.PhotoUploadServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>photoServlet</servlet-name>
    <url-pattern>/ws/photoUpload</url-pattern>
</servlet-mapping>
4

0 回答 0