从servlet目录读取静态文件

发布于 2024-12-11 12:17:34 字数 333 浏览 0 评论 0原文

我想告诉我的 java servlet 忽略对静态文件的调用,例如,如果文件存在 - 只需返回实际文件,而不实际加载 servlet。

在我的示例中,我在 netbeans 中有一个 MyServlet,并在“网页”目录下放置了 image.jpg。

我生成了一个 .war 文件并将其放置在 tomcat/webapps 下

接下来,当我尝试向 localhost:8080/MyServlet/image.jpg 发出请求时,

- 该文件未加载,而是执行 servlet。我想要的是,如果文件存在 - 它将返回它,否则将运行 servlet。

有没有快速的方法来实现?

i want to tell my java servlet to ignore calls for static files, for example, if the file exists - just return the actual file without actually loading the servlet.

in my example i have a MyServlet in netbeans, and under the "web pages" directory i placed image.jpg.

next, i generated a .war file and placed it under tomcat/webapps

when i try to make a request to localhost:8080/MyServlet/image.jpg - the file is not loaded, the servlet is executed instead.

what i want is that if the file exists - it will return it, otherwise will run the servlet.

is there a quick way to implement it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

倾城花音 2024-12-18 12:17:35

将 servlet 映射到 //* 并不是实现 servlet 的标准方法。通常,您将全局(控制器)servlet 映射到类似 /myServlet/* 的路径。 Tomcat 的默认 servlet 已经可以为您的静态内容提供服务。它在 /conf/web.xml 中配置。内联文档摘录:

  <!-- The default servlet for all web applications, that serves static     -->
  <!-- resources.  It processes all requests that are not mapped to other   -->
  <!-- servlets with servlet mappings (defined either here or in your own   -->

如果您遵循上述方法,应用程序中的 URL 可能如下所示:

静态资源:http://myserver/myWAR/images/image.gif

您的 servlet 的 URL:http://myserver/myWAR/myServlet/* (* := 通配符)

当然,还可以使用更复杂的选项,例如将静态内容卸载到外部 Web 服务器。您也可以覆盖标准配置,但在大多数情况下这是不必要的(至少根据我的经验)。

Mapping your servlet to / or /* is not the standard way for implementing servlets. In general you map global (controller) servlets to a path like /myServlet/*. Tomcat's default servlet is already available to serve your static content. It's configured in <tomcat>/conf/web.xml. Extract from inline documentation:

  <!-- The default servlet for all web applications, that serves static     -->
  <!-- resources.  It processes all requests that are not mapped to other   -->
  <!-- servlets with servlet mappings (defined either here or in your own   -->

If you follow the above mentioned approach URLs in your application may look like this:

Static resource: http://myserver/myWAR/images/image.gif

Your servlet's URLs: http://myserver/myWAR/myServlet/* (* := wildcard)

Of course, more complex options like offloading static content to an external web server are available. You can override the standard configuration as well, but in most situations this is not necessary (at least in my experience).

星星的軌跡 2024-12-18 12:17:35

通常,您可以通过 servlet 映射或将静态资源远离 servlet 映射来处理此问题。

否则,如果请求映射到您的 servlet,您需要 (a) 检查 servlet 中的文件,并重定向到真实文件名或自己流回图像,或者 (b) 编写一个足够了解相关信息的过滤器您的 web 应用程序的结构,以查看请求是否应由您的 servlet 或容器处理。

如果您描述了您的用例,那么会更容易提供更多帮助。

Normally you'd handle this via your servlet mapping or by putting your static resources away from your servlet mapping.

Otherwise, if the request is mapping to your servlet, you either need to (a) check for the file in the servlet, and redirect to the real filename or stream back the image yourself, or (b) write a filter that knows enough about your webapp's structure to see if the request should be handled by your servlet, or the container.

If you described your usecase it'd be easier to be more helpful.

一个人练习一个人 2024-12-18 12:17:35

对于静态文件,您很可能只需要使用 http://localhost:8080/image.jpg (即URL 中没有 MyServlet 部分)

For static files you most likely need just to use http://localhost:8080/image.jpg (i.e. without the MyServlet part in the URL)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文