Java 显示项目文件夹jsf glassfish之外的图像

Java 显示项目文件夹jsf glassfish之外的图像,java,jsf,jsf-2,glassfish,Java,Jsf,Jsf 2,Glassfish,我想向用户展示一些图像,它们位于以下位置: C:\Users\advert_images 我使用primefaces并使用servelet显示: @WebServlet("/advert_images/*") public class ImagesServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletR

我想向用户展示一些图像,它们位于以下位置:

C:\Users\advert_images
我使用primefaces并使用servelet显示:

   @WebServlet("/advert_images/*")
public class ImagesServlet extends HttpServlet {

    @Override
    protected
            void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String filename = request.getPathInfo().substring(1);
        File file = new File("C:\\Users\\advert_images\\", filename);
        response.setHeader("Content-Type", getServletContext().getMimeType(filename));
        response.setHeader("Content-Length", String.valueOf(file.length()));
        response.setHeader("Content-Disposition", "inline; filename=\"" + filename + "\"");
        Files.copy(file.toPath(), response.getOutputStream());
    }
}

因此,当我在浏览器中键入以下内容时:

http://localhost:8080/vas-plus/advert_images/3.jpg
我知道我的形象

但是当我尝试用xhtml编写时

 <img src ="http://localhost:8080/vas-plus/advert_images/3.jpg"/>
或:

我没有显示图像。也可以将其作为html输出:

<img src="/vas-plus/advert_images/3.jpg" class="test" width="0" height="0" style="display: none !important; visibility: hidden !important; opacity: 0 !important; background-position: 1px 1px;">
当我使用Google Chrome developerTools查看html页面的资源时,我看到:


所以我有点困惑,有什么想法吗?

似乎是错误的内容类型标题,可能是因为ServletContext无法访问您的文件

试试这个:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String filename = request.getPathInfo().substring(1);
    File file = new File("C:\\Users\\advert_images\\", filename);
    response.setContentType("image/jpeg");
    response.setContentLength((int) file.length());
    FileInputStream in = new FileInputStream(file);
    OutputStream out = response.getOutputStream();
    byte[] buf = new byte[1024];
    int count = 0;
    while ((count = in.read(buf)) >= 0) {
        out.write(buf, 0, count);
    }
    out.close();
    in.close();
}

我强烈建议您将文件放入项目中。

为什么您不想将其按应有的方式放入项目中?
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String filename = request.getPathInfo().substring(1);
    File file = new File("C:\\Users\\advert_images\\", filename);
    response.setContentType("image/jpeg");
    response.setContentLength((int) file.length());
    FileInputStream in = new FileInputStream(file);
    OutputStream out = response.getOutputStream();
    byte[] buf = new byte[1024];
    int count = 0;
    while ((count = in.read(buf)) >= 0) {
        out.write(buf, 0, count);
    }
    out.close();
    in.close();
}