显示多个内容类型httpresponse

时间:2012-10-09 06:03:40

标签: java httpclient httpresponse

我试图在同一页面中显示多种内容类型(text / html和image / png内嵌图像)。我有我们的磁盘/数据库中存储的图像内容和text / html内容以及所有标题信息(基本上假设我可以使用说InputStream读取text / html和image的内容)。我想创建一个包含text / html部分和内嵌图像部分的HttpResponse。我遇到了一些HttpClient / MultipartEntity的引用。所以我尝试了一个示例代码,使用MultipartEntity显示图像(保存在我的磁盘中),但我在页面中看到的只是乱码。我在构建路径中引用的jar是apache-mime4j-0.6.jar,httpcore-4.0.1.jar,httpmime-4.0.jar。我正在使用apache tomacat服务器。以下是示例代码。

import java.io.*;
import java.nio.charset.Charset;

import javax.servlet.*;
import javax.servlet.http.*;

import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.InputStreamBody;


public class MyHelloWorldServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
    {

        ServletOutputStream out = response.getOutputStream();
        MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE,null,Charset.forName("UTF-8"));
        //File file = new File("C:\\Users\\Public\\Pictures\\Sample Pictures\\test.msg");
        File file = new File("C:\\Users\\Public\\Pictures\\Sample Pictures\\Chrysanthemum.jpg");
        InputStream in1 = new FileInputStream(file);
        InputStreamBody fileBody1 = new InputStreamBody(new FileInputStream(file), "Chrysanthemum.jpg");
        entity.addPart("part1", fileBody1);
        entity.writeTo(out);

    }
}

也有人可以通过类似的方式告诉我是否可以添加多种内容类型和显示的部分?

1 个答案:

答案 0 :(得分:1)

也许我没有帮你。看起来你想要的是创建一个具有相同映射的servlet来处理不同类型的请求?我对吗?如果这是正确的,为什么不根据数据库中的标题更改内容类型。

            response.setContentType("image/jpg");
            response.setContentType("text/html");

然后根据您要提供的服务,您可以使用图像或文件: 对于HTML:

  response.setContentType("text/html");   
  PrintWriter out = res.getWriter();  
  out.println("<html>....</html>");
  out.close();

图片:

    ServletOutputStream stream = null;
    BufferedInputStream buf = null;
    try{

            stream = response.getOutputStream();
            File mp3 = new File("path/tofile ");

            if(request.getSession().getAttribute( "path" )!=null){      
                 mp3 = new File(request.getSession().getAttribute( "path" ).toString());
                 request.getSession().setAttribute("path", null);
            } 

            response.setContentType("image/jpg");        
            response.setContentLength( (int) mp3.length() );

            FileInputStream input = new FileInputStream(mp3);
            buf = new BufferedInputStream(input);
            int readBytes = 0;

            while((readBytes = buf.read()) != -1)
               stream.write(readBytes);

   } catch (IOException ioe){       
      throw new ServletException(ioe.getMessage());           
   } finally {
       if(stream != null)
           stream.close();
       if(buf != null)
           buf.close();
   }