我正在創建一個用戶特定的文件。這個文件基本上是一個結果csv,它是用用戶下載或不用的選項創建的。當用戶離開頁面或結束他們的會話時,我希望能夠刪除此文件。處理這個問題的最好方法是什麼?在Wicket中存儲用戶特定文件的最佳方式是什麼?
目前我正在使用Java的File類。
謝謝!
我正在創建一個用戶特定的文件。這個文件基本上是一個結果csv,它是用用戶下載或不用的選項創建的。當用戶離開頁面或結束他們的會話時,我希望能夠刪除此文件。處理這個問題的最好方法是什麼?在Wicket中存儲用戶特定文件的最佳方式是什麼?
目前我正在使用Java的File類。
謝謝!
你不必寫在首位的文件。即時創建內容並將其流式傳輸回客戶端。 Wicket在org.apache.wicket.request.resource
包中有幾個類來幫助解決這個問題。
作爲一個起點,看Wicket 6 resource management和Wicket 1.5 Mounting resources
你基本上在WicketApplication.init()裝入資源:
mountResource("somePath/${param1}/${param2}", new SomeResourceReference());
比起SomeResourceReference:
public class SomeResourceReference extends ResourceReference {
@Override
public IResource getResource() {
return new SomeResource();
}
}
而且最後在SomeResource:
public class SomeResource extends AbstractResource {
@Override
public AbstractResource.ResourceResponse
newResourceResponse(Attributes attributes) {
// get the parameters
PageParameters parameters = attributes.getParameters();
final String param1 = parameters.get("param1").toStringObject();
AbstractResource.ResourceResponse response
= new AbstractResource.ResourceResponse();
response.setContentType("application/CSV");
response.setCacheDuration(Duration.NONE);
response.setCacheScope(WebResponse.CacheScope.PRIVATE);
response.setContentDisposition(ContentDisposition.INLINE);
response.setWriteCallback(new AbstractResource.WriteCallback() {
@Override
public void writeData(final Attributes attributes) throws IOException {
// create your data here
attributes.getResponse().write(dataAsString);
}
});
return response;
}
}
Wicket不控制銷燬會話。這是您正在使用的servlet容器的關注點。
如果你想創建檢票文件並刪除當會話被銷燬或用戶想註銷的文件,它有兩個部分:
用戶註銷(在Wikcet) 存儲的文件路徑或WebSession(檢票)文件引用 覆蓋您WebSession或AutheticatedWebSession的方法無效(),請參閱http://ci.apache.org/projects/wicket/apidocs/6.x/org/apache/wicket/protocol/http/WebSession.html#invalidate%28%29
會議摧毀 存儲的文件路徑或文件引用到容器會話和W禮貌聽衆並將其添加到您的servlet上下文中(例如,使用web.xml文件的tomcat)。 見http://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpSessionListener.html
不錯,這工作得很好。我重載了onValidate()作爲suggessted。我也會嘗試伯特的建議。謝謝! – eaglei22
謝謝伯特!我會閱讀給出的參考資料,看看我能否實現這一點。我可能會回來一些更多的問題。 – eaglei22