当前位置: 技术问答>java相关
技术大讨论!!为JSP开发上传组件!!!!可是我原创作品哦,希望能对一些人有些帮助,也希望高手指点
来源: 互联网 发布时间:2015-02-22
本文导语: JSP上传组件的编写 JSP的资料在国内真是太少了,关于JSP上传组件的编写资料更是……。在实际的开发工作中,我遇到了用JSP做上传组件的工作,因为这方面资料少,我在好几个编程网站发了帖子,希望有人能帮帮我...
JSP上传组件的编写
JSP的资料在国内真是太少了,关于JSP上传组件的编写资料更是……。在实际的开发工作中,我遇到了用JSP做上传组件的工作,因为这方面资料少,我在好几个编程网站发了帖子,希望有人能帮帮我,可结果不可想象(给的一些代码根本就不能用,明显的语法错误就是一大堆,就不用提我在排错上面花了多少时间了)。最后还是决定自己重写一个上传组件,这篇文章就从基础实现上讨论这种组件的编写流程,当然,说是基础可也要有些JAVA语言的基础。好了,叫我们一起讨论实现的具体过程和方法。关于JavaBeans和JavaServlet的编写方法请参考相关Java类书籍。
一开始我们做JSP组件要先确定是用什么方式JSP支持两种方式为它开发,一种是JavaBeans,另一种是JavaServlet,当然这两种方式都是可以的,各有各的好处。在这里我们用JavaServlet讨论一下,用JavaBeans方法也是一样的。
在用JavaServlet开发后台处理之前,我们要先说一下前台(就是HTML页面部分)要注意的地方就是在Form中提交的方式一定要是POST且ENCTYPE类型为“multipart/form-data”例如HTML语句要这样写:。当然上传时HTML中的文件选择要用。这样你所选择的文件就会以信息数据流的方式提交到后台处理。
在后台处理的JavaServlet中,最主要的就是这句话:
DataInputStream in = new DataInputStream(request.getInputStream());
这句就是把前台传来的数据流付值给Java流对像DataInputStream。写回时用:
FileOutputStream fileOut= new FileOutputStream("C:\test.txt");
这种方式声明一个另一个Java流类FileOutputStream对像用来写入目标文件。写入时程序段为: try{
int c;
while ((c = in.read()) != -1)
fileOut.write(c);
in.close();
fileOut.close();
}catch(IOException e){
e.printStackTrace();
}
这样写入文件后你会发现写入的文件比源来的文件大一些,不一样为什么呢?主要是因为在这个数据流中不仅仅有上传文件的内容,而且有一部分HTTP头信息,上传一个文本文件就可以看明白了,文件头有一部分,文件尾有一部分,那怎么去掉或是怎么在里面取出必要的信息呢?现在大部分组件都用到了把数据流读到一个和数据流长度一样大的一个byte数组中,再把数组转成字符串,然后用大量字符串操作函数来实现的。主要用到了:
String dataHeader = new String(m_binArray, start, (end - start) + 1);(因为Java不支持指针所以要用新建字符)。
String filename = dataHeader.substring(dataHeader.indexOf("name="));截取成新的字符串。
关于文件与字符串的具体的使用方法请参考相关Java类书籍。
当最后截取完了后用fileOut.write(file.getBytes(),0,file.length());这个方法实现对文件的写入操作。以上就是为JSP编写上传组件的流程和方法。
JSP的资料在国内真是太少了,关于JSP上传组件的编写资料更是……。在实际的开发工作中,我遇到了用JSP做上传组件的工作,因为这方面资料少,我在好几个编程网站发了帖子,希望有人能帮帮我,可结果不可想象(给的一些代码根本就不能用,明显的语法错误就是一大堆,就不用提我在排错上面花了多少时间了)。最后还是决定自己重写一个上传组件,这篇文章就从基础实现上讨论这种组件的编写流程,当然,说是基础可也要有些JAVA语言的基础。好了,叫我们一起讨论实现的具体过程和方法。关于JavaBeans和JavaServlet的编写方法请参考相关Java类书籍。
一开始我们做JSP组件要先确定是用什么方式JSP支持两种方式为它开发,一种是JavaBeans,另一种是JavaServlet,当然这两种方式都是可以的,各有各的好处。在这里我们用JavaServlet讨论一下,用JavaBeans方法也是一样的。
在用JavaServlet开发后台处理之前,我们要先说一下前台(就是HTML页面部分)要注意的地方就是在Form中提交的方式一定要是POST且ENCTYPE类型为“multipart/form-data”例如HTML语句要这样写:。当然上传时HTML中的文件选择要用。这样你所选择的文件就会以信息数据流的方式提交到后台处理。
在后台处理的JavaServlet中,最主要的就是这句话:
DataInputStream in = new DataInputStream(request.getInputStream());
这句就是把前台传来的数据流付值给Java流对像DataInputStream。写回时用:
FileOutputStream fileOut= new FileOutputStream("C:\test.txt");
这种方式声明一个另一个Java流类FileOutputStream对像用来写入目标文件。写入时程序段为: try{
int c;
while ((c = in.read()) != -1)
fileOut.write(c);
in.close();
fileOut.close();
}catch(IOException e){
e.printStackTrace();
}
这样写入文件后你会发现写入的文件比源来的文件大一些,不一样为什么呢?主要是因为在这个数据流中不仅仅有上传文件的内容,而且有一部分HTTP头信息,上传一个文本文件就可以看明白了,文件头有一部分,文件尾有一部分,那怎么去掉或是怎么在里面取出必要的信息呢?现在大部分组件都用到了把数据流读到一个和数据流长度一样大的一个byte数组中,再把数组转成字符串,然后用大量字符串操作函数来实现的。主要用到了:
String dataHeader = new String(m_binArray, start, (end - start) + 1);(因为Java不支持指针所以要用新建字符)。
String filename = dataHeader.substring(dataHeader.indexOf("name="));截取成新的字符串。
关于文件与字符串的具体的使用方法请参考相关Java类书籍。
当最后截取完了后用fileOut.write(file.getBytes(),0,file.length());这个方法实现对文件的写入操作。以上就是为JSP编写上传组件的流程和方法。
|
to CDSoftwareWj(95927):
不错不错,很好很好!
全力支持你!
我还没写过,给了我不少思路。
to lijunjoy(lijun):
看你的话,感觉你好象,...,好像很牛(我怎么连猜测你很牛的信心也没啊?呵呵)!
你写个出来看看,俺很笨的,也跟你学学!ok?
希望你是自己写的,不要从网上随便找个一改就成你的了?
关键时候,怎能客气?
不错不错,很好很好!
全力支持你!
我还没写过,给了我不少思路。
to lijunjoy(lijun):
看你的话,感觉你好象,...,好像很牛(我怎么连猜测你很牛的信心也没啊?呵呵)!
你写个出来看看,俺很笨的,也跟你学学!ok?
希望你是自己写的,不要从网上随便找个一改就成你的了?
关键时候,怎能客气?
|
不错,我也正想写呢,谢了
|
祝你好运!