使用servlet来下载文件,其原理非常简单,只要得到文件的输入流(或相应字节),然后写输出流即可。现就其中的几个细节问题展开:
1. MIME类型的设置:
Web 浏览器使用 MIME 类型来识别非 HTML 文档,并决定如何显示该文档内的数据。
例如EXCEL文件的 MIME 类型是 "application/vnd.ms-excel "。要用servlet 来打开一个 EXCEL 文档,需要将 response 对象中 header 的 contentType 设置成“application/vnd.ms-excel ”。
response.setContentType(contentType);
2. Content disposition
HTTP response header中的content-disposition 允许 servlet 指定文档表示的信息。使用这种header ,你就可以将文档指定成单独打开(而不是在浏览器中打开),还可以根据用户的操作来显示。
如果用户要保存文档,你还可以为该文档建议一个文件名。这个建议名称会出现在 Save As 对话框的“文件名”栏中。如果没有指定,则对话框中就会出现 servlet 的名字。
servlet 中,将 header 设置成下面这样:
response.setHeader("Content-disposition","attachment;filename="+ "Example.xls" );
response.setHeader("Content-Disposition", "inline; fil ......
数组:表示定义同种数据类型的多个变量
1.一维数组的定义
数组元素的数组类型[] 数组名=new 数组元素的数据类型[数组元素的个数] 或
数组元素的数据类型 数组名[]=new 数组元素的数据类型[数组元素的个数]
注意:以为数组名可以通过length返回数组元素的个数
2.二维数组的定义
数组元素的数据类型[][] 数组名=new 数组元素的数据类型[行数][列数] 或
数组元素的数据类型 数组名[][]=new 数组元素的数据类型[行数][列数]
注意:构成二维数组的一维数组不必有相同的列数,在创建二维数组时可以分别指定构成该二维数组的列数
eg:int a[][]=new int[3][];
&n ......
甲骨文已经完成了对SUN公司的收购,于1月27日发布了对Sun各项业务的整合规划。总体上说,Oracle要成为软硬件一体化的整体解决方案的厂商。 以下就其对备受关注的Java方面的策略做个介绍。
Java SE:
1)推出JDK SE 7, 它将包括多个新的功能,如提高开发人员的效率,提供高性能,对多核芯片的支持等。
2)Sun的HotSpot和Bea的JRockit都是策略性虚拟机:融合两者的最佳特性,提供管理和实时监控功能,在hypervisor这层中运行 本地虚拟机代码,支持多核CPU NUMA架构的编译优化等。
3) 继续支持多种操作系统平台。
Java EE:
1)继续发展Java EE的参考实现(RI,reference implementation), 进一步对某些重要的方向,如开放标准的模块化,新的轻量级服务器配置,RIA和用户界面,脚本和动态语言以及Web Services等。
2)Glassfish开源应用服务器将继续作为Java EE的RI,Weblogic将继续作为企业级的应用服务器。
3) GlassFish将继续保持现有的发布方式。
Java ME:
1)统一的JavaME和Java SE的API。
2)优化Java ME,包括启动和运行的性能,新的用户交互模式,能源消耗优化,对javaFX Mobile的优化,移植到IP TV,blue Ray和其他嵌入设备。
3) 保持对运营商和设 ......
甲骨文已经完成了对SUN公司的收购,于1月27日发布了对Sun各项业务的整合规划。总体上说,Oracle要成为软硬件一体化的整体解决方案的厂商。 以下就其对备受关注的Java方面的策略做个介绍。
Java SE:
1)推出JDK SE 7, 它将包括多个新的功能,如提高开发人员的效率,提供高性能,对多核芯片的支持等。
2)Sun的HotSpot和Bea的JRockit都是策略性虚拟机:融合两者的最佳特性,提供管理和实时监控功能,在hypervisor这层中运行 本地虚拟机代码,支持多核CPU NUMA架构的编译优化等。
3) 继续支持多种操作系统平台。
Java EE:
1)继续发展Java EE的参考实现(RI,reference implementation), 进一步对某些重要的方向,如开放标准的模块化,新的轻量级服务器配置,RIA和用户界面,脚本和动态语言以及Web Services等。
2)Glassfish开源应用服务器将继续作为Java EE的RI,Weblogic将继续作为企业级的应用服务器。
3) GlassFish将继续保持现有的发布方式。
Java ME:
1)统一的JavaME和Java SE的API。
2)优化Java ME,包括启动和运行的性能,新的用户交互模式,能源消耗优化,对javaFX Mobile的优化,移植到IP TV,blue Ray和其他嵌入设备。
3) 保持对运营商和设 ......
1.Collection List Set Map 区别记忆
这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。
有序否
允许元素重复否
Collection
否
是
List
是
是
Set
AbstractSet
否
否
HashSet
TreeSet
是(用二叉树排序)
Map
AbstractMap
否
使用key-value来映射和存储数据,Key必须惟一,value可以重复
HashMap
TreeMap
是(用二叉树排序)
List 接口对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器 中,并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内 部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作。在具体应用时可以根据需要自由选择。前面说的Iterator只能对容器进行向前遍历,而 ListIterator则继承了Iterator的思想,并提供了对List进行双向遍历的方法。
Set接口也是 Collection的一种扩展,而与List不同的时,在Set中的对象元素不能重复,也就是说你不能把同样的东西两次放入同一个Se ......
用java创建Xml的4大类:
Element:节点类
Attribute属性类
Document:指的就是文档类
XMLOutput:输出类
此类是用java建立一个xml文件
public class TestJdom {
//创建XML(模型)dom
public static void main(String[] args) {
createXmlDom();
}
public static void createXmlDom(){
Element beans=new Element("beans");
Element bean=new Element("bean");
Attribute id=new Attribute("id","dataSource");
Attribute clazz=new Attribute("class","org.apache.commons.dbcp.BasicDataSource");
bean.setAttribute(id);
bean.setAttribute(clazz);
beans.addContent(bean);
&n ......
用java创建Xml的4大类:
Element:节点类
Attribute属性类
Document:指的就是文档类
XMLOutput:输出类
此类是用java建立一个xml文件
public class TestJdom {
//创建XML(模型)dom
public static void main(String[] args) {
createXmlDom();
}
public static void createXmlDom(){
Element beans=new Element("beans");
Element bean=new Element("bean");
Attribute id=new Attribute("id","dataSource");
Attribute clazz=new Attribute("class","org.apache.commons.dbcp.BasicDataSource");
bean.setAttribute(id);
bean.setAttribute(clazz);
beans.addContent(bean);
&n ......
java里面删除文件夹时候,如果该文件夹下有内容,即其下包含的有文件或文件夹,当你执行
java.io.File.delete(File file)方法时候,不能成功删除,那么如果我们想成功删除,该怎么办的,那就要先删除该文件夹下面的内容,代码如下:
/**
* 删除文件或文件夹
* @param file
*/
public static void deleteFile(File file){
if(file.exists()){
try{
//如果是文件夹,先删除当前文件夹下的所有文件或文件夹
if(file.isDirectory()){
//获得当前文件夹下的所有文件或文件夹
File[] files = file.listFiles();
//当前文件夹不为空
if(files.length > 0){
for(File aFile:files){
//递归调用
deleteFile(aFile);
}
}
}
//删除文件或文件夹
file.delete();
}
catch(Exception e){
e.printStackTrace();
}
}
}
......