HttpServletRequest#getParts()返回一个空列表

我有以下HTML表单:

<form enctype="multipart/form-data" method="post" action="/myservlet">

<input type="file" name="mptest">

<br />

<input type="submit" value="upload">

</form>

我有以下基于此答案创建的servlet :

package com.functions;

import java.io.*;

// import java.sql.Connection;

// import java.sql.PreparedStatement;

// import java.sql.ResultSet;

// import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.Part;

// import com.functions.utility.DBConnector;

public class restore extends HttpServlet {

private static final long serialVersionUID = 8097085789553030042L;

protected void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

System.out.println("--------------------");

System.out.println(" On restore.java ");

System.out.println("--------------------");

try {

fetchDataFromDB(request, response);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

private void fetchDataFromDB(HttpServletRequest request,

HttpServletResponse response) throws InterruptedException,

IllegalStateException, ServletException {

try {

System.out.println("Test 1");

for (Part part : request.getParts()) {

String filename = getFilename(part);

System.out.println("Test 2");

if (filename == null) {

System.out.println("Test 3");

// Process regular form field (input

// type="text|radio|checkbox|etc", select, etc).

String fieldname = part.getName();

System.out.println(fieldname);

String fieldvalue = getValue(part);

System.out.println(fieldvalue);

// ... (do your job here)

} else if (!filename.isEmpty()) {

System.out.println("Test 4");

// Process form file field (input type="file").

String fieldname = part.getName();

System.out.println(fieldname);

filename = filename

.substring(filename.lastIndexOf('/') + 1)

.substring(filename.lastIndexOf('\\') + 1); // MSIE

// fix.

InputStream filecontent = part.getInputStream();

System.out.println(filecontent);

String[] command = new String[] {

"C:/Program Files (x86)/MySQL/MySQL Server "

+ "5.5/bin/mysql",

"--user=root", "--password=root", "dummy", "-e",

"source "+"C:/Users/John/Desktop/LMS/backup.sql" };

Process restore = Runtime.getRuntime().exec(command);

int check = restore.waitFor();

System.out.println(check);

}

}

} catch (IOException ex) {

ex.printStackTrace();

}

}

private static String getFilename(Part part) {

for (String cd : part.getHeader("content-disposition").split(";")) {

if (cd.trim().startsWith("filename")) {

return cd.substring(cd.indexOf('=') + 1).trim()

.replace("\"", "");

}

}

return null;

}

private static String getValue(Part part) throws IOException {

BufferedReader reader = new BufferedReader(new InputStreamReader(

part.getInputStream(), "UTF-8"));

StringBuilder value = new StringBuilder();

char[] buffer = new char[1024];

for (int length = 0; (length = reader.read(buffer)) > 0;) {

value.append(buffer, 0, length);

}

return value.toString();

}

}

但是request.getParts()永远不会进入for循环。这是怎么引起的,我该如何解决?

回答:

如果要使用Servlet 3.0 HttpServletRequest#getParts(),则必须使用来注释Servlet

@MultipartConfig

@WebServlet(urlPatterns={"/myservlet"})

@MultipartConfig

public class Myservlet extends HttpServlet {

// ...

}

以上是 HttpServletRequest#getParts()返回一个空列表 的全部内容, 来源链接: utcz.com/qa/428044.html

回到顶部