JAVA网页设计利用JSP对文件下载的把持
C#是不行的,比如说美国的航天飞船里就有java开发的程序以上是我的愚见,其实不管那种语言,你学好了,都能找到好的工作,js|把持|下载出自孟宪会年夜年夜的blogWeb开辟职员都有过如许的疑问,怎样让一个文件,特别是一个已知范例的文件,发送到客户端,间接提醒让扫瞄者下载,而不是用与它相干联的程序翻开。之前我们最经常使用的举措就是把如许的文件加到链接上,如许可让扫瞄者经由过程点击鼠标右键的方针另存为来下载所链接的文件。可是,如许有两个不敷的中央:
一是:假如扫瞄器可以辨认已下载文件的扩大名,则扫瞄器就会激该死扩大名所联系关系的程序来翻开所下载的文件。好比:在Windows平台上,假如用户点击的链接链接的是一个“.doc”文件的话,那末,扫瞄器就会启动MicrosoftWord使用程序来翻开它。
二是:假如接纳链接的举措的话,任何能看到该链接的人都能够下载该文件,你固然也能够对所下载的文件举行权限设置,但那样做也不是很便利的。偶然候我们必要更加天真和富有弹性的体例,上面的程序可以很便利地克制以上两方面的不敷。
这类举措是牢靠的,但你必需记着:没有受权的用户不克不及够经由过程在扫瞄器地点栏里输出文件的URL来获得该文件的下载权。以是,要下载的文件应当放到假造目次以外的一个目次里,好比:假如你的假造目次是C:MengxianhuiTomcat4WebsiteMyApp的话,那末,寄存在该目次和该目次下的任何子目次下一切文件对因特网上的任何用户都是可见的。要间接下载一个文件,我们必要做两件事,第一件事是:设定呼应的内容类为“application/octet-stream”,巨细写有关。第二件事是:设置HTTP的呼应头名字为:Content-Disposition,设定值为:attachment;filename=theFileName。这里的theFileName就是呈现在文件下载对话框里的默许文件名,一般和所下载的文件名字不异,但也能够分歧。上面,我们就寻常最经常使用的JSP和ASP页面来举一个实践使用的例子。
TestFileDownload.JSP页面的例子:
<%
//失掉文件名字和路径
Stringfilename="MengxianhuiDocTest.doc";
Stringfilepath="D:";
//设置呼应头和下载保留的文件名
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition",
"attachment;filename=""+filename+""");
//翻开指定文件的流信息
java.io.FileInputStreamfileInputStream=
newjava.io.FileInputStream(filepath+filename);
//写出流信息
inti;
while((i=fileInputStream.read())!=-1){
out.write(i);
}
fileInputStream.close();
out.close();
%>
值得注重的是:在你要下载的文件内容里,除文件的内容以外,不该该再附加有别的任何的字符,包含空格和回车换行符。我们偶然在编写代码的时分,为了使代码明晰可读,常常会增加一些空格、制表符大概回车换行符,如许固然看起来对照明晰,但偶然大概会得不到准确的了局。好比:
<%@pageimport="java.io.*"
%><jsp:useBeanid="MyBeanFromMengxianhui"scope="page"
class="com.Mengxianhui.DownloadBean"/>
应当写成如许:
<%@pageimport="java.io.*"
%><jsp:useBeanid="MyBeanFromMengxianhui"scope="page"
class="com.Mengxianhui.DownloadBean"/>
TestFileDownload.ASP页面的例子:
在ASP里,没有供应从文件读取文件流信息的办法,因而,为了失掉文件的流信息,我们必需借助其他的工具,最复杂的就是编写一个VB或C的DLL组件,让组件前往文件的流信息。上面是一个用VB编写的DLL的例子,工程名字为MengXHFileDownLoad,类模块的名字为BinReadFromFile,类办法readBinFromFile以下:
FunctionreadBinFromFile(ByValbfilenameAsString)AsVariant
DimflAsLong
DimFileNumAsLong
Dimbinbyte()AsByte
DimbinfilestrAsString
OnErrorGoToerrHandler
FileNum=FreeFile
OpenbfilenameForBinaryAs#FileNum
fl=FileLen(bfilename)
ReDimbinbyte(fl)
Get#FileNum,,binbyte
Close#FileNum
readBinFromFile=binbyte
ExitFunction
errHandler:
ExitFunction
EndFunction
把下面的代码编译成MengXHFileDownLoad.DLL,然后注册便可利用。上面以间接下载一个WhenAManLovesAWoman.mp3的MP3文件为例子,我们要编写的ASP剧本代码以下:
<%@Language=VBScript%>
<%
Response.buffer=TRUE
Response.ContentType="APPLICATION/OCTET-STREAM"
Response.AddHeader"Content-Disposition","attachment;filename=WhenAManLovesAWoman.mp3"
DimvarStream,oMyObject
SetoMyObject=Server.CreateObject("MengXHFileDownLoad.BinReadFromFile")
varStream=oMyObject.readBinFromFile("E:MengXianhuiMp3WhenAManLovesAWoman.mp3")
Response.BinaryWrite(varStream)
SetoMyObject=Nothing
Response.End
%>
当我们运转下面的TestFileDownload.ASP文件时,扫瞄器会弹出一个文件下载的对话框,提醒我们下载,而不是用默许的MP3播放器翻开。
这类办法也能够把我们的ASP页面熟成的HTML源代码保留成一个文件,上面的代码会提醒你把ASP实行的了局保留成Test.htm文件。详细的办法是:
<%
Response.ContentType="APPLICATION/OCTET-STREAM"
Response.AddHeader"Content-Disposition","attachment;filename=Test.htm"
Response.write"<divstyle=background-color:navy;color:#FFFFFF>测试</div>"
Response.write"<ahref=http://lucky.myrice.com>"
Response.write"<imgsrc=http://lucky.myrice.com/back.jpg>【孟宪会之出色天下】</a>"
Response.End
%>
当我们的文件数量很少时,也能够间接在服务器端举行设置,让这些文件间接下载。详细做法是:在Internet服务办理器里,选“属性”项,然后选“HTTPHeaders”标签页举行设置便可!!
轮性能微软曾做过一个例子,就是同一个项目用java和.net来作,结果开发周期,.net是java的一半,性能java是.net的十分之一,代码量java是.net的三倍。呵呵,这说明了什么,.net的全方位比java好。但是有的人说.net不能跨平台,这个问题我和我同学曾讨论过,都认为微软的.net很可能早都可以跨平台了,但是微软为了保护他们的操作系统,所以才没有推出跨平台的.net,只是推出了跨语言的.net, 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 是一种使网页(Web Page)产生生动活泼画面的语言 如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 Java 编程语言的风格十分接近C、C++语言。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 是一种为 Internet发展的计算机语言 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
页:
[1]
2