我使用Tomee創建HTTP服務器,我將jasper報告文件(.jasper
)放在webapp
目錄中。如果我在瀏覽器中訪問http://localhost:8080/test.jasper
,瀏覽器將提示下載文件。如何爲HTTP服務器提供.jasper文件?
在我的java項目中,我創建簡單的代碼來訪問該鏈接,然後預覽報表。我請求async-http-client庫。
DefaultAsyncHttpClient client = new DefaultAsyncHttpClient();
BoundRequestBuilder brb = client.prepareGet("http://localhost:8765/qa/test.jasper");
Future<InputStream> f = brb.execute(new AsyncCompletionHandler<InputStream>() {
@Override
public InputStream onCompleted(Response resp) {
try {
String[][] data = {{"Jakarta"},{"Surabaya"},{"Solo"},{"Denpasar"}};
String[] columnNames = {"City"};
DefaultTableModel dtm = new DefaultTableModel(data, columnNames);
Map<String,Object> params = new HashMap<>();
JasperPrint jPrint = JasperFillManager.fillReport(
resp.getResponseBodyAsStream(),
params,
new JRTableModelDataSource(dtm)
);
JasperViewer jpView = new JasperViewer(jPrint,false);
jpView.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jpView.setSize(800, 600);
jpView.setLocationRelativeTo(null);
jpView.setVisible(true);
} catch (JRException ex) {
System.out.println(ex.getMessage());
}
return resp.getResponseBodyAsStream();
}
});
從我上面的代碼,我得到一個錯誤Error loading object from InputStream
正常,我可以使用
InputStream input = MainContext.class.getResourceAsStream(filename);
但我想,以取代HTTP請求的文件輸入流(流過)。
我究竟能爲.jasper
文件提供http服務器......?從腐敗InputStream
來到
通常,不提供'.jasper'文件。相反,在服務器端執行'.jasper'文件後,可以使用'.pdf','.csv'或其他輸出文件。除非您希望用戶下載'.jasper'文件,否則將其加載到Jaspersoft Studio(意味着要下載並安裝它),並自行運行(並管理數據庫連接)? –
是的,我希望用戶下載'.jasper'文件,通過我創建的java應用程序,用戶下載報告後,報告將顯示在用戶定期報告。 – yuda