我的代码是上传图片并将图片保存到我的服务器,但我需要在我的jsp页面中显示图片。
用于上传图片的jsp
uploadImage.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title>Image Upload</title></head>
<body>
<form action="UploadImage" method="post" enctype="multipart/form-data"
name="productForm" id="productForm"><br><br>
<table width="400px" align="center" border=0 style="background-color:ffeeff;">
<tr>
<td align="center" colspan=2 style="font-weight:bold;font-size:20pt;">
Image Details</td>
</tr>
<tr>
<td align="center" colspan=2> </td>
</tr>
<tr>
<td>Image Link: </td>
<td>
<input type="file" name="file" id="file">
<td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="Submit" value="Submit"></td>
</tr>
<tr>
<td colspan="2">
</td>
</tr>
</table>
</form>
</body>
</html>
Servlet
UploadImage
public class UploadImage extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 2082405235440894340L;
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
File filenameImg;
List<FileItem> items = null;
try {
items = new ServletFileUpload(new DiskFileItemFactory())
.parseRequest(request);
} catch (FileUploadException e) {
throw new ServletException("Cannot parse multipart request.", e);
}
for (FileItem item : items) {
if (item.isFormField()) {
// Process regular form fields here the same way as
// request.getParameter().
// You can get parameter name by
item.getFieldName();
// You can get parameter value by item.getString();
} else {
try{
// Process uploaded fields here.
String filename = FilenameUtils.getName(item.getName());
// Get filename.
String path = GetWebApplicationPathServlet.getContext().getRealPath("/images");
File file = new File(path,filename);
//File file = new File("C:\\", filename);
// Define destination file.
item.write(file);
System.out.println("filename: "+filename);
System.out.println("file: "+file);
request.setAttribute("image", file);
filenameImg = file;
// Write to destination file.
// request.setAttribute("image", filename);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
// Show result page.
System.out.println("request"+request.getAttribute("image"));
response.setContentType("image/jpeg");
//request.getRequestDispatcher("result.jsp").forward(request, response);
String nextJSP = "/result.jsp";
RequestDispatcher dispatcher = getServletContext()
.getRequestDispatcher(nextJSP);
dispatcher.forward(request, response);
}
}
result.jsp中
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%=request.getParameter("image")%>
<img src="<%=request.getParameter("image")%>">
</body>
</html>
的&LT;%=用request.getParameter( “图像”)%&GT; 在result.jsp页面中返回为null
帮助
答案 0 :(得分:9)
我正在考虑您在服务器上的某处存储图像文件 -
<context root>/resources/image/someImage.jpg
之类的某个位置,那么您可以提供该路径(路径应位于应用程序内部,可通过浏览器使用您的上下文rrot访问)image src属性和浏览器将指向该图像。e.g。
<image src="context root/displayServlet?image=someImage.jpg">
servlet代码可能看起来像 -
编辑 - 有关更好的代码,请参阅How to retrieve and display images from a database in a JSP page?
try{
String fileName = request.getParameter("image");
FileInputStream fis = new FileInputStream(new File("d:\\"+fileName));
BufferedInputStream bis = new BufferedInputStream(fis);
response.setContentType(contentType);
BufferedOutputStream output = new BufferedOutputStream(response.getOutputStream());
for (int data; (data = bis.read()) > -1;) {
output.write(data);
}
}
catch(IOException e){
}finally{
// close the streams
}
您可以改进此代码,我只是举个例子。
答案 1 :(得分:2)
<img src="<%=request.getParameter("image")%>">
首先src
img
标记只将图片路径视为字符串,因此您无法在其中传递整个图像。
现在您可以做的是: - 当您在服务器上传图片时,请不要在请求中保存/传递整个图片文件,而只是在您上传图片的请求中添加图片路径。您的代码路径为path + *file separator* + filename
。将它传递给img标签的src,它就可以了。此处文件分隔符可以是"/"
或"\\"
。
希望这有帮助。
正如BalusC在评论中所建议的那样,最好使用<img src="${param.image}" />
。
答案 2 :(得分:1)
你采取的方法有两个错误。首先,在上面的servlet代码中,您编码就像下载图像文件一样(您已将内容类型设置为图像。
其次,您无法将图像文件与响应相关联。不是通过图像参数或通过流。
现在,既然你已经混淆了两种方法......你需要先确定你需要什么。根据您的解释,我了解您正试图在result.jpg中显示上传的图像。在这种情况下,您无需发送内容类型设置的图像。在result.jsp中,img标记需要显示图像的路径。因此,您需要将图像的路径设置为“图像”属性作为响应。
response.setAttribute("image", imagepath);
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP);
dispatcher.forward(request, response);
图像路径应该是访问图像的一些有效URL。在result.jsp中,您需要:
request.getParameter("image");
获取图像。这是如何:
<img src='<%=request.getParameter("image")%>'>
答案 3 :(得分:0)
在您的servlet中设置一个请求属性,该属性将图像的完整路径返回给JSP。
String fullpath = path + File.separator + filename
request.setAttribute("fullpath",fullpath);
您已经将请求转发给JSP。
所以,现在使用
获取属性<%
String path = "";
if(request.getAttribute("fullpath")!=null)
path = request.getAttribute("fullpath").toString();
%>
在JSP中然后使用该路径显示图像
<img src='<%=path%>'>
答案 4 :(得分:0)
request.setAttribute("image", file.getPath());
然后你需要这样做:
request.getAttribute("image")