我正在尝试从网站下载文件,此网站有一个生命光线服务器
我一直在阅读很多,但所有描述如何配置服务器而不是如何阅读,我看到的所有示例都有HTTPServletRequest
需要请求输入我如何将URL传输到请求,从哪里开始至少 。
换句话说:我有网址,在网页中我选择了一个日期,下载就像生成一样,怎样才能把它记下来?
我试过这个:
HttpServletRequest request = PortalUtil.getHttpServletRequest(PortletRequest);
所以如何将我的URL链接到PortletRequest
答案 0 :(得分:0)
如果您有下载的URL,您唯一需要的是针对该URL执行客户端请求。
首先,您应该尝试确保您拥有的网址是为您提供预期结果的网址,然后尝试将其粘贴到新的浏览器窗口中并验证下载是否已开始。
然后,如果您想通过Java执行该下载,您可以非常轻松地使用URL
和URLConnection
(本例中为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的“资源服务”生命周期阶段。在那里,您可以访问ResourceRequest
和ResourceResponse
对象。这些对象的行为几乎类似于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
}