2012-11-12 91 views
-1

我想使用struts2使用函数copyFile() 上传图片,但是当我使用ServletRequestAware不支持,但引发异常。请帮我解决这个问题。 这里是我的代码使用struts2上传图片

的index.jsp

<%@ taglib prefix="s" uri="/struts-tags"%> 
<html> 
    <body> 
     <s:form action="uploadAction.action" method="post" enctype="multipart/form-data">> 
      <s:textfield label="caption" name="caption"/> 
      <input type="file" name="userImage"/> 
      <s:submit name="submit" label="Submit"/> 
     </s:form> 
    </body> 
</html> 

uploadFile.xml

<?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> 
    <package name="attribute" extends="struts-default"> 
     <action name="uploadAction" class="com.scrolls.fileupload.action.UploadImageAction" method="uploadImage"> 
     <interceptor-ref name="fileUpload"> 
     <param name="maximumSize">2097152</param> 
     <param name="allowedTypes"> 
     image/png,image/gif,image/jpeg,image/pjpeg 
     </param> 
     </interceptor-ref> 
     <interceptor-ref name="defaultStack"></interceptor-ref> 
      <result name="success">ImageUploadSuccess.jsp</result> 
      <result name="input">index.jsp</result> 
    </action> 

    </package> 
</struts> 

UploadImageAction.java

package com.scrolls.fileupload.action; 

import com.opensymphony.xwork2.ActionSupport; 
import java.io.File; 
import javax.servlet.ServletContext; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpSession; 
import org.apache.commons.io.FileUtils; 
import org.apache.struts2.interceptor.ServletRequestAware; 

public class UploadImageAction extends ActionSupport implements ServletRequestAware { 
private File userImage; 
private String userImageContentType; 
private String caption; 

private HttpServletRequest servletRequest; 

    public String uploadImage() { 
     try { 
      HttpSession session = servletRequest.getSession(); 
      ServletContext context = session.getServletContext(); 
      String filePath = context.getRealPath("/"); 
      System.out.println("Server path:" + filePath); 

      File fileToCreate = new File(filePath, this.caption); 

      FileUtils.copyFile(this.userImage, fileToCreate); 

      } 
     catch (Exception e) { 
     System.out.println(e); 
     return INPUT; 
     } 

     return SUCCESS; 
    } 

    public File getUserImage() { 
     return userImage; 
    } 

    public void setUserImage(File userImage) { 
     this.userImage = userImage; 
    } 

    public String getUserImageContentType() { 
     return userImageContentType; 
    } 

    public void setUserImageContentType(String userImageContentType) { 
     this.userImageContentType = userImageContentType; 
    } 

    public String getCaption() { 
     return caption; 
    } 

    public void setCaption(String caption) { 
     this.caption = caption; 
    } 

    @Override 
    public void setServletRequest(HttpServletRequest hsr) { 
     throw new UnsupportedOperationException("Not supported yet."); 
    } 
} 

ImageUploadSuccess.jsp

<%@ taglib prefix="s" uri="/struts-tags"%> 
<html> 
<body> 
<h2>Struts2 Image Upload</h2> 
<b>Image Uploaded To Folder :</b><s:property value="userImage"/> 
<br/> 
<b>Content Type:</b> <s:property value="userImageContentType"/> 
<br/> 
<b>Uploaded Image Name:</b> <s:property value="caption"/> 
<br/> 
<b>Uploaded Image Preview :</b> 
<br/> 
<img src="<s:property value="userImageFileName"/>"/> 

</body> 
</html> 

例外:

所有 defaultStack
SEVERE: Servlet.service() for servlet [default] in context with path [/fileupload] threw exception [java.lang.UnsupportedOperationException: Not supported yet.] with root cause 
java.lang.UnsupportedOperationException: Not supported yet. 
    at com.scrolls.fileupload.action.UploadImageAction.setServletRequest(UploadImageAction.java:81) 
    at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:131) 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
    at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:123) 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
    at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
    at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:268) 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50) 
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:504) 
    at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:722) 
+0

请加异常跟踪。 – sunleo

+0

javax.servlet.ServletException:java.lang.UnsupportedOperationException:不支持呢。 \t org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515) \t org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419) 根源 java.lang.UnsupportedOperationException :尚未支持。 – user1776488

+0

'不支持yet'手段,你probablly使用'NetBeans',你有没有实现这个方法。 – Jaiwo99

回答

0

首先已经包括fileUpload拦截所以你必须要配置的拦截,而不是将它添加两次到你的动作拦截器堆栈。

<action name="uploadAction" class="com.scrolls.fileupload.action.UploadImageAction" method="uploadImage"> 
    <interceptor-ref name="defaultStack"> 
     <param name="fileUpload.maximumSize">2097152</param> 
     <param name="fileUpload.allowedTypes"> 
      image/png,image/gif,image/jpeg,image/pjpeg 
     </param> 
    </interceptor-ref> 
    <result name="success">ImageUploadSuccess.jsp</result> 
    <result name="input">index.jsp</result> 
</action> 

二:在Struts2你不需要从请求读取提交文件。阅读关于文件上传http://struts.apache.org/2.x/docs/file-upload.html

1

... 你是抛出该异常,正是在堆栈跟踪告诉你是你。

您是否不知道Java堆栈跟踪?你无法阅读它提供的信息吗?

它指向代码。