Servlets Can';在servlet中显示图像后是否显示文本?
我编写了一个servlet,它从客户端获取图像的名称,并通过将其转换为字节数组来显示给客户端。现在显示图像后,当我尝试打印某些文本时,我无法这样做。即使使用Servlets Can';在servlet中显示图像后是否显示文本?,servlets,Servlets,我编写了一个servlet,它从客户端获取图像的名称,并通过将其转换为字节数组来显示给客户端。现在显示图像后,当我尝试打印某些文本时,我无法这样做。即使使用PrintWriter,它也无法打印文本 我正在使用jboss应用服务器来部署它 下面是servlet-Image.java: package javaserv.image; import java.io.File; import java.io.FileInputStream; import java.io.IOException; im
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();
}
}
包javaserv.image;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.IOException;
导入java.io.PrintWriter;
导入javax.imageio.imageio;
导入javax.servlet.ServletException;
导入javax.servlet.ServletOutputStream;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入javax.swing.ImageIcon;
公共类映像扩展HttpServlet{
私有静态最终长serialVersionUID=1L;
公众形象()
{
超级();
}
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException
{
字符串imagename=request.getParameter(“imagename”);
File fileimage=新文件(“C:/langs/projects/javaserv/”+imagename+”.jpg”);
字节[]图像数组;
imagearray=新字节[(int)fileimage.length()];
FileInputStream fis=新的FileInputStream(fileimage);
fis.read(图像阵列);
response.setContentType(“图像/jpeg”);
setContentLength((int)fileimage.length());
ServletOutputStream out=response.getOutputStream();
int i=0;
而(i您可以将JPEG文件写入输出,也可以将HTML文件写入,但不能同时写入两者
您的代码将JPEG写入输出,关闭输出流,然后再次尝试打开它以写入一些HTML
如果要在HTML页面上显示synamic图像,应使用servlet显示图像,使用JSP页面显示HTML。您可以将JPEG写入输出,也可以将HTML写入,但不能同时写入两者
您的代码将JPEG写入输出,关闭输出流,然后再次尝试打开它以写入一些HTML
如果你想在HTML页面上显示一个synamic图像,你应该为图像使用一个servlet,为HTML使用一个JSP页面。你基本上需要让客户端触发两个HTTP请求。一个是对HTML的请求,而HTML又包含
我假设您的图像servlet正在侦听/images
的url模式。最后,只需将HTML页面的url(顺便说一下,也可以是JSP页面)提供给最终用户,而不是图像的url。最终用户将检索包含一些文本和图像的HTML页面
也就是说,老实说,你的imageservlet在速度、内存效率和资源处理方面写得很差。我建议你看看如何正确地完成它。你基本上需要让客户端触发两个HTTP请求。一个是HTML请求,而HTML又包含一个
我假设您的图像servlet正在侦听/images
的url模式。最后,只需将HTML页面的url(顺便说一下,也可以是JSP页面)提供给最终用户,而不是图像的url。最终用户将检索包含一些文本和图像的HTML页面
也就是说,老实说,你的imageservlet在速度、内存效率和资源处理方面写得很差。我建议你看看如何正确地完成它。你可以内联图像,然后浏览器只执行一个请求
<!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>
您可以内联图像,然后浏览器只执行一个请求
<!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>