Struts 2 中的 NullPointErexception 上传文件

NullPointException upload file in Struts 2

我正在尝试使用表单上传文件,并且正在按照在 Internet 上找到的教程进行操作。使用此代码,我收到 NullPointerException

这是index.jsp:

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>File Upload</title>
    </head>
    <body>
    <form action="upload" method="post" enctype="multipart/form-data">
     <label for="myFile">Upload your file</label>
    <input type="file" name="myFile" />
    <input type="submit" value="Upload"/>
   </form>
    </body>

这是success.jsp(上传成功的情况下):

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>File Upload Success</title>
</head>
<body>
  You have successfully uploaded <s:property value="myFileFileName"/>
</body>
</html>

行动class:

    import java.io.File;
    import org.apache.commons.io.FileUtils;
    import java.io.IOException; 

    import com.opensymphony.xwork2.ActionSupport;

    public class uploadFile extends ActionSupport{
    private File myFile;
    private String myFileContentType;
    private String myFileFileName;
    private String destPath;

      public String execute()
   {
                    /* Copy file to a safe location */
               destPath = "C:/apache-tomcat-6.0.33/work/";

      try{
         System.out.println("Src File name: " + myFile);
         System.out.println("Dst File name: " + myFileFileName);

         File destFile  = new File(destPath, myFileFileName);
         FileUtils.copyFile(myFile, destFile);

      }catch(IOException e){
         e.printStackTrace();
         return ERROR;
      }

      return SUCCESS;
   }
        public File getMyFile() {
        return myFile;
    } 
        public void setMyFile(File myFile) {
         this.myFile = myFile;
   }
   public String getMyFileContentType() {
      return myFileContentType;
   }
   public void setMyFileContentType(String myFileContentType) {
      this.myFileContentType = myFileContentType;
   }
   public String getMyFileFileName() {
      return myFileFileName;
   }
   public void setMyFileFileName(String myFileFileName) {
      this.myFileFileName = myFileFileName;
   }
}

Struts.xmf配置文件:

  <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
   <constant name="struts.devMode" value="true" />
   <constant name="struts.multipart.maxSize" value="1000000" />

   <package name="helloworld" extends="struts-default">
     <action name="upload" class="com.tutorialspoint.struts2.uploadFile">
       <interceptor-ref name="basicStack">
       </interceptor-ref>
       <interceptor-ref name="fileUpload">
           <param name="allowedTypes">image/jpeg,image/gif</param>
       </interceptor-ref>
       <result name="success">/success.jsp</result>
       <result name="error">/error.jsp</result>
   </action>
   </package>
</struts>

注意:error.jsp等同于success.jsp,只是在正文中打印了不同的信息。

FileUpload 拦截器必须 运行 在 BasicStack 拦截器堆栈之前。

改变这个

<action name="upload" class="com.tutorialspoint.struts2.uploadFile">
   <interceptor-ref name="basicStack" />
   <interceptor-ref name="fileUpload">
       <param name="allowedTypes">image/jpeg,image/gif</param>
    </interceptor-ref>

到这个

<action name="upload" class="com.tutorialspoint.struts2.uploadFile">
    <interceptor-ref name="fileUpload">
        <param name="allowedTypes">image/jpeg,image/gif</param>
    </interceptor-ref>
    <interceptor-ref name="basicStack" />