如果您正在编写一个 portlet,根据设计,您无法访问HttpServletRequest
.
您可以做的是利用portlet 的“资源服务”生命周期阶段。在那里你可以访问一个ResourceRequest
和ResourceResponse
对象。这些对象的行为几乎就像一个HttpServletRequest/-Response
对象
由于您没有命名您正在使用的框架:javax.portlet.GenericPortlet.serveResource()
是您想要在纯 JSR-286 API 中覆盖的方法。
在 UI 方面,<portlet:resourceURL/>
将为您的 portlet 的资源处理方法提供 URL。
这应该为您提供足够的 google-food 以找到有关如何实现不同生命周期阶段的教程 - 我无法判断您需要的详细程度。请注意,Liferay 有很多示例 portlet,您可以将它们用作示例代码的来源。
编辑:根据您在下面的评论,让我给您一些伪代码(只是在这里输入,从未编译/运行):
在 jsp 前端,例如 view.jsp:
<a href="<portlet:resourceURL/>">Download File</a>
然后,在您的 portlet 中,假设您正在以一种或另一种方式实现 javax.portlet.GenericPortlet(例如,间接通过 Liferay 的 MVCPortlet 或任何其他超类):
public class MyPortlet extends GenericPortlet {
....
@Override
public void serveResource(ResourceRequest request, ResourceResponse response) {
// implement the file streaming here,
// use ResourceResponse the way you find illustrated
// in samples for HttpServletResponse
}