飘飘悠悠 发表于 2015-1-18 11:37:44

JAVA教程之怎样在Web页上完成文件上传

诸如RMI,EJB等一些技术并不是你说的那么复杂,而是它们把一些复杂的工具封装成不复杂的工具了,理解这些工具是需要些时间。我问你,.net里有这些工具吗?要简单多少?。web|上传
publicclassUploadServletextendsHttpServlet<br>
{<br>
//defaultmaximumallowablefilesizeis100k<br>
staticfinalintMAX_SIZE=102400;<br>
//instancevariablestostorerootandsuccessmessage<br>
StringrootPath,successMessage;<br>
/**<br>
*initmethodiscalledwhenservletisinitialized.<br>
*/<br>
publicvoidinit(ServletConfigconfig)throwsServletException<br>
{<br>
super.init(config);<br>
//getpathinwhichtosavefile<br>
rootPath=config.getInitParameter("RootPath");<br>
if(rootPath==null)<br>
{<br>
rootPath="/";<br>
}<br>
/*Getmessagetoshowwhenuploadiscomplete.Usedonlyif<br>
asuccessredirectpageisnotsupplied.*/<br>
successMessage=config.getInitParameter("SuccessMessage");<br>
if(successMessage==null)<br>
{<br>
successMessage="Fileuploadcomplete!";<br>
}<br>
}<br>
/**<br>
*doPostreadstheuploadeddatafromtherequestandwrites<br>
*ittoafile.<br>
*/<br>
publicvoiddoPost(HttpServletRequestrequest,<br>
HttpServletResponseresponse)<br>
{<br>
ServletOutputStreamout=null;<br>
DataInputStreamin=null;<br>
FileOutputStreamfileOut=null;<br>
try<br>
{<br>
/*setcontenttypeofresponseandgethandletooutput<br>
streamincaseweareunabletoredirectclient*/<br>
response.setContentType("text/plain");<br>
out=response.getOutputStream();<br>
}<br>
catch(IOExceptione)<br>
{<br>
//printerrormessagetostandardout<br>
System.out.println("Errorgettingoutputstream.");<br>
System.out.println("Errordescription:"+e);<br>
return;<br>
}<br>
try<br>
{<br>
//getcontenttypeofclientrequest<br>
StringcontentType=request.getContentType();<br>
//makesurecontenttypeismultipart/form-data<br>
if(contentType!=null&&contentType.indexOf(<br>
"multipart/form-data")!=-1)<br>
{<br>
//openinputstreamfromclienttocaptureuploadfile<br>
in=newDataInputStream(request.getInputStream());<br>
//getlengthofcontentdata<br>
intformDataLength=request.getContentLength();<br>
//allocateabytearraytostorecontentdata<br>
bytedataBytes[]=newbyte;<br>
//readfileintobytearray<br>
intbytesRead=0;<br>
inttotalBytesRead=0;<br>
intsizeCheck=0;<br>
while(totalBytesRead<formDataLength)<br>
{<br>
//checkformaximumfilesizeviolation<br>
sizeCheck=totalBytesRead+in.available();<br>
if(sizeCheck>MAX_SIZE)<br>
{<br>
out.println("Sorry,fileistoolargetoupload.");<br>
return;<br>
}<br>
bytesRead=in.read(dataBytes,totalBytesRead,<br>
formDataLength);<br>
totalBytesRead+=bytesRead;<br>
}<br>
//createstringfrombytearrayforeasymanipulation<br>
Stringfile=newString(dataBytes);<br>
//sincebytearrayisstoredinstring,releasememory<br>
dataBytes=null;<br>
/*getboundaryvalue(boundaryisauniquestringthat<br>
separatescontentdata)*/<br>
intlastIndex=contentType.lastIndexOf("=");<br>
Stringboundary=contentType.substring(lastIndex+1,<br>
contentType.length());<br>
//getDirectorywebvariablefromrequest<br>
Stringdirectory="";<br>
if(file.indexOf("name="Directory"")>0)<br>
{<br>
directory=file.substring(<br>
file.indexOf("name="Directory""));<br>
//removecarriagereturn<br>
directory=directory.substring(<br>
directory.indexOf("
")+1);<br>
//removecarriagereturn<br>
directory=directory.substring(<br>
directory.indexOf("
")+1);<br>
//getDirectory<br>
directory=directory.substring(0,<br>
directory.indexOf("
")-1);<br>
/*makesureuserdidntselectadirectoryhigherin<br>
thedirectorytree*/<br>
if(directory.indexOf("..")>0)<br>
{<br>
out.println("SecurityError:Youcantupload"+<br>
"toadirectoryhigherinthedirectorytree.");<br>
return;<br>
}<br>
}<br>
//getSuccessPagewebvariablefromrequest<br>
StringsuccessPage="";<br>
if(file.indexOf("name="SuccessPage"")>0)<br>
{<br>
successPage=file.substring(<br>
file.indexOf("name="SuccessPage""));<br>
//removecarriagereturn<br>
successPage=successPage.substring(<br>
successPage.indexOf("
")+1);<br>
//removecarriagereturn<br>
successPage=successPage.substring(<br>
successPage.indexOf("
")+1);<br>
//getsuccesspage<br>
successPage=successPage.substring(0,<br>
successPage.indexOf("
")-1);<br>
}<br>
//getOverWriteflagwebvariablefromrequest<br>
StringoverWrite;<br>
if(file.indexOf("name="OverWrite"")>0)<br>
{<br>
overWrite=file.substring(<br>
file.indexOf("name="OverWrite""));<br>
//removecarriagereturn<br>
overWrite=overWrite.substring(<br>
overWrite.indexOf("
")+1);<br>
//removecarriagereturn<br>
overWrite=overWrite.substring(<br>
overWrite.indexOf("
")+1);<br>
//getoverwriteflag<br>
overWrite=overWrite.substring(0,<br>
overWrite.indexOf("
")-1);<br>
}<br>
else<br>
{<br>
overWrite="false";<br>
}<br>
//getOverWritePagewebvariablefromrequest<br>
StringoverWritePage="";<br>
if(file.indexOf("name="OverWritePage"")>0)<br>
{<br>
overWritePage=file.substring(<br>
file.indexOf("name="OverWritePage""));<br>
//removecarriagereturn<br>
overWritePage=overWritePage.substring(<br>
overWritePage.indexOf("
")+1);<br>
//removecarriagereturn<br>
overWritePage=overWritePage.substring(<br>
overWritePage.indexOf("
")+1);<br>
//getoverwritepage<br>
overWritePage=overWritePage.substring(0,<br>
overWritePage.indexOf("
")-1);<br>
}<br>
//getfilenameofuploadfile<br>
StringsaveFile=file.substring(<br>
file.indexOf("filename="")+10);<br>
saveFile=saveFile.substring(0,<br>
saveFile.indexOf("
"));<br>
saveFile=saveFile.substring(<br>
saveFile.lastIndexOf("")+1,<br>
saveFile.indexOf("""));<br>
/*removeboundarymarkersandothermultipart/form-data<br>
tagsfrombeginningofuploadfilesection*/<br>
intpos;//positioninuploadfile<br>
//findpositionofuploadfilesectionofrequest<br>
pos=file.indexOf("filename="");<br>
//findpositionofcontent-dispositionline<br>
pos=file.indexOf("
",pos)+1;<br>
//findpositionofcontent-typeline<br>
pos=file.indexOf("
",pos)+1;<br>
//findpositionofblankline<br>
pos=file.indexOf("
",pos)+1;<br>
/*findthelocationofthenextboundarymarker<br>
(markingtheendoftheuploadfiledata)*/<br>
intboundaryLocation=file.indexOf(boundary,pos)-4;<br>
//uploadfileliesbetweenposandboundaryLocation<br>
file=file.substring(pos,boundaryLocation);<br>
//buildthefullpathoftheuploadfile<br>
StringfileName=newString(rootPath+directory+<br>
saveFile);<br>
//createFileobjecttocheckforexistenceoffile<br>
FilecheckFile=newFile(fileName);<br>
if(checkFile.exists())<br>
{<br>
/*fileexists,ifOverWriteflagisoff,give<br>
messageandabort*/<br>
if(!overWrite.toLowerCase().equals("true"))<br>
{<br>
if(overWritePage.equals(""))<br>
{<br>
/*OverWriteHTMLpageURLnotreceived,respond<br>
withgenericmessage*/<br>
out.println("Sorry,filealreadyexists.");<br>
}<br>
else<br>
{<br>
//redirectclienttoOverWriteHTMLpage<br>
response.sendRedirect(overWritePage);<br>
}<br>
return;<br>
}<br>
}<br>
/*createFileobjecttocheckforexistenceof<br>
Directory*/<br>
FilefileDir=newFile(rootPath+directory);<br>
if(!fileDir.exists())<br>
{<br>
//Directorydoesntexist,createit<br>
fileDir.mkdirs();<br>
}<br>
//instantiatefileoutputstream<br>
fileOut=newFileOutputStream(fileName);<br>
//writethestringtothefileasabytearray<br>
fileOut.write(file.getBytes(),0,file.length());<br>
if(successPage.equals(""))<br>
{<br>
/*successHTMLpageURLnotreceived,respondwith<br>
genericsuccessmessage*/<br>
out.println(successMessage);<br>
out.println("Filewrittento:"+fileName);<br>
}<br>
else<br>
{<br>
//redirectclienttosuccessHTMLpage<br>
response.sendRedirect(successPage);<br>
}<br>
}<br>
else//requestisnotmultipart/form-data<br>
{<br>
//senderrormessagetoclient<br>
out.println("Requestnotmultipart/form-data.");<br>
}<br>
}<br>
catch(Exceptione)<br>
{<br>
try<br>
{<br>
//printerrormessagetostandardout<br>
System.out.println("ErrorindoPost:"+e);<br>
//senderrormessagetoclient<br>
out.println("Anunexpectederrorhasoccurred.");<br>
out.println("Errordescription:"+e);<br>
}<br>
catch(Exceptionf){}<br>
}<br>
finally<br>
{<br>
try<br>
{<br>
fileOut.close();//closefileoutputstream<br>
}<br>
catch(Exceptionf){}<br>
try<br>
{<br>
in.close();//closeinputstreamfromclient<br>
}<br>
catch(Exceptionf){}<br>
try<br>
{<br>
out.close();//closeoutputstreamtoclient<br>
}<br>
catch(Exceptionf){}<br>
}<br>
}<br>
}<br>
<br>
<br>



ruby里有这些工具吗?又要简单多少?我没有用过这两门语言,我估计在这些语言力没有很统一的这种标准,或者根本就没有提供。

金色的骷髅 发表于 2015-1-21 11:25:19

是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言

精灵巫婆 发表于 2015-1-26 09:52:44

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

再现理想 发表于 2015-2-4 13:38:28

学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。

飘灵儿 发表于 2015-2-9 23:54:19

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

小女巫 发表于 2015-2-16 21:33:13

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。

第二个灵魂 发表于 2015-2-18 16:18:59

设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧

海妖 发表于 2015-3-6 08:41:32

你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。

因胸联盟 发表于 2015-3-11 15:54:02

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

老尸 发表于 2015-3-18 23:23:09

是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言

admin 发表于 2015-3-20 00:32:24

是一种突破用户端机器环境和CPU

再见西城 发表于 2015-3-25 13:03:22

吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧

兰色精灵 发表于 2015-3-27 14:09:55

Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

乐观 发表于 2015-4-1 22:08:46

我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。

飘飘悠悠 发表于 2015-4-5 17:50:19

自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。

莫相离 发表于 2015-6-10 18:58:35

Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。

变相怪杰 发表于 2015-6-24 00:53:06

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。

灵魂腐蚀 发表于 2015-6-27 00:35:20

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

山那边是海 发表于 2015-7-7 04:44:12

你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。

简单生活 发表于 2015-7-9 22:22:43

http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。
页: [1] 2
查看完整版本: JAVA教程之怎样在Web页上完成文件上传