我使用struts2上传文件时,Action类中的File对象获取不了jsp中上传的文件,调试过后发现file为空。
以下是我写的代码
fileupload.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>文件上传</title>
</head>
<body>
<form action="fileupload.action" method="post" enctype="multipart/form-data">
文件:<input type="file" name="file"/>
<input type="submit" value="上传"/>
</form>
</body>
</html>
struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 设计文件上传的临时路径 -->
<constant name="struts.multipart.saveDir" value="c:\" />
<!-- 设置上传文件总大小 -->
<!-- <constant name="struts.multipart.maxSize" value="100001"/> -->
<package name="default" namespace="/" extends="struts-default">
<action name="login" class="com.fan.demo.action.UploadAction">
<result>/fileupload.jsp</result>
</action>
<action name="fileupload" class="com.fan.demo.action.UploadAction" method="upload">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
<interceptor-ref name="fileUpload">
<!-- 设置文件大小 -->
<!-- <param name="maximumSize">100000</param> -->
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
</action>
</package>
</struts>
UploadAction.java
package com.fan.demo.action;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
public class UploadAction {
private File file;//文件名,这个File对象为空,怎么解决
private String fileFileName;//属性
private String fileContentType;//类型
public String upload() {
//获取文件上传临时目录
String path=ServletActionContext.getServletContext().getRealPath("/upload");
try {
FileUtils.copyFile(file, new File(path,fileFileName));
return Action.SUCCESS;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return Action.ERROR;
}
public String execute(){
return "success";
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
}
我在上传一个1k的文件的时候报错了,以下是异常信息
16:19:09.517 [http-8080-1] ERROR org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler - Exception occurred during processing request: null
java.lang.NullPointerException
at java.io.File.<init>(File.java:262) ~[?:1.6.0_13]
at com.fan.demo.action.UploadAction.upload(UploadAction.java:17) ~[UploadAction.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.6.0_13]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) ~[?:1.6.0_13]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[?:1.6.0_13]
at java.lang.reflect.Method.invoke(Method.java:597) ~[?:1.6.0_13]
at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:897) ~[ognl-3.0.21.jar:?]
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1299) ~[ognl-3.0.21.jar:?]
at ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68) ~[ognl-3.0.21.jar:?]
at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethodWithDebugInfo(XWorkMethodAccessor.java:117) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:108) ~[xwork-core-2.3.37.jar:2.3.37]
at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1375) ~[ognl-3.0.21.jar:?]
at ognl.ASTMethod.getValueBody(ASTMethod.java:91) ~[ognl-3.0.21.jar:?]
at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) ~[ognl-3.0.21.jar:?]
at ognl.SimpleNode.getValue(SimpleNode.java:258) ~[ognl-3.0.21.jar:?]
at ognl.Ognl.getValue(Ognl.java:470) ~[ognl-3.0.21.jar:?]
at ognl.Ognl.getValue(Ognl.java:434) ~[ognl-3.0.21.jar:?]
at com.opensymphony.xwork2.ognl.OgnlUtil$3.execute(OgnlUtil.java:398) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecuteMethod(OgnlUtil.java:450) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.ognl.OgnlUtil.callMethod(OgnlUtil.java:396) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:430) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:290) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:251) ~[xwork-core-2.3.37.jar:2.3.37]
at org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41) ~[struts2-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256) ~[struts2-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:168) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265) ~[xwork-core-2.3.37.jar:2.3.37]
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:76) ~[struts2-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73) ~[struts2-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:125) ~[struts2-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91) ~[struts2-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:326) ~[struts2-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:140) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) ~[struts2-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189) ~[xwork-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:326) ~[struts2-core-2.3.37.jar:2.3.37]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) ~[xwork-core-2.3.37.jar:2.3.37]
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) ~[struts2-core-2.3.37.jar:2.3.37]
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:575) [struts2-core-2.3.37.jar:2.3.37]
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81) [struts2-core-2.3.37.jar:2.3.37]
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) [struts2-core-2.3.37.jar:2.3.37]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) [catalina.jar:?]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:?]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) [catalina.jar:?]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) [catalina.jar:?]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) [catalina.jar:?]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [catalina.jar:?]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [catalina.jar:?]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) [catalina.jar:?]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) [tomcat-coyote.jar:?]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) [tomcat-coyote.jar:?]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) [tomcat-coyote.jar:?]
at java.lang.Thread.run(Thread.java:619) [?:1.6.0_13]
已经引入的jar包:
项目:
debug结果:file,fileFileName,fileContentType均为null