当前位置: 首页 > 面试题库 >

Jersey / * Servlet映射导致静态资源出现404错误

蒋华美
2023-03-14
问题内容

如果我在2.0版本中将Jersey的url-pattern映射到/ *,它将为所有静态资源(例如/index.html)造成404。我的web.xml具有:

<servlet>
  <servlet-name>JerseyApp</servlet-name>
  <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
  <init-param>
    <param-name>javax.ws.rs.Application</param-name>
    <param-value>org.frog.jump.JerseyApp</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>JerseyApp</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>

如何使用相同的网址格式投放静态内容?


问题答案:

使用Jersey 1.x,如果你从Jersey servlet切换到过滤器,则应该能够从同一路径提供静态内容。删除你指定的servlet XML并将其切换到:

<filter>
  <filter-name>Jersey Filter</filter-name>
  <filter-class>com.sun.jersey.spi.container.servlet.ServletContainer</filter-class>
  <init-param>
    <param-name>javax.ws.rs.Application</param-name>
    <param-value>org.frog.jump.JerseyApp</param-value>
  </init-param>
  <init-param>
    <param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name>
    <param-value>/.*html</param-value>
  </init-param>
</filter> 
<filter-mapping>
  <filter-name>Jersey Filter</filter-name>
  <url-pattern>/*</url-pattern> 
</filter-mapping>

编辑:在Jersey 2.x中,你应该可以做相同的事情,但是属性名称已更改。尝试类似的东西:

<filter>
  <filter-name>Jersey Filter</filter-name>
  <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class>
  <init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>org.example</param-value>
  </init-param>
  <init-param>
    <param-name>jersey.config.servlet.filter.staticContentRegex</param-name>
    <param-value>/.*html</param-value>
  </init-param>
</filter> 
<filter-mapping>
  <filter-name>Jersey Filter</filter-name>
  <url-pattern>/*</url-pattern> 
</filter-mapping>

而且你的POM应该包括:

<dependency>
  <groupId>org.glassfish.jersey.core</groupId>
  <artifactId>jersey-server</artifactId>
  <version>2.0-m07-1</version>
  <type>jar</type>
  <scope>compile</scope>
</dependency>

<dependency>
  <groupId>org.glassfish.jersey.containers</groupId>
  <artifactId>jersey-container-servlet-core</artifactId>
  <version>2.0-m07-1</version>
  <type>jar</type>
  <scope>compile</scope>
</dependency>

如果要提供CSS,JSP等服务,则必须在init-param中自定义正则表达式。

另一个不错的选择是为你的服务使用版本路径(“ / v1 / *”),然后静态内容将在没有过滤器的情况下工作。



 类似资料:
  • 主要内容:WebJars 映射,默认静态资源映射在 Web 应用中会涉及到大量的静态资源,例如 JS、CSS 和 HTML 等。我们知道,Spring MVC 导入静态资源文件时,需要配置静态资源的映射;但在 SpringBoot 中则不再需要进行此项配置,因为 SpringBoot 已经默认完成了这一工作。 Spring Boot 默认为我们提供了 3 种静态资源映射规则: WebJars 映射 默认资源映射 静态首页(欢迎页)映射 WebJ

  • 我有以下servlet映射- 我的图像链接在html是"/图像/文件夹/ImageName.jpg"-这些图像给我一个404,而如果更改链接到"/图像/ImageName.jpg"和移动图像直接下的图像文件夹,它得到我的图像。 我是否需要以任何方式修改我的servlet映射以考虑层次结构?

  • 我在学习春靴。现在我必须将静态资源部署到web项目中,链接它,但它返回404错误 此外,当我访问“localhost:8080/appie/resources/js/common.js”浏览器时,返回404错误(我的上下文路径是/appie)。 那是什么原因呢?

  • 我使用Spring Boot1.3.3我的应用程序资源存在于src/main/Resources/静态下例如:src/main/Resources/静态/index.html我试图映射我的静态资源与前缀像/*/资源/** 以便它匹配网址像 /main/resource/**和 /app/resource/** 当我尝试使用以下代码时 当我请求域:8080/app/resource/index时,它

  • 在发布帖子时,我在网络控制台上看到了上述错误。 源地图错误:请求失败,状态404资源URL:超文本传输协议://{mysite}/js/app.js源地图URL:bootstrap.js.map 我的资源/js/app.js是这样的 还有这个网页。js看起来像这样 我的部分工作输出 我的错误是这样的