posts - 89, comments - 241, trackbacks - 0, articles - 1
   :: 首页 ::  :: 联系 :: 聚合  :: 管理

Struts2文件上传以及空指针异常解决

Posted on 2009-09-27 08:54 saobaolu 阅读(4323) 评论(2)  编辑  收藏 所属分类: java基础与算法

uploadFile.java

 1package action;
 2
 3import java.io.File;    
 4import java.text.DateFormat;    
 5import java.text.SimpleDateFormat;    
 6import java.util.Date;    
 7import java.util.Random;    
 8   
 9import javax.servlet.ServletContext;    
10   
11import org.apache.commons.io.FileUtils;    
12import org.apache.struts2.util.ServletContextAware;    
13   
14import com.opensymphony.xwork2.ActionSupport;    
15   
16public class uploadFile extends ActionSupport implements ServletContextAware {    
17        
18    private static final long serialVersionUID = -5016873153441103539L;    
19        
20    private File doc;    
21    private String fileName;    
22    private String contentType;    
23        
24    private ServletContext context;    
25            
26    public void setDoc(File file) {    
27        this.doc = file;    
28    }
    
29        
30    public void setDocFileName(String fileName) {    
31        this.fileName = fileName;    
32    }
    
33        
34    public void setDocContentType(String contentType) {    
35        this.contentType = contentType;    
36    }
    
37        
38    public void setServletContext(ServletContext context) {    
39        this.context = context;    
40    }
    
41        
42    public String execute() throws Exception {    
43        String targetDirectory = context.getRealPath("/upload");    
44        String targetFileName = generateFileName(fileName);    
45        File target = new File(targetDirectory, targetFileName);    
46            
47        FileUtils.copyFile(doc, target);    
48            
49        return SUCCESS;    
50    }
    
51        
52    private String generateFileName(String fileName) {    
53        DateFormat format = new SimpleDateFormat("yyMMddHHmmss");    
54        String formatDate = format.format(new Date());    
55            
56        int random = new Random().nextInt(10000);    
57            
58        int position = fileName.lastIndexOf(".");    
59        String extension = fileName.substring(position);    
60            
61        return formatDate + random + extension;    
62    }
       
63}
   
64

struts.xml
 1<?xml version="1.0" encoding="UTF-8" ?>   
 2<!DOCTYPE struts PUBLIC    
 3        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    
 4        "http://struts.apache.org/dtds/struts-2.0.dtd">   
 5<struts>      
 6    <package name="uploadFile" extends="struts-default">    
 7        <action name="uploadFile" class="action.uploadFile">   
 8            <result>/jsp/up.jsp</result>   
 9        </action>           
10    </package>      
11</struts>   
web.xml(Struts2的xml,非上传的xml)
 1<?xml version="1.0" encoding="UTF-8"?>   
 2<web-app 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     
 6    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">   
 7    <filter>   
 8        <filter-name>struts2</filter-name>   
 9        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>   
10    </filter>   
11    <filter-mapping>   
12        <filter-name>struts2</filter-name>   
13        <url-pattern>/*</url-pattern>   
14    </filter-mapping>      
15</web-app>   

up.jsp(上传成功页面)
 1<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2<%@ taglib prefix="s" uri = "/struts-tags" %>
 3<%
 4String path = request.getContextPath();
 5String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 6
%>
 7
 8<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 9<html>
10  <head>
11    <base href="<%=basePath%>">
12    
13    <title>My JSP 'up.jsp' starting page</title>
14    
15    <meta http-equiv="pragma" content="no-cache">
16    <meta http-equiv="cache-control" content="no-cache">
17    <meta http-equiv="expires" content="0">    
18    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
19    <meta http-equiv="description" content="This is my page">
20    <!--
21    <link rel="stylesheet" type="text/css" href="styles.css">
22    -->
23
24  </head>
25  
26  <body>
27    <s:property value="contentType"/><br />
28    <s:property value="dir" /><br />
29  </body>
30</html>
31
上传页面:
 1<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2<%@ taglib prefix="s" uri="/struts-tags" %>
 3<%
 4String path = request.getContextPath();
 5String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 6
%>
 7
 8<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 9<html>
10  <head>
11    <base href="<%=basePath%>">
12    
13    <title>最新产品发布页</title>
14    
15    <meta http-equiv="pragma" content="no-cache">
16    <meta http-equiv="cache-control" content="no-cache">
17    <meta http-equiv="expires" content="0">    
18    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
19    <meta http-equiv="description" content="This is my page">
20    <!--
21    <link rel="stylesheet" type="text/css" href="styles.css">
22    -->
23
24  </head>
25  
26  <body>
27    <s:form action="uploadFile" method="post" enctype="multipart/form-data">
28        <s:file name = "doc" label="上传视频" />
29        <s:submit value="上传" />
30    </s:form>
31  </body>
32</html>
33

很容易就会报错,空指针异常。
原因在于上传页面<s:file name="这里面的值与action的值不匹配" />
可是我上传成功之后,up.jsp页面没有传入任何值,郁闷了~
新手,多指点指点,谢谢~

没有所谓的命运,只有不同的选择!