如何使用java代码从具有liferay portlet的网站下载文件

时间:2013-10-31 10:35:56

标签: java liferay portlet

我正在尝试从网站下载文件,此网站有一个生命光线服务器 我一直在阅读很多,但所有描述如何配置服务器而不是如何阅读,我看到的所有示例都有HTTPServletRequest需要请求输入我如何将URL传输到请求,从哪里开始至少 。 换句话说:我有网址,在网页中我选择了一个日期,下载就像生成一样,怎样才能把它记下来? 我试过这个:

HttpServletRequest request = PortalUtil.getHttpServletRequest(PortletRequest);

所以如何将我的URL链接到PortletRequest

2 个答案:

答案 0 :(得分:0)

如果您有下载的URL,您唯一需要的是针对该URL执行客户端请求。

首先,您应该尝试确保您拥有的网址是为您提供预期结果的网址,然后尝试将其粘贴到新的浏览器窗口中并验证下载是否已开始。

然后,如果您想通过Java执行该下载,您可以非常轻松地使用URLURLConnection(本例中为HttpURLConnection)类:

String urlString = "...";   // Your URL
URL url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
if (conn.getResponseCode() == 200) {
   InputStream stream = conn.getInputStream();
   // Read the data from the stream
}

您也可以使用Apache HTTP Client执行相同操作。

注意:Liferay在内部使用PortalUtil.getHttpServletRequest(...),如果您正在进行客户请求,则无法访问该API。

答案 1 :(得分:0)

如果您正在编写portlet,那么按设计您无法访问HttpServletRequest

您可以做的是利用portlet的“资源服务”生命周期阶段。在那里,您可以访问ResourceRequestResourceResponse对象。这些对象的行为几乎类似于HttpServletRequest/-Response对象

由于您没有命名您正在使用的框架:javax.portlet.GenericPortlet.serveResource()是您要在纯JSR-286 API中覆盖的方法。

在UI方面,<portlet:resourceURL/>将为您的portlet的资源处理方法提供URL。

这应该为您提供足够的谷歌食物,以找到有关如何实施不同生命周期阶段的教程 - 我无法判断您需要的详细程度。请注意,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
     }