Java struts2可以像servlet3一样处理文件上传吗?

Java struts2可以像servlet3一样处理文件上传吗?,java,struts2,servlet-3.0,Java,Struts2,Servlet 3.0,html: 通过这种方式,我可以成功上传文件,但我想用struts2同样的方式处理它,代码块如下: @WebServlet("/upload") @MultipartConfig public class UploadFileServlet extends HttpServlet { private static final long serialVersionUID = 1L; public UploadFileServlet() { super(); } protected vo

html:

通过这种方式,我可以成功上传文件,但我想用struts2同样的方式处理它,代码块如下:

@WebServlet("/upload")
@MultipartConfig
public class UploadFileServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

public UploadFileServlet() {
    super();
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Part filePart = request.getPart("upload");
    String header = filePart.getHeader("Content-Disposition");
    String filename = header.substring(header.indexOf("filename=\"") + 10, header.lastIndexOf("\""));

    System.out.println(filename);
    InputStream in = filePart.getInputStream();

    OutputStream out = new FileOutputStream("D:/temp.png");
    byte[] buffer = new byte[1024];
    int length = -1;
    while ((length = in.read(buffer)) != -1) {
        out.write(buffer, 0, length);
    }
    in.close();
    out.close();

    response.getWriter().append("Served at: ").append(request.getContextPath());

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request, response);
}
}

但它不工作,我无法从Part中获得任何信息,它抛出
NullPointException
,我应该怎么做才能更改我的代码,否则它在strut2中无法工作?使用相同的方法将文件连接到servlet3?

如果你想自己处理文件上传,你需要排除
fileUpload
拦截器。只有一个问题:为什么?你可以使用@AleksandrM提到的struts。我本人更喜欢使用struts,struts upload interceptor有一些有用的功能,例如一些验证文件验证可以轻松配置。另一方面,上传操作与其他操作相同,struts框架为您处理上传操作的逻辑非常合理。例如,您可能希望拦截器在上载操作之前或之后运行,就像它们在其他操作之前运行一样。或者您可能需要在上载操作期间访问值堆栈或您的消息资源。我已成功解决此问题,谢谢!此问题似乎与帮助中心定义的范围内的编程无关。如果你想自己处理文件上传,你需要排除
fileUpload
interceptor。只有一个问题:为什么?你可以使用@AleksandrM提到的struts来完成。我本人更喜欢使用struts,struts upload interceptor有一些有用的功能,例如一些验证文件验证可以轻松配置。另一方面,上传操作与其他操作相同,struts框架为您处理上传操作的逻辑非常合理。例如,您可能希望拦截器在上载操作之前或之后运行,就像它们在其他操作之前运行一样。或者您可能需要在上载操作期间访问值堆栈或您的消息资源。我已成功解决此问题,谢谢!此问题似乎与帮助中心定义的范围内的编程无关。
@WebServlet("/upload")
@MultipartConfig
public class UploadFileServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

public UploadFileServlet() {
    super();
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Part filePart = request.getPart("upload");
    String header = filePart.getHeader("Content-Disposition");
    String filename = header.substring(header.indexOf("filename=\"") + 10, header.lastIndexOf("\""));

    System.out.println(filename);
    InputStream in = filePart.getInputStream();

    OutputStream out = new FileOutputStream("D:/temp.png");
    byte[] buffer = new byte[1024];
    int length = -1;
    while ((length = in.read(buffer)) != -1) {
        out.write(buffer, 0, length);
    }
    in.close();
    out.close();

    response.getWriter().append("Served at: ").append(request.getContextPath());

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request, response);
}
}
public void newTask() throws Exception {
    Part filePart = request.getPart("file");
    String header = filePart.getHeader("Content-Disposition");
    String _filename = header.substring(header.indexOf("filename=\"") + 10, header.lastIndexOf("\""));
    InputStream in = filePart.getInputStream();
    OutputStream out = new FileOutputStream("D://temp.png");

    StreamUtils.copy(in, out);

}