Java 浏览器中显示多个PDF文件1 x 1
我有一个页面,我将显示由用户上传的文件列表(pdf文件)。 现在,我想要实现的是在这个列表下一次显示1个pdf文件 第一部分,我将调用我的控制器方法并获取列表,然后在我的jsp页面中填充该表。 第二部分我不确定,因为我应该如何处理它 返回列表的第一个方法:Java 浏览器中显示多个PDF文件1 x 1,java,javascript,spring,spring-mvc,iframe,Java,Javascript,Spring,Spring Mvc,Iframe,我有一个页面,我将显示由用户上传的文件列表(pdf文件)。 现在,我想要实现的是在这个列表下一次显示1个pdf文件 第一部分,我将调用我的控制器方法并获取列表,然后在我的jsp页面中填充该表。 第二部分我不确定,因为我应该如何处理它 返回列表的第一个方法: @RequestMapping("/tasks/viewDocuments.do") public ModelAndView viewDocuments(@RequestParam("reqId") Integer reqId) {
@RequestMapping("/tasks/viewDocuments.do")
public ModelAndView viewDocuments(@RequestParam("reqId") Integer reqId) {
try{
log.info("inside viewDocuments, reqId: "+reqId);
//get the file details and show the list on page.
return new ModelAndView("tasks/viewDocumentsHTML" , "wrapper" ,"" );
}catch (Exception e) {
log.info("error in viewDocuments: "+e);
return new ModelAndView ("xstream", "response","system.error");
}
}
返回pdf的第二个方法:
@RequestMapping("/tasks/showDocumentsInIframe.do")
public void showDocumentsInIframe(HttpServletRequest request, HttpServletResponse response) {
try{
log.info("inside showDocumentsInIframe");
ServletOutputStream out = response.getOutputStream();
String fileURL = "http://www.saronicferries.gr/content/pdfFiles/sample.pdf";
URL url = new URL(fileURL);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
log.debug("length: "+connection.getContentLength());
BufferedInputStream bufferedInputStream = new BufferedInputStream(connection.getInputStream());
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(out);
int bytesRead = 0;
byte[] buffer = new byte[1024];
response.setContentLength(connection.getContentLength());
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline; filename=help.pdf");
response.setHeader("Cache-Control", "cache, must-revalidate");
response.setHeader("Pragma", "public");
while ((bytesRead = bufferedInputStream.read(buffer)) != -1) {
bufferedOutputStream.write(buffer, 0, bytesRead);
}
log.info("finishing showDocumentsInIframe");
bufferedOutputStream.flush();
}catch (Exception e) {
log.info("error in showDocumentsInIframe: "+e);
//return new ModelAndView ("xstream", "response","system.error");
}
}
jsp页面:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="sec"
uri="http://www.springframework.org/security/tags"%>
<link type="text/css" rel="stylesheet"
href="<c:url value="/public/css/jquery.css"/>"></link>
<link type="text/css" rel="stylesheet"
href="<c:url value="/public/css/portal_style.css"/>"></link>
<script type="text/javascript"
src="<c:url value="/public/js/jquery/jquery-1.3.min.js"/>"></script>
<form>
<table width="100%" cellspacing="0" cellpadding="0" border="1"
style="display: inline;">
<tr class="portlet-table-header">
<td align="left">Sr. No.:</td>
<td align="left">File Name:</td>
<td align="left"></td>
<td align="left"></td>
</tr>
<c:forEach var="workList" items="${wrapper.voList}">
<tr class="portlet-table-body">
<td>${workList.srNo}</td>
<td>${workList.fileName}</td>
<td><a href="javascript:taskDetails.viewDocuments()">View</a></td>
<td><a href="javascript:taskDetails.removeDocuments()">Remove</a></td>
</tr>
</c:forEach>
</table>
</form>
<br><br>
<embed id="pdfViewer" src="/tasks/showDocumentsInIframe.do" width="500" height="375" />
高级职员编号:
文件名:
${workList.srNo}
${workList.fileName}
对第二个方法的调用永远不起作用。
我做错了什么?您是说
showDocumentsInIframe()
调用不起作用吗?你有没有试过使用某种网络流量分析器(fiddler、firebug、chrome的开发工具)来查看从浏览器发送和返回的内容?它不起作用。不,我还没有用firebug测试过。我有日志记录,但日志没有出现在我的日志文件中。无法查看完整代码、浏览它或查看日志,我必须假设您的意思是该方法正在运行,但没有执行您希望它执行的操作。我建议使用建议的工具之一(或者其他工具,如WireShark,如果您愿意的话)查看服务器的响应结果。你可能会得到一个400,在这种情况下,我会说你有一个问题,你的客户没有设置正确的接受头。因为有东西爆炸了,你可能会得到500分。你可能会得到一个402:找不到。除非你仔细看,否则无法判断。谢谢你的投入。我将使用firebug进行检查。因此,再次说明需要查找的内容:HTTP响应代码和响应负载(我是否获得了200 OK或其他一些我不期望的响应代码,我是否获得了HTML/JSON/XML而不是预期的PDF)。有关返回代码,请参阅W3C的页面: