我想使用form
带有 POST 方法的 HTML 和Servlet
. 收到的数据将被存储到数据库中。我搜索了,但只找到了仅上传文件或字段的解决方案。
例子 :
- 文件:图片
- 字段:图像 ID
- 字段:图像名称
- ETC
如何创建form
并Servlet
实现它?
您可以创建一个 formdata 对象并填充与此处显示的相同的内容,
然后作为请求参数检索,例如String message = request.getParameter("message");
基本上,您需要一个multipart/form-data
HTML 表单来将您的数据发布到 servlet 示例:
<form action="file-upload" method="post" enctype="multipart/form-data" >
<table>
<tr>
<td><input type="text" name="field1" /></td>
</tr>
<tr>
<td><input type="file" name="file1" /></td>
</tr>
<tr>
<td><input type="submit" value="Send" /></td>
</tr>
</table>
</form>
请注意,您必须更改action
属性才能发布到正确的 URL,请注意您的应用程序上下文!
现在是 servlet 部分,有很多方法可以做到这一点,但一种简单的方法是使用Apache Commons FileUpload库。您只需要将 JAR 添加到您的项目中。
这是一个示例,它将获取您的信息并以 HTML 格式打印内容:
@WebServlet(urlPatterns = { "/file-upload" } )
public class FileUpload extends HttpServlet
{
@Override
public void doPost(HttpServletRequest p_oRequest, HttpServletResponse p_oResponse) throws IOException
{
PrintWriter out = p_oResponse.getWriter();
out.println("<html><body>");
List fileItems = null;
// Parsing field values
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(10000000);
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// maximum file size to be uploaded.
upload.setSizeMax(10000000);
try
{
// Parse the request to get file items.
fileItems = upload.parseRequest(p_oRequest);
// Process the uploaded file items
Iterator i = fileItems.iterator();
out.println("<table><tr><td>Type</td><td>Name</td><td>Value</td>");
while(i.hasNext())
{
FileItem fi = (FileItem)i.next();
out.println("<tr>");
if(fi.isFormField())
{
out.println("<td>Field</td>");
out.println("<td>" + fi.getFieldName() + "</td>");
out.println("<td>" + fi.getString() + "</td>");
}
else
{
out.println("<td>File</td>");
out.println("<td>" + fi.getFieldName() + "</td>");
out.println("<td>" + fi.getName() + " / " + fi.getContentType() + " / " + fi.getSize() + "</td>");
}
out.println("</tr>");
}
out.println("</table>");
}
catch(Exception e)
{
e.printStackTrace();
}
out.println("</body></html>");
out.flush();
}
}
注意FileItem fi
是包含字段信息的对象。对于文件,您可以使用fi.getInputStream()
或fi.getString()
根据您想要获取它的方式以及多少数据等来获取其内容。