Servlets Can';在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

我编写了一个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();
    }

}
包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>