【问题标题】:Servlet in Eclipse - Where to put static content [duplicate]Eclipse中的Servlet - 放置静态内容的位置[重复]
【发布时间】:2013-05-19 03:47:35
【问题描述】:

使用 Eclipse 编写 servlet 时,我应该将静态内容(图像、CSS 等)放在哪里,以便我可以创建指向它的 HTML 链接(例如 <img src="http://localhost:8080/context/image.png>)。我试过把它放到 WebContent 目录中,但是没有用(或者我不知道如何链接到它,我试过 <img src="image.png"><img src="http://localhost:8080/context/image.png">)。

我附上了我的项目资源管理器的图像,所以你可以把它分类。


为了方便查找,以下是我在 cmets 或其他地方发布的所有内容:

【问题讨论】:

  • 这完全取决于您如何部署应用程序。此外,您不应使用绝对 URI,除非您使用某种 CDN:如果您的应用未部署在 http://localhost:8080 怎么办?
  • @fge 当您说取决于我如何部署它时,当我只想让它在 Eclipse 中工作时,我该如何进行?此外,主机和上下文不是硬编码的,我通过request.getContextPath() 获取它们。 @ŁukaszLech 据我了解,您链接的帖子希望从应用程序服务器外部的某个位置加载静态内容,而我想从服务器目录/WAR 内部加载它。
  • 您的案例的简短答案是WebContent 内部的某个地方,但不在WEB-INFMETA-INF i>,因为这些文件夹的内容不能直接访问。
  • 从我到目前为止收集的信息来看,问题似乎是,我根本无法访问文件/文件夹,因为 URL 的文件/文件夹规范部分(例如 /images/ image.png) 被解释为 GET 参数。是否有任何可能导致此行为的 tomcat 配置设置?
  • 顺便说一句,回复某人时使用@username(而不是username写实际的用户名),所以这个用户会收到通知。除非评论是针对答案或问题的作者(就像我写这个评论给你 - 问题的作者,所以在这种情况下,你会在没有@RikuXan的情况下自动收到通知)。在这里阅读:How do comment @replies work?

标签: java html eclipse tomcat servlets


【解决方案1】:

创建一个test.html 文件并将其放置在您的Eclipse 项目中的/Blog/WebContent/test.html

<html>
 <head>
  <title>Test WebContent</title>
 </head>
 <body>
  <img src="images/test.png" />
 </body>
</html>

还将test.png 图像文件放在/Blog/WebContent/images 文件夹中。

现在,将您的浏览器指向http://localhost:8080/&lt;your-web-app-name&gt;/test.html 并检查test.png 是否被渲染。如果是,那么问题出在您从 servlet 编写 HTML 输出的方式上。

对于配置为ImgServlet 的示例

<servlet>
    <servlet-name>ImgServlet</servlet-name>
    <servlet-class>pkg.path.to.ImgServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ImgServlet</servlet-name>
    <url-pattern>/ImgServlet</url-pattern>
</servlet-mapping>

您的doGet() 方法应将 HTML 输出为

response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html><head><title>Test WebContent</title></head>" +
            "<body><img src=\"images/test.png\" /></body></html>");

编辑:要打印您的 servlet 接收的所有请求参数,请在您的 handleRequest() 方法调用之前添加以下内容(您也可以将其注释掉以进行测试)

PrintWriter out = response.getWriter();
Enumeration<String> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()) {
    String param = (String) parameterNames.nextElement();
    out.println(param + " = [" + request.getParameter(param) + "]");
}

【讨论】:

  • 当我将浏览器指向http://localhost:8080/Blog/test.html 时,它只会打开我正在为其编写servlet 的普通页面。我假设它使用“/test.html”作为 servlet 的 GET 参数。总的来说,我配置的东西是不是非常错误,因为从你的帖子的声音来看,我无法访问任何文件是不正常的。
  • 发布您的 web.xml 以及 Servlet 代码。
  • web.xml 来自 Eclipse,这里我没有做任何更改。 pastebin.com/sTg4ugyw 关于servlet,完全发布它可能有点矫枉过正,结构上它是一个标准的Eclipse servlet,我实现了init,破坏doGet和doPost方法,基本上我所做的就是读取文本文件,从MySQL获取数据-数据库并组装我的 HTTP 响应字符串。
  • 您的 web.xml 中没有配置 servlet,这意味着您的服务器没有为您可能尝试过的任何 url 执行任何 servlet 代码。这让我想到你说“test.html,它只是打开我的正常页面”时的意思是什么?你到底看到了什么?
  • 哇,它成功了,我终于可以在我的浏览器中打开 test.html,它显示的图像又漂亮又清晰。我什至可以将@WebServlet 标签设置回“/”,现在它仍然可以工作。我觉得 Eclipse 和 tomcat 结合在一起的方式中存在一个错误,但似乎这个简单的更改已经修复了它。非常感谢您的帮助 :) 有什么地方可以给您买啤酒吗?
【解决方案2】:

试试

<img src="/context/image.png">

但这确实取决于您部署应用程序的方式。无论如何,像图像这样的文件必须在 WebContent 文件夹中。

【讨论】:

  • 我按照你写的方法试过了,但是没有用。我将文件放在 Eclipse 的 WebContent 文件夹中,并将我的图像链接到 "/Blog/image.png",但它仍然没有显示出来。
  • 您是否有机会使用任何类型的 url 重写过滤器?
  • 我只是在 Eclipse 中创建了 servlet,我认为 Eclipse 自己不会这样做。
【解决方案3】:

首先,不要在链接中硬编码你的上下文,如果你的上下文路径改变了,你以后很难改变链接。相反,使用 EL 来制作相对路径:

<img src="${pageContext.request.contextPath}/img/abc.png" />

其次,我在你的WebContent中没有看到任何图像,如果你手动将图像放入window文件夹中,你需要刷新eclipse项目才能让eclipse检测到所有添加的文件。在Project Explorer中右击你的项目并选择Refresh

【讨论】:

  • 主机和上下文不是硬编码的,我通过request.getRequestURL()得到它们。另外,您的代码对我来说似乎不是纯 Java,我不确定如何将其包含到我的代码中。另外,图片中没有包含图像,因为我不想混淆某人,我只是为了截图而删除了它。我也是直接用 Eclipse 添加的。
  • @RikuXan 代码绝对OK。唯一的问题是,只有当您的页面是JSP,而不是纯 HTML 时,它才会起作用。他在上面的例子中使用的是Expression Language。对于 JSP 页面,您还可以使用来自JSTL&lt;c:url&gt; 标记。在此处查看示例:Adding external resources in JSP
  • 很遗憾,我不能使用 JSP,只能使用纯 Java / Servlet 代码。
  • @RikuXan 附带说明:实际上 JSP 文件被编译成 Servlet。如果您可以使用 Servlets,那么您可以使用 JSP。因为 bot Servlet 容器(如 Apache Tomcat、Jetty 等)和完整的 Application Servers(如 GlassFish、JBoss、WebSphere、WebLogic 等)可以处理 JavaServer Pages (JSP)
  • “不能”更像是“我不允许”。这是一个大学项目,有不同的团队,应该用不同的语言解决问题(还有 PHP 和 JSP,我希望我是其中之一)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-20
  • 1970-01-01
  • 2019-12-16
  • 2017-05-06
  • 1970-01-01
  • 2010-09-13
相关资源
最近更新 更多