0

我試圖上傳一個使用表單的文件,我正在關注在互聯網上找到的教程。通過此代碼,我收到一個NullPointerExceptionNullPointException在Struts 2中上傳文件

這是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> 

Action類:

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 configurat離子的文件:

<?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,只對不同的消息是打印在體內。

+0

後堆棧跟蹤。 –

回答

0

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" />