日期:2014-05-16 浏览次数:20513 次
?
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <script language="javascript"> function myFormCheck(theform) { if(theform.theFile.value=="") { alert("请点击浏览按钮,选择您要上传的文件!") theform.theFile.focus; return (false); } else { str= theform.theFile.value; strs=str.toLowerCase(); lens=strs.length; extname=strs.substring(lens-4,lens); if(extname!=".xls") { alert("请选择excel文件!") return (false); } } } </script> <meta http-equiv="Content-Type" content="text/html; charset=GBK"> <title>Insert title here</title> </head> <body> <form name="uploadform" action="importdata.do" enctype="multipart/form-data" method=post onsubmit="return myFormCheck(this)"> <input type="file" name="theFile"> <input type="submit" value="导入"> </form> </body> </html>
?
其中用js从客户端判断了下文件的类型。在服务端同样判断了类型,这是防止某些人绕过js,直接上传非excel文件。 其中调用action importdata.do ,在struts-config.xml配置如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <data-sources /> <form-beans > <form-bean name="uploadForm" type="com.alihoo.struts.form.UploadForm" /> </form-beans> <global-exceptions /> <global-forwards > <forward name="import_data_error" path="/importJsp.jsp" /> <forward name="success" path="/success.jsp" /> </global-forwards> <action-mappings > <action attribute="uploadForm" name="uploadForm" path="/importdata" scope="request" type="com.alihoo.struts.action.ImportdataAction" validate="false" /> </action-mappings> <message-resources parameter="com.alihoo.struts.ApplicationResources" /> </struts-config> 因为是上传文件,request应该是得不到数据的,所以用了一个UploadForm,其中只有一个成员FormFile theFile.注意,theFile不是随便命名的,是跟上传页面中<input type="file" name="theFile">的name一样的。其中UploadForm代码如下: package com.alihoo.struts.form; import org.apache.struts.action.ActionForm; import org.apache.struts.upload.FormFile; public class UploadForm extends ActionForm ...{ private FormFile theFile; public FormFile getTheFile() ...{ return theFile; } public void setTheFile(FormFile theFile) ...{ this.theFile = theFile; } }为了方面测试,都没分什么dao层之类,全部放在aciton中了。这里数据表有exceltable有三个字段,一个id,int型自增,一个username,一个password都是字符型。这里假设excel的数据也是三个字段的,即已经指定id。一般来说不应在excel指定id,里面指定了id是主键,所以有重复记录的时候就终止了,这里都没判断是否有重复id,太麻烦了。 那个aciton的具体代码如下: /**//* * Generated by MyEclipse Struts * Template path: templates/java/JavaClass.vtl */ package com.alihoo.struts.action; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import jxl