gpt4 book ai didi

java - 使用 servlet 和 Jetty 时丢失图像

转载 作者:行者123 更新时间:2023-11-30 08:14:52 25 4
gpt4 key购买 nike

我使用 servlet 和 Jetty 创建了一个小型 Maven 项目。 servlet 工作正常并输出 html 页面。但是,链接的图像未显示(丢失)。

这是我设置服务器的一小段代码......

    // Set handler 1 (Display Html)
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
context.addServlet(new ServletHolder(hws),"/hello");

// Set handler 2 (For the images)
WebAppContext wac = new WebAppContext();
wac.setContextPath("/img");

// Attach handlers to server
handlerList.setHandlers(new Handler[]{context,wac});
myServer.setHandler(handlerList);

输出 html 的 servlet 的一部分...

    PrintWriter out = response.getWriter();
response.setContentType( "text/html");

out.println( "<html><head><title>Hellow World</title></head>");
out.println( "<body><h1>Hello World</h1>" );
out.println( "<img src=\"/img/img.jpg\">" );
out.println( "</body></html>");
out.close();

图像文件(img.jpg)是构建后的,位于jar文件根目录的子文件夹“img”中...

我想使用更多的图像、CSS 文件和 JavaScript。所有这些都将嵌入到 Jar 文件中。

有人有在 servlet 的输出中显示图像以及图像位于 jar 文件中的位置的经验吗?

谢谢

最佳答案

在 Joakim 的大力帮助和反馈下,我解决了这个问题。

为了帮助其他人解决同样的问题,我发布了我的解决方案......

第 1 步我创建了一个文件夹,构建后该文件夹位于 Jar 文件内的根级别(该文件夹的名称为“webroot”)。我已将所有图像、CSS 和 JavaScript 文件放入此文件夹中。

myApp.jar
|_ "webroot" folder
|_ LionelRichie.jpg
|_ style.css
|_ myscript.js
|_ ...

第 2 步我已经创建了 servlet 的基本设置。

    // At the top of the class: setup the imports    
import java.net.URL;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.webapp.WebAppContext;

...

// somewhere in your class ...

// Locate the path of the "webroot" folder, containing the images etc ...
URL warUrl = this.getClass().getClassLoader().getResource("webroot");
String warUrlString = warUrl.toExternalForm();

// Create a webAppContext, pointing the "webroot" folder to the "/files" url.
// The files will be available at <server>:<port>/files
WebAppContext wac = new WebAppContext();
wac.setResourceBase(warUrlString);
wac.setContextPath("/files");

// Setup your servlet ("myServlet"), so it can be accessed in the browser.
// The servlet can be used at <server>:<port>/hello
// Note: for some unknown reason, I was forced to configure the servlet
// with the root contextpath "/" last !
ServletContextHandler sch = new ServletContextHandler(ServletContextHandler.SESSIONS);
sch.setContextPath("/");
sch.setResourceBase(warUrlString);
sch.addServlet(new ServletHolder(myServlet),"/hello");

// Attach handlers to the server
HandlerList handlerList = new HandlerList();
handlerList.setHandlers(new Handler[]{wac, sch});
myServer.setHandler(handlerList);

第 3 步在 servlet 中,将外部文件的 url 更改为正确的位置。

示例:

           PrintWriter out = response.getWriter();
response.setContentType( "text/html");

// output the result
out.println( "<html><head><title>Hello</title></head>");
out.println( "<body><h1>Hello, is it me you're looking for ?</h1>" );
out.println( "<img src=\"/files/LionelRichie.jpg\">" );
out.println( "</body></html>");
out.close();

我希望这对某人有帮助......

关于java - 使用 servlet 和 Jetty 时丢失图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29811435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com