今天学习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>
然后运行程序:
文件也出现在了对应的位置:
程序完美运行!