佛安藩 2019-08-19 16:29 采纳率: 0%
浏览 941

struts2上传文件时,action中的file为空,怎么解决?

我使用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

  • 写回答

3条回答 默认 最新

  • 咖啡加冰66 2019-08-19 16:47
    关注

    相应的jar commons-fileupload commons-io 两个jar是否引入

    评论

报告相同问题?

悬赏问题

  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services