-4

我想使用form带有 POST 方法的 HTML 和Servlet. 收到的数据将被存储到数据库中。我搜索了,但只找到了仅上传文件或字段的解决方案。

例子 :

  • 文件:图片
  • 字段:图像 ID
  • 字段:图像名称
  • ETC

如何创建formServlet实现它?

4

2 回答 2

1

您可以创建一个 formdata 对象并填充与此处显示的相同的内容, 然后作为请求参数检索,例如String message = request.getParameter("message");

于 2013-06-04T07:08:28.800 回答
0

基本上,您需要一个multipart/form-dataHTML 表单来将您的数据发布到 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()根据您想要获取它的方式以及多少数据等来获取其内容。

于 2013-06-04T06:09:25.350 回答