【问题标题】:Uploading Files and Getting Parameters in Java WebServlet [duplicate]在 Java WebServlet 中上传文件和获取参数 [重复]
【发布时间】:2017-10-31 02:47:40
【问题描述】:

当我尝试在我的 servlet 中调用 request.getParameter() 和 request.getPart() 时,一切都返回为 null。

我正在使用 Java JDK 8 和 Apache Tomcat 8.5.15。我有一个 JSP 页面,其表单提交文本输入数据和一个单一文件类型输入。我正在使用多部分/表单数据加密发布数据。

JSP 片段

<form id="blogForm" class="form-horizontal" method="POST" action="/InTheMidst/CreateNewBlog" enctype="multipart/form-data">
  <div class="form-group">
    <label class="control-label" for="titleInput">Title:</label>
    <input type="text" name="titleInput" class="form-control" maxlength="255" placeholder="Enter title..." required>
  </div>
  <div class="form-group">
    <label class="control-label" for="dateInput">Date:</label>
    <input type="date" name="dateInput" class="form-control" maxlength="8" placeholder="Select date..." required>
  </div>
  <div class="form-group">
    <label class="control-label" for="authorInput">Author:</label>
    <input type="text" name="authorInput" class="form-control" maxlength="150" placeholder="Enter author..." required>
  </div>
  <div class="form-group">
    <label class="control-label" for="contentInput">Content:</label>
    <textarea name="contentInput" class="form-control" maxlength="65000" required></textarea>
  </div>
  <div class="form-group">
    <label class="control-label" for="fileInput">Image:</label><br>
    <input type="file" name="fileInput" class="form-control">
  </div>
  <div class="form-group">
    <button type="button" class="btn btn-success" onclick="document.getElementById('blogForm').submit();"><span class="glyphicon glyphicon-floppy-disk"></span> Create</button>
    &nbsp;
    <a href="../dashboard.jsp" class="btn btn-danger"><span class="glyphicon glyphicon-remove"></span> Cancel</a>
  </div>
</form>

Web Servlet

@MultipartConfig(location = "/InTheMidst/upload/image")
public class CreateNewBlog extends HttpServlet {

/**
 * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
 * methods.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");

    // Create an object to store input
    Blog blog = new Blog();

    // Store request
    blog.setBlogId(Blog.createNewId());
    blog.setTitle(request.getParameter("titleInput"));
blog.setDate(GeneralView.dateFromViewToData(request.getParameter("dateInput")));
    blog.setAuthor(request.getParameter("authorInput"));
    blog.setContent(request.getParameter("contentInput"));

    // Get the image upload
    Part inputFile = request.getPart("fileInput");
    String filename = Paths.get(inputFile.getSubmittedFileName()).getFileName().toString();
    String extension = filename.split(".")[1];

    blog.setImagePath("/InTheMidst/upload/image/" + blog.getBlogId() + extension);

    // Write the file
    inputFile.write(blog.getBlogId() + "." + extension);

    // Create a controller to interact with the database
    BlogController controller = new BlogController();

    // Persist account
    boolean success = controller.insertBlog(blog);


}

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
 * Handles the HTTP <code>GET</code> method.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

/**
 * Handles the HTTP <code>POST</code> method.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

/**
 * Returns a short description of the servlet.
 *
 * @return a String containing servlet description
 */
@Override
public String getServletInfo() {
    return "Short description";
}// </editor-fold>

}

【问题讨论】:

  • 您是否尝试过使用 System.out.println 在控制台上打印所有请求参数?,
  • 您是否在表单上使用了合适的编码类型? &lt;FORM action="http://server.com/cgi/handle" enctype="multipart/form-data" method="post"&gt;

标签: java forms jsp servlets file-io


【解决方案1】:

首先你会检查 servlet 版本,如果你使用的是 servlet 3.0 版,那么你可以通过 Multipart 请求获取请求参数。

如果您使用的是低版本的servlet,那么您无法通过request.getParameter获取post请求参数,您必须使用commons-file-upload等第三方API jar文件。

您可以通过以下方法检查服务器版本-

  1. 以编程方式使用ServletContext#getMajorVersion() 和#getMinorVersion()。
  2. 通过web.xml 中的web-app 标记。

  3. 如果您使用 eclipse IDE,请在 Project Facets 属性选项卡上检查 Dynamic Web Module

【讨论】:

    猜你喜欢
    • 2011-05-20
    • 2021-05-13
    • 1970-01-01
    • 2015-06-28
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 2017-01-28
    相关资源
    最近更新 更多