【发布时间】: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>
<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 在控制台上打印所有请求参数?,
-
您是否在表单上使用了合适的编码类型?
<FORM action="http://server.com/cgi/handle" enctype="multipart/form-data" method="post">
标签: java forms jsp servlets file-io