JAVA servlet api 中已经有完整的文件下载方式了,你可以通过编写一个servlet来完成一个文件的下载
代码可以是这样
String fileName = xxxx;
resp.reset();//response 就是 httpResponse了,这里要将response清一下,保证下面方法调用的条件满足
resp.setBufferSize(xxxx * xxxx); //一个合适的buffer大小,根据实际的情况填写,大意味着写的次数少
resp.setContentType("APPLICATION/OCTET-STREAM");//根据实际情况写传输的数据类型
resp..addHeader("Content-Disposition", "attachment; filename=\""
+ fileName + "\""); //相当于下载的时候的文件名字
ServletContext sc = req.getSession().getServletContext();
//相对于应用在 服务器部署的目录下得文件地址,当然你可以使用其他的方式获取这个stream
InputStream in = sc.getResourceAsStream(xxxxx);
OutputStream out = resp.getOutputStream();
byte[] bufferBytes = new byte[xxxx * xxxx];
int readLength = 0;
//每次读一个bufferBytes大小的数据,然后当读到没有时就不读了
while((readLength = in.read(bufferBytes)) != -1){
out.write(bufferBytes, 0, readLength);
out.flush();//强制吧这个out中的buffer内容都写出去,也就是到目标地
}
in.close();
out.close();
所以在wicket中也可以这样写呢,不过我在看wicket的api时,没发现直接支持这样stream部分写的api,或许是不够仔细
那再wicket中,因为每一个request的处理,在wicket中比较与servlet的实现复杂一些,增加了一些步骤。
wicket会根据request里面的参数,来决定这个request是属于什么类型,比如页面,或者behavior,以转换为某一类具体的requestTarget,然后这个requestTarget会再交给requestCycle,其实就是requestProcessor啦,处理,在requestProcessor处理的时候,会直接调用requestTarget中的response方法。厄,是不是很乱呢,回头我在画个图吧,这个wicket里面用到的设计模式那叫一个恶心。
总之简单的说,我重写了response类的write(InputStream)方法,不是仅一次的copy输入流到输出流,那样的话大小就限制了,而是参考上面的servlet下文件的方式来得。
然后在处理一个请求的时候,调用 RequestCycle.get().setResponse(Response)把我写的response子类设置到requestCycle的response变量里面,然后在调用RequestCycle.get()..setRequestTarget(new ResourceStreamRequestTarget(IResourceStream, String)设置用户想下载的文件流。
这样一个大号文件就可以通过wicket被用户下载到了
因为wicket的链接可以非常简单的做到session关联,无法通过拼链接被猜到,所以用wicket来做一个带有限制的下载还是比较简单和实用的。
分享到:
相关推荐
通过阅读《Apache Wicket Cookbook》,开发者不仅能掌握Wicket的基本概念和操作,还能学习到高级技巧和最佳实践,从而在实际项目中更有效地应用Apache Wicket框架。这本书是Wicket开发者的重要参考资料,无论是初学...
【压缩包子文件的文件名称列表】:`apache-wicket-6.16.0` 这个文件名表明包含的是Apache Wicket的6.16.0版本。这个版本可能包括了Wicket框架的源码、API文档、示例程序、库文件等。使用这个版本,开发者可以了解和...
7. **Jar包**:通常,"apache-wicket-1.5.11.zip"会包含Wicket库的JAR文件,这是运行Wicket应用所必需的。这些JAR文件包含Wicket框架的所有核心类和依赖库,开发者需要将它们添加到项目的类路径中。 8. **依赖管理*...
在`apache-wicket-1.3.0`压缩包中,你会找到Wicket框架的源代码、库文件、示例应用和其他相关资源。通过学习这些文件,开发者可以深入理解Wicket的工作原理,并将其应用于自己的Web项目中。同时,这个旧版本的框架也...
总之,“Apache Wicket演示文稿的源代码”是一个宝贵的资源,对于希望深入了解和掌握Wicket框架的开发者来说,它是不可或缺的学习材料。通过分析和实践其中的示例,你将能够更有效地构建健壮、高性能的Web应用程序。
这个示例项目对于初学者来说是宝贵的资源,可以用来学习如何在JEE环境中使用Apache Wicket。同时,对于有经验的开发者,它提供了实战案例,展示了两种技术如何协同工作,以解决实际问题。如果你想要提升你的Wicket和...
Apache Wicket 是一个开源的Java Web应用程序框架,它提供了一种模型-视图-控制器(MVC)架构,使得Web开发更加简洁和高效。在"apache-wicket-1.4.17"这个压缩包中,包含了Wicket 1.4.17版本的核心组件,但不包括jar...
**Wicket HelloWorld程序详解** Wicket是一个开源的Java Web应用程序框架,它强调组件化和模型-视图-控制器(MVC)的设计模式。这个“Wicket的Hello...对于初学者来说,理解这些基础知识是进一步学习Wicket的关键。
5. **JSR 168/286 支持**:Wicket 兼容portlet标准,可以无缝集成到portlet容器,如Apache Pluto或Liferay Portal。 **二、Wicket 开发流程** 1. **创建页面类**:在Wicket中,每个页面都有一个对应的Java类,类中...
【Apache Wicket与潮汐时间显示网站】 Apache Wicket 是一个开源的、基于组件的Java Web框架,用于...通过深入研究这些文件,可以学习如何使用 Wicket 实现类似的功能,以及如何与外部数据源交互来获取实时潮汐信息。
这个压缩子文件包含的是《Apache Wicket Cookbook》一书中的代码示例。这些代码实例为理论知识提供了实践支持,你可以直接在项目中使用或参考,从而加深对Wicket框架的理解。通过实际操作,你可以更好地掌握Wicket的...
### Wicket 1.4 开发手记:Hello World与环境配置 #### 一、引言 在《Wicket 1.4 开发手记》系列的第一篇文章中...对于想要学习Wicket或者寻求一种更加高效的Web开发方式的开发者来说,Wicket是一个值得尝试的选择。
- **Wicket库**:在你的项目pom.xml或build.gradle文件中添加Wicket的依赖。 - **Web服务器**:可以选择Tomcat、Jetty等Servlet容器来运行你的Wicket应用。 3. **Wicket核心概念** - **组件(Component)**:...
3.我为什么要学习Wicket? 3.1。我们都喜欢意大利面:-) ... 3.2。面向组件的框架 - 概述 3.3。面向组件的Web开发框架的优点 3.4。Wicket与其他面向组件的框架相比 威克特说“你好世界!” 4.1。Wicket分发和模块 4.2...
在【压缩包子文件的文件名称列表】中提到的"BachelorArbeitWicket"可能是指一个与Wicket相关的学士学位论文项目,或者是一个以Wicket为主题的开发案例集。这个名字暗示了这可能是一个深入研究或实现Wicket特性的项目...
通过深入研究《Wicket in Action》的源代码,你可以学习如何有效地利用这些概念和机制来构建高效、可维护的Java Web应用。源代码中的实例将帮助你理解如何将理论知识应用于实际项目,从而提升你的Wicket开发技能。
Wicket API 开发文档是专为开发者设计的指南,它涵盖了使用Apache Wicket框架进行Web应用开发的关键知识点。Apache Wicket是一个开源的Java框架,它采用组件模型来构建动态、互动的Web应用。Wicket的核心理念是...
综上所述,这些文件提供了有关Scala的upickle库和Java的Apache Wicket Web框架的信息。upickle提供了简洁的JSON处理功能,而Wicket则是一个强大的Web开发框架,其源码可以帮助开发者深入学习和定制这两个工具。开源...
这个压缩包"**Wicket-Bean-Validation-0.6.zip**"是针对Apache Wicket框架的一个扩展,名为Wicket-Bean-Validation,主要用于在Java环境中实现模型对象的验证。Wicket-Bean-Validation是基于JSR 303/JSR 349(Bean ...