Struts2.0上传练习

终于上次的项目告一段落了,可以重新学习Struts了,于是终于吃过饭就开始捣鼓了,因为早就从网上把MAX先生的教程下来了,就看了看教程,着手进行吧

代码都是Max先生的,但是中间却出现了不少的错误,

主要文件有:FileUpload.jsp上传页面

xml 代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>  
  2. <%@ taglib prefix="s" uri="/struts-tags"%>  
  3. <!---->>    
  4. <html xmlns ="http://www.w3.org/1999/xhtml">    
  5. <head>    
  6.     <title> Struts 2 File Upload title>    
  7. head >    
  8. <body >    
  9.     <s:form action ="fileUpload" method ="POST" enctype ="multipart/form-data" >    
  10.         <s:file name ="myFile" label ="Image File"/>    
  11.         <s:textfield name ="caption" label ="Caption"/>           
  12.         <s:submit/>    
  13.     s:form >    
  14. body >    
  15. html >   

action处理页面FileUploadAction.java

java 代码
  1. package tutorial;   
  2.   
  3. import java.io.BufferedInputStream;   
  4. import java.io.BufferedOutputStream;   
  5. import java.io.File;   
  6. import java.io.FileInputStream;   
  7. import java.io.FileOutputStream;   
  8. import java.io.InputStream;   
  9. import java.io.OutputStream;   
  10. import java.util.Date;   
  11.   
  12. import org.apache.struts2.ServletActionContext;   
  13.   
  14. import com.opensymphony.xwork2.ActionSupport;   
  15.   
  16. public class FileUploadAction extends ActionSupport {   
  17.     private static final long serialVersionUID = 572146812454l;   
  18.     private static final int BUFFER_SIZE = 16 * 1024;   
  19.   
  20.     private File myFile;   
  21.     private String contentType;   
  22.     private String fileName;   
  23.     private String imageFileName;   
  24.     private String caption;   
  25.   
  26.     public void setMyFileContentType(String contentType) {   
  27.         this.contentType = contentType;   
  28.     }   
  29.   
  30.     public void setMyFileFileName(String fileName) {   
  31.         this.fileName = fileName;   
  32.     }   
  33.   
  34.     public void setMyFile(File myFile) {   
  35.         this.myFile = myFile;   
  36.     }   
  37.   
  38.     public String getImageFileName() {   
  39.         return imageFileName;   
  40.     }   
  41.   
  42.     public String getCaption() {   
  43.         return caption;   
  44.     }   
  45.   
  46.     public void setCaption(String caption) {   
  47.         this.caption = caption;   
  48.     }   
  49.   
  50.     private static void copy(File src, File dst) {   
  51.         try {   
  52.             InputStream in = null;   
  53.             OutputStream out = null;   
  54.             try {   
  55.                 in = new BufferedInputStream(new FileInputStream(src),   
  56.                         BUFFER_SIZE);   
  57.                 out = new BufferedOutputStream(new FileOutputStream(dst),   
  58.                         BUFFER_SIZE);   
  59.                 byte[] buffer = new byte[BUFFER_SIZE];   
  60.                 while (in.read(buffer) > 0) {   
  61.                     out.write(buffer);   
  62.                 }   
  63.             } finally {   
  64.                 if (null != in) {   
  65.                     in.close();   
  66.                 }   
  67.                 if (null != out) {   
  68.                     out.close();   
  69.                 }   
  70.             }   
  71.         } catch (Exception e) {   
  72.             e.printStackTrace();   
  73.         }   
  74.     }   
  75.   
  76.     private static String getExtention(String fileName) {   
  77.         int pos = fileName.lastIndexOf(".");   
  78.         return fileName.substring(pos);   
  79.     }   
  80.   
  81.     @Override  
  82.     public String execute() {   
  83.         imageFileName = new Date().getTime() + getExtention(fileName);   
  84.         File imageFile = new File(ServletActionContext.getServletContext()   
  85.                 .getRealPath("/UploadImages")   
  86.                 + "/" + imageFileName);   
  87.         copy(myFile, imageFile);   
  88.         return SUCCESS;   
  89.     }   
  90.   
  91. }  

 

ShowUpload.jsp上传成功显示页面

xml 代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>  
  2. <%@ taglib prefix="s" uri="/struts-tags"%>  
  3. <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >    
  4. <html xmlns ="http://www.w3.org/1999/xhtml" >    
  5. <head>    
  6.     <title> Struts 2 File Upload </title >    
  7. </head>    
  8. <body>    
  9.     <div style="padding: 3px; border: solid 1px #cccccc; text-align: center" >    
  10.         <img src='UploadImages/<s:property value ="imageFileName" />'/>  
  11.         <br/>    
  12.         <s:property value ="caption"/>    
  13.     </div>    
  14. </body>    
  15. </html>  

 

struts.xml配置文件

xml 代码
  1. <?xml version="1.0" encoding="UTF-8" ?>    
  2.   
  3. <!DOCTYPE struts PUBLIC   
  4.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   
  5.     "http://struts.apache.org/dtds/struts-2.0.dtd" >    
  6.   
  7. <struts >    
  8.     <package name ="fileUploadDemo" extends ="struts-default" >    
  9.         <action name ="fileUpload" class ="tutorial.FileUploadAction" >    
  10.             <interceptor-ref name ="fileUploadStack" />    
  11.             <result name ="success" >/ShowUpload.jsp</result >    
  12.         </action>    
  13.     </package >    
  14. </struts >   

web.xml

xml 代码
  1. <?xml version="1.0" encoding="UTF-8" ?>    
  2. <web-app id ="WebApp_9" version ="2.4"    
  3.     xmlns ="http://java.sun.com/xml/ns/j2ee"    
  4.     xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"    
  5.     xsi:schemaLocation ="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >    
  6.   
  7.     <display-name > Struts 2 Fileupload </display-name >    
  8.   
  9.     <filter >    
  10.         <filter-name > struts-cleanup </filter-name >    
  11.         <filter-class >    
  12.             org.apache.struts2.dispatcher.ActionContextCleanUp   
  13.         </filter-class >    
  14.     </filter >    
  15.        
  16.     <filter >    
  17.         <filter-name > struts2 </filter-name >    
  18.         <filter-class >    
  19.             org.apache.struts2.dispatcher.FilterDispatcher   
  20.         </filter-class >    
  21.     </filter >    
  22.        
  23.     <filter-mapping >    
  24.         <filter-name > struts-cleanup </filter-name >    
  25.         <url-pattern > /* </url-pattern >    
  26.     </filter-mapping >    
  27.   
  28.     <filter-mapping >    
  29.         <filter-name > struts2 </filter-name >    
  30.         <url-pattern > /* </url-pattern >    
  31.     </filter-mapping >    
  32.   
  33.     <welcome-file-list >    
  34.         <welcome-file > index.html </welcome-file >    
  35.     </welcome-file-list >    
  36.   
  37. </web-app >   

 

在进行调试的时候发现我的运气是相当的好 啊,因为别人提出的错误我都遇到了,比如如下:

java 代码
  1. Servlet.service() for servlet SimpleUploader threw exception    
  2. java.lang.RuntimeException: Unable to load bean org.apache.struts2.dispatcher.multipart.MultiPartRequest (jakarta) - [unknown location]    

我在网上搜了下,发现有人这样解决的:

xml 代码
  1. 只要不让struts2拦截处理上传事件,就应该没问题了。   
  2. 修改web.xml,把原来的   
  3. <filter-mapping>  
  4.   <filter-name>struts</filter-name>  
  5.   <url-pattern>/*</url-pattern>  
  6.  </filter-mapping>  
  7. 改为   
  8. <filter-mapping>  
  9.   <filter-name>struts</filter-name>  
  10.   <url-pattern>*.action</url-pattern>  
  11.  </filter-mapping>  
  12. 而上传页面调用时直接用文件名调用(如upload.jsp)。struts2只处理 *.action 的请求。   

但是我用了一下出现了更麻烦的错误,于是又找了下是因为我的包所用版本太低的原因于是到Apache上下载了最新的包删除旧的导入新的刷新,打开tomcat服务,输入地址,又出现了一个错误

java 代码
  1. javax.servlet.ServletException: String index out of range: -1    
  2. org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:518)    
  3. org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421)    
  4. org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)    

因为我的代码是从max先生的文章直接复制粘贴的,开始有很多多余的空格,我就一个个删除的,这时我想是不是空格的问题,于是又检查一遍代码,把空格全部删除,ok..

看来代码是要自己敲的,还是有好处的。】

这里记下,提醒自己,呵呵

高手就不用看了,因为我们是菜鸟,呵呵

你可能感兴趣的:(java,apache,xml,jsp,struts)