我正在执行一项任务,我必须提供一个用户登录名,之后他将被定向到一个页面,他可以在该页面上上传图像,并且他以前的所有 + 新图像都将显示在下面的表格中。所以我的应用程序的结构是这样的......
(为了清楚起见,修剪了大部分代码)
允许上传和显示图像的 JSP 文件
<p>Please select an image file to upload(Max file size 1 MB)</p>
<%
Integer userId = 0;
userId = (Integer) session.getAttribute("userId");
%>
<%
String errorMessage = (String) request.getAttribute("error");
if (errorMessage != null) {
out.print("<h4> " + errorMessage + "</h4>");
}
%>
<form action="imageupload" enctype="multipart/form-data" method="post">
<br /> <input type="file" name="uploader" id="uploader" /> <br /> <br />
<input type="submit" /> <input type="button"
value="clear" onClick="clear()" />
</form>
<br />
<h4>Uploaded Images</h4>
<br />
<table width="80%">
<tr>
<th>S No.</th>
<th>Name</th>
<th>size</th>
<th>Preview</th>
<th>Actions</th>
</tr>
<%
UserImagesDAOImplementation userImages = new UserImagesDAOImplementation();
List<Image> images = (List<Image>) userImages.getUserImages(userId);
for (Image image : images) {
%>
<tr>
<td><%=image.getSn()%></td>
<td><%=image.getImageName()%></td>
<td><%=image.getSize()%></td>
<td><% session.setAttribute("image",image.getImage() ); %><img src="toimage" height="100px" width="100px" /></td>
<td><img src="img/edit.png" /> <img src="img/url.png" /></td>
</tr>
<%
}
%>
</table>
<br />
Total space used: <%= (userImages.getSizeUsage(userId)/1024) %> KB / 10 MB
返回图像的“toimage”servlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
Byte[] image = (Byte[]) session.getAttribute("image");
int len = image.length;
byte[] imageData = new byte[len];
for(int i=0; i < len; i++) {
imageData[i] = image[i];
}
response.setContentType("image/jpg");
response.getOutputStream().write(imageData);
response.getOutputStream().flush();
response.getOutputStream().close();
}
我的问题是它在所有表格行中显示列表中的最后一个图像,并且在上传其他图像后,它会在每一行中显示该新图像。
我对我的网站设计不是很有信心,但这是我第一次使用 JSP。我决定在 JSP 中获取图像列表,因为稍后我将不得不对其执行更多操作。我猜问题出在设置会话变量或最终调用的 src servlet 中。不管是什么,有人能解释一下这个设计中典型的事件流程吗?
编辑:在“toimage”servlet 中放置一个打印语句证明它只被调用一次。那么如何让 JSP 循环每次都调用图像 src 呢?