仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 773|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA编程:用JSP完成上传文件的两种办法

[复制链接]
只想知道 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:31:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
还有就是总有人问我到底该学习什么语言,什么语言有前途,那么我的回答是不论是C,C++,java,.net,ruby,asp或是其他语言都可以学,编程的关键不是语言,而是思想。js|上传在用Java开辟企业器体系的利用,出格是触及到与办公相干的软件开辟的时分,文件的上传是客户常常要提到的请求.因而有一套很好文件上传的办理举措也能便利人人在这一块的开辟.

起首声名,该文章是为了本人纪录一备今后开辟必要的时分,不必从容不迫哈哈........

如今在国际用的十分多的通常为两种办法办理来办理文件上传.

cos.jar+uploadbean.jar+filemover.jar
这个是用的十分广泛的,缘故原由是由于他操纵便利,是我们不用再往存眷,那些文件的输出和输入流,使我们从底层的流中摆脱出来.
UploadFile,UploadBean,MultipartFormDataRequest
<%@pagecontentType="text/html;charset=gb2312"%>
<head>
<title>fbysssUploadBean示例</title>
<!--metahttp-equiv="Content-Type"content="text/html;charset=iso-8859-1"-->
<!--metahttp-equiv="Content-Type"content="text/html;charset=gb2312"-->
</head>
<FORMname="form1"METHOD="POST"ACTION="sssupload.jsp"ENCTYPE="multipart/form-data">
<inputname="title"type="text"value="中笔墨">
<tdclass="bodystyle">附件</td>
<tdclass="bodystyle"><inputname="attach"type="FILE"id="attach"size="50"></td>
<inputname="ok"type="submit"value="提交">
</form>
2.读取表单页面sssgetdata.jsp
<!--
//==========================================================================
//文件:UploadBean上传实例
//功效:办理中文乱码,完成文件上传,并供应上传更名办理计划
//fbysss
//msn:jameslastchina@hotmail.com
//==========================================================================
-->
<%@pagecontentType="text/html;charset=GBK"%>
<%@pagelanguage="java"import="com.jspsmart.upload.*"%>
<%@pageimport="java.text.SimpleDateFormat"%>
<%@pageimport="java.io.File"%>
<%@pageimport="java.util.*"%>
<%@pageimport="javazoom.upload.*"%>
<%@pageimport="uploadutilities.FileMover"%>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
</head>
<%
request.setCharacterEncoding("GBK");//设置编码格局,就不必一个个转码了。
FileMoverfileMover=newFileMover();//你也能够利用自带的实例中jsp:useBean的情势。
UploadBeanupBean=newUploadBean();
MultipartFormDataRequestmrequest=null;
Hashtablefiles=null;

if(MultipartFormDataRequest.isMultipartFormData(request))
{
mrequest=newMultipartFormDataRequest(request,null,100*1024*1024,MultipartFormDataRequest.COSPARSER,"GBK");//注重这里也要设置编码参数
StringsTt0=mrequest.getParameter("title");
out.println("<br>Title0是:"+sTt0+"<br>");
StringsTt1=newString(sTt0.getBytes("ISO-8859-1"),"GBK");
out.println("<br>Title1是:"+sTt1+"<br>");
//这里用来测试title参数是不是准确。调试的时分,加一句if(true)return;便可。
files=mrequest.getFiles();
}


//猎取修正前的文件名
StringsOldFileName=mrequest.getParameter("oldfilename");
out.println("sOldFileName:"+sOldFileName);
StringsWebRootPath=request.getRealPath("/");//失掉你的web使用的根。
StringsPath=sWebRootPath+"attach";
intiFileCount=0;
StringsServerFileName="";
StringsLocalFileName="";
//文件猎取
if((files!=null)||(!files.isEmpty())){

iFileCount=files.size();
UploadFilefile=(UploadFile)files.get("attach");
sLocalFileName=file.getFileName();
out.println("sLocalFileName:"+sLocalFileName);
intii=sLocalFileName.indexOf(".");//取文件名的后缀
StringsExt=sLocalFileName.substring(ii,sLocalFileName.length());
//失掉不反复的文件名
java.util.Datedt=newjava.util.Date(System.currentTimeMillis());
SimpleDateFormatfmt=newSimpleDateFormat("yyyyMMddHHmmssSSS");
sServerFileName=fmt.format(dt);
sServerFileName=sServerFileName+sExt;
//假如不存在该目次,则新建一个
Filedir=newFile(sPath);
if(!dir.exists()){
dir.mkdirs();
}
upBean.setFolderstore(sPath);//设置要上传的目次
upBean.addUploadListener(fileMover);//增添filMover监听
fileMover.setNewfilename(sServerFileName);//设置服务器上的文件名
upBean.store(mrequest,"attach");//上传
out.println("filepathis"+sPath+"/"+sServerFileName);
}

%>

Demo注重事项:cos.jar,uploadbean.jar,filemover.jar这几个包必需有。
必备下载地点:
UploadBean1.5:http://wcarchive.cdrom.com/pub/simtelnet/winnt/java/uploadbean1_5.zip
FileMover1.3:http://www.javazoom.net/jzservlets/uploadbean/addons/filemover1.3.zip
参考下载地点:
ChinesUpload例子:http://www.javazoom.net/jzservlets/uploadbean/addons/ChineseUpload.zip
参考了fbysss的一篇文章
2.org.apache.struts.upload.FormFile
Struts1.1的org.apache.struts.upload.FormFile类。很便利,不必本人写。也不必写一个jsp挪用jspsmartupload就能够弄定。


选择上传文件页面:selfile.jsp


--------------------------------------------------------------------------------
<%@tagliburi="/WEB-INF/struts-html.tld"prefix="html"%>
<html:html>
<html:formaction="/uploadsAction.do"enctype="multipart/form-data">
<html:fileproperty="theFile"/>
<html:submit/>
</html:form>
</html:html>

--------------------------------------------------------------------------------
UpLoadAction.java
--------------------------------------------------------------------------------
importjava.io.*;
importjavax.servlet.http.*;
importorg.apache.struts.action.*;
importorg.apache.struts.upload.FormFile;

/**
*<p>Title:UpLoadAction</p>
*<p>Description:QRRSMMS</p>
*<p>Copyright:Copyright(c)2004jiahansoft</p>
*<p>Company:jiahansoft</p>
*@authorwanghw
*@version1.0
*/

publicclassUpLoadActionextendsAction{
publicActionForwardexecute(ActionMappingmapping,
ActionFormform,
HttpServletRequestrequest,
HttpServletResponseresponse)
throwsException{
if(forminstanceofuploadsForm){//假如form是uploadsForm
Stringencoding=request.getCharacterEncoding();
if((encoding!=null)&&(encoding.equalsIgnoreCase("utf-8")))
{
response.setContentType("text/html;charset=gb2312");//假如没有指定编码,编码格局为gb2312
}
UpLoadFormtheForm=(UpLoadForm)form;
FormFilefile=theForm.getTheFile();//获得上传的文件
try{
InputStreamstream=file.getInputStream();//把文件读进
StringfilePath=request.getRealPath("/");//取以后体系路径
ByteArrayOutputStreambaos=newByteArrayOutputStream();
OutputStreambos=newFileOutputStream(filePath+"/"+
file.getFileName());//创建一个上传文件的输入流
//System.out.println(filePath+"/"+file.getFileName());
intbytesRead=0;
byte[]buffer=newbyte[8192];
while((bytesRead=stream.read(buffer,0,8192))!=-1){
bos.write(buffer,0,bytesRead);//将文件写进服务器
}
bos.close();
stream.close();
}catch(Exceptione){
System.err.print(e);
}
//request.setAttribute("dat",file.getFileName());
returnmapping.findForward("display");
}
returnnull;
}
}


--------------------------------------------------------------------------------

UpLoadForm.java

--------------------------------------------------------------------------------


importjavax.servlet.http.HttpServletRequest;
importorg.apache.struts.action.*;
importorg.apache.struts.upload.*;

/**
*<p>Title:UpLoadForm</p>
*<p>Description:QRRSMMS</p>
*<p>Copyright:Copyright(c)2004jiahansoft</p>
*<p>Company:jiahansoft</p>
*@authorwanghw
*@version1.0
*/

publicclassUpLoadFormextendsActionForm{
publicstaticfinalStringERROR_PROPERTY_MAX_LENGTH_EXCEEDED="org.apache.struts.webapp.upload.MaxLengthExceeded";
protectedFormFiletheFile;
publicFormFilegetTheFile(){
returntheFile;
}
publicvoidsetTheFile(FormFiletheFile){
this.theFile=theFile;
}
publicActionErrorsvalidate(ActionMappingmapping,HttpServletRequestrequest)
{
ActionErrorserrors=null;
//hasthemaximumlengthbeenexceeded?
BooleanmaxLengthExceeded=(Boolean)
request.getAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED);
if((maxLengthExceeded!=null)&&(maxLengthExceeded.booleanValue()))
{
errors=newActionErrors();
errors.add(ERROR_PROPERTY_MAX_LENGTH_EXCEEDED,newActionError("maxLengthExceeded"));
}
returnerrors;

}
}
//这是绝对应的form,另有其他属性能够设置,详细能够参考struts的上传例子。



--------------------------------------------------------------------------------

struts-config.xml

--------------------------------------------------------------------------------

<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEstruts-configPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.1//EN""http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<form-beans>
<form-beanname="uploadsForm"type="UpLoadForm"/>
</form-beans>
<action-mappings>
<actionname="uploadsForm"type="UpLoadAction"path="/uploadsAction">
<forwardname="display"path="/display.jsp"/>
</action>
</action-mappings>
</struts-config>
<!--display.jsp就是任意写一个乐成页-->


再说说缺点:首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。
小女巫 该用户已被删除
沙发
发表于 2015-1-21 09:31:31 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
第二个灵魂 该用户已被删除
板凳
发表于 2015-1-24 15:29:33 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
简单生活 该用户已被删除
地板
发表于 2015-1-24 17:12:05 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
5#
发表于 2015-1-25 21:07:02 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
若天明 该用户已被删除
6#
发表于 2015-1-26 12:53:31 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
莫相离 该用户已被删除
7#
发表于 2015-1-27 07:10:25 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
飘飘悠悠 该用户已被删除
8#
发表于 2015-1-27 16:32:55 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
因胸联盟 该用户已被删除
9#
发表于 2015-1-29 11:29:20 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
灵魂腐蚀 该用户已被删除
10#
发表于 2015-2-1 17:15:47 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
精灵巫婆 该用户已被删除
11#
发表于 2015-2-2 17:51:48 | 只看该作者
是一种突破用户端机器环境和CPU
愤怒的大鸟 该用户已被删除
12#
发表于 2015-2-8 03:04:45 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
冷月葬花魂 该用户已被删除
13#
发表于 2015-2-24 03:19:31 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
老尸 该用户已被删除
14#
发表于 2015-3-4 05:07:51 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
变相怪杰 该用户已被删除
15#
发表于 2015-3-5 09:51:25 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
深爱那片海 该用户已被删除
16#
发表于 2015-3-6 15:16:29 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
乐观 该用户已被删除
17#
发表于 2015-3-13 03:07:07 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
分手快乐 该用户已被删除
18#
发表于 2015-3-19 08:30:02 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
金色的骷髅 该用户已被删除
19#
发表于 2015-3-21 02:02:54 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
飘灵儿 该用户已被删除
20#
发表于 2015-3-22 17:10:58 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 17:31

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表