Struts2中上传文件报错

来源:互联网 发布:ubuntu安装老gcc 编辑:程序博客网 时间:2024/06/06 15:35

今天学习Struts2框架上传功能时,出了个小错误,获取不到用户的上传文件的文件名的值,而且页面也报了个空指针异常。

异常报告信息如下:



控制台界面如下:


uploadFile代码如下:

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


   public String execute()
   {
      /* 复制文件的路径 */
      destPath = "F:/test";
      try{
      System.out.println("上传文件的文件名: " + myFile);
      System.out.println("复制文件的路径中的文件名: " + 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.xml代码如下:

<package name="package"  extends="struts-default">
<action name="upload" class="com.students2.action.uploadFile" >
<interceptor-ref name="basicStack"  />
<interceptor-ref name="fileUpload" >
      <param name="allowedExtensions">  
    png,bmp,jpg,doc,xls,txt  
</param>  
      </interceptor-ref>
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>



jsp代码如下:

<form action="upload" method="post" enctype="multipart/form-data">
      <label for="myFile">上传文件:</label>
      <input type="file" name="myFile" />
      <input type="submit" value="确定"/>
   </form>


找了好久的错误才发现是Struts.xml中的拦截器出了问题,如果basicStack拦截器在fileUpload之前的话就会导致出现空指针异常。

解决方法:

把basicStack拦截器放在fileUpload之后


struts.xml代码如下:

<package name="package"  extends="struts-default">
<action name="upload" class="com.students2.action.uploadFile" >
<!-- 文件上传拦截器要在核心拦截器之前,不然会空值 -->
<interceptor-ref name="fileUpload" >
      <param name="allowedExtensions">  
    png,bmp,jpg,doc,xls,txt  
</param>  
      </interceptor-ref>
      <interceptor-ref name="basicStack"  />
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>



然后运行程序:



文件也出现在了对应的位置:


程序完美运行!


原创粉丝点击