当我使用 Apache Tomcat 7.0.34 使用“org.apache.tomcat.util.fileupload”上传文件时,没有显示任何错误并且一切正常。但是当我使用 Apache Tomcat 7.0.40 时,“parseRequest(request)”这一行出现了一个错误。我不能将此视为错误,因为如果我使用 RequestContext 那么错误就会出现,但我不知道如何使用 RequestContext 接口(interface)。请帮助我如何使用 RequestContext,因为我需要将实例传递给“parseRequest(RequestContext ctx)”方法。
public void service(HttpServletRequest request,HttpServletResponse response)
{
response.setContentType("text/html;charset=UTF-8");
String status=null;
List<FileItem> items=null;
try
{
if(ServletFileUpload.isMultipartContent(request))
{
items=new ServletFileUpload(new
DiskFileItemFactory()).parseRequest(request);
for(FileItem item:items)
{
if(item.getFieldName().equals("status"))
status=item.getString();
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
我需要将 RequestContext 实例放入 parseRequest(RequestContext ctx) 但不知道如何使用 RequestContext。
最佳答案
这不是在 Servlet 3.0 中处理文件上传的正确方法。您应该改为使用 @MultipartConfig
在 servlet 上注释并使用 HttpServletRequest#getPart()
获取上传文件的方法,Servlet 3.0引入。
org.apache.tomcat.util.fileupload
包恰好包含那些正在执行此新 Servlet 3.0 功能的所有“幕后”工作的类。你不应该直接使用它们,就像在 Sun/Oracle JVM 上使用 Java SE 时你不应该使用 sun.*
类一样,你不应该使用 com.mysql.*
在 MySQL 数据库上使用 JDBC 时的类。您似乎对使用 Apache Commons FileUpload 的针对 Servlet 2.5 或更早版本的示例感到困惑这恰好使用相同的类名。
使用特定于 Tomcat 的类会将您的 Web 应用程序与特定的 Tomcat 版本紧密耦合,并使您的 Web 应用程序不可移植到其他 Servlet 3.0 兼容容器,甚至是您遇到的不同 Tomcat 版本。在这种特殊情况下,您应该坚持使用 javax.servlet
包中的标准类。
正确的方法显示在这个答案的第二部分:How to upload files to server using JSP/Servlet?
总而言之,这个启动示例应该可以帮助您入门:
<form action="upload" method="post" enctype="multipart/form-data">
<input type="text" name="status" />
<input type="file" name="uploadedFile" />
<input type="submit" />
</form>
与
@WebServlet("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String status = request.getParameter("status"); // Retrieves <input type="text" name="status">
Part uploadedFile = request.getPart("uploadedFile"); // Retrieves <input type="file" name="uploadedFile">
InputStream content = uploadedFile.getInputStream();
// ... (do your job here)
}
}
就这些。
关于java - 使用 Apache Tomcat 7.0.40.0 时 servlet 中的文件上传错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16768086/