我遇到了这样的问题
我已经HttpServlet
用 apache FileUpload
lib 用 Java 实现了。
当我将此代码作为简单的 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.xml
Grails 中添加了这样的映射:
<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>