我编写了一个servlet,它从客户端获取一个图像的名称,并通过将其转换为字节数组将其显示给客户端。之后当我尝试打印一些文本时显示图像,我无法这样做。即使在使用PrintWriter
之后也无法打印文本。
我正在使用jboss应用服务器来部署它。
这是servlet - Image.java
:
package javaserv.image;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.ImageIcon;
public class Image extends HttpServlet {
private static final long serialVersionUID = 1L;
public Image()
{
super();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String imagename = request.getParameter("imagename");
File fileimage = new File("C:/langs/projects/javaserv/"+imagename+".jpg");
byte [] imagearray;
imagearray = new byte[(int)fileimage.length ()];
FileInputStream fis = new FileInputStream (fileimage);
fis.read (imagearray);
response.setContentType("image/jpeg");
response.setContentLength((int)fileimage.length ());
ServletOutputStream out = response.getOutputStream();
int i=0;
while(i<imagearray.length)
{
out.write(imagearray[i]);
++i;
}
out.flush();
out.close();
out = response.getOutputStream();
response.setContentType("text/html");
out.println("<html><body>");
out.println("here is your image");
out.println("<p>");
out.println("</html></body>");
out.close();
}
}
“imagename”是客户输入的图像的名称
答案 0 :(得分:4)
您可以将JPEG写入out,或 HTML,而不是两者。
您的代码将JPEG写入输出,关闭输出流,然后再次尝试打开它以编写一些HTML。
如果要在HTML页面上显示synamic图像,则应该为图像使用servlet,并为HTML使用JSP页面。
答案 1 :(得分:1)
您基本上需要让客户端触发两个 HTTP请求。一个到HTML,后者又包含一个<img>
元素,让webbrowser自动向图像文件发送另一个HTTP请求。
首先创建一个HTML页面,如下所示:
<!DOCTYPE html>
<html lang="en">
<head>
<title>An image</title>
</head>
<body>
<p>Here is your image</p>
<p><img src="images?imagename=foo.gif"></p>
</body>
</html>
我假设您的图片servlet正在url-pattern
/images
上进行聆听。最后,只需向最终用户提供HTML页面的URL(顺便说一下,也可以是JSP页面),而不是图像的URL。然后,最终用户将检索包含一些文本和图像的HTML页面。
那就是说,你的图像服务器老实说在速度,内存效率和资源处理方面写得很差。我建议您查看this basic example如何正确执行此操作。
答案 2 :(得分:0)
而不是编写另一个servlet来发回图像。您只需在图像路径前添加Web应用程序名称。例如 您的网络应用程序名称或上下文名称为“MyWebApp” 您的图像目录将类似于MyWebApp / allimages
然后是图像标记的样子
img src ='MyWebApp / allimages / imagename.png'id =''alt =''
答案 3 :(得分:-1)
您可以内嵌图像,然后浏览器仅发出一个请求。
__getattr__