我从绝对路径中查看了BalusC的自定义下载servlet代码(参见http://balusc.blogspot.com/2007/07/fileservlet.html#FileServletServingFromAbsolutePath)。我不是Java Web开发人员专家,所以如果有人可以解释这部分代码,我会很高兴
private String filePath;
// Actions ------------------------------------------------------------------------------------
public void init() throws ServletException {
// Define base path somehow. You can define it as init-param of the servlet.
this.filePath = "/files";
// In a Windows environment with the Applicationserver running on the
// c: volume, the above path is exactly the same as "c:\files".
// In UNIX, it is just straightforward "/files".
}
什么时候调用init方法?为什么我们需要在init方法中设置filePath?
我有一个XHTML(Mojarra + IceFaces),类似下面的代码,效果很好。我的页面仅缺少下载outputLink
标记
<ice:tree id="tree"
value="#{treeBean.model}"
var="item"
hideRootNode="false"
hideNavigation="false"
>
<ice:treeNode>
<f:facet name="icon">
<ice:panelGroup style="display: inline">
<h:graphicImage value="#{item.userObject.icon}" />
</ice:panelGroup>
</f:facet>
<f:facet name="content">
<ice:panelGroup style="display: inline-block">
<ice:outputLink value="#{item.userObject.filePath}">
<ice:outputText value="#{item.userObject.fileName}"/>
</ice:outputLink>
</ice:panelGroup>
</f:facet>
</ice:treeNode>
</ice:tree>
在我的Backing bean中,我有两个字段fileName
(只是扩展名为file.jpeg的文件名)和filepath
(服务器中文件的ABSOLUTE路径)。最后我想用自定义服务器下载文件,我该怎么做?
干杯,
更新
让我们说mi base-dir是/SRC
,在那个目录下我有我所有的xhtml页面和WEB-INF和META-INF,并且我有一个名为 dataFiles <的目录/ strong>在dataFiles下我有以下结构
--dataFiles
|----Enterprise1
| |--User1
| | |--goodFiles
| | | |--ok.txt
| | |--badFiles
| | |--bad.txt
| |--User2
| | |--goodFiles
| | | |--ok.txt
| | |--badFiles
| | |--bad.txt
|----Enterprise2
|--User1
| |--goodFiles
| | |--ok.txt
| |--badFiles
| |--bad.txt
|--User2
|--goodFiles
| |--ok.txt
|--badFiles
|--bad.txt
我是如何用IceFaces渲染树的,我只是在支持bean中有文件名(即ok.txt或bad.txt),但我无法弄清楚如何下载链接所指向的文件树。
答案 0 :(得分:0)
好吧终于搞定了。
首先感谢BalusC,这里有一些帖子帮助我理解但有人删除了它们。无论如何,这是我所学到的。
这就是我所要做的一切!
在问题的示例中,servlet的init方法中的filePath变量将指向绝对路径,例如 C:\ myApp \ dataFiles 然后在xhtml中将使用类似
的方式调用servlet<ice:outputLink value="dl/myPath/#{myBean.fileName}>
<ice:outputText value="#{myBean.fileName}"/>
</ice:outputLink>
注1:outputLink值的第一部分为 dl / ,这是因为要下载的servlet的url-pattern映射到它
注2:在outputLink中, myPath 的值可以是 dl / Enterprise1 / User1 / file1.ext
干杯