【问题标题】:Should REST Services Have non Servlet Content?REST 服务应该有非 Servlet 内容吗?
【发布时间】:2015-11-08 20:53:37
【问题描述】:

我正在使用 Wildfly 和 JAX-RS 做一个 Rest 服务 + 网站。 我的意思是让 Rest Service 成为某种“控制器”。 我可以正常加载我的 index.jsp 页面,但是当涉及到其他类型的文件(如 ma​​in.css)时,它会返回 404 HTTP file not found 错误。

这些文件应该在同一个项目中吗?还是应该为 Rest Service 创建一个 Java 项目,为网站创建另一个?

我的端点如下所示:

@Path("/restservice")
@Produces("text/html; charset=UTF-8")
public class FalkEndpoint {

    @GET
    public String defaultMessage(@Context HttpServletRequest request,@Context HttpServletResponse response){
        return "The server is up! :)";
    }


}

我的 web.xml 看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <servlet-mapping>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

【问题讨论】:

  • 请显示您项目的文件夹结构。这将有助于识别问题。
  • See related。它与使用 url 模式 /* 有关。它占用不允许检索静态内容的请求。更改 url 模式或查看答案中的配置

标签: java web-services rest web


【解决方案1】:

您通常不应使用 JAX-RS 提供静态文件。那就是重新发明轮子。提供动态生成的文件(如报告 PDF 或 CSV 导出)完全没问题。

如果这些(静态资源)文件在同一个项目中,则最容易处理。

如果您将它们放在 JSP 旁边的 websrc/webapp 文件夹中(取决于您的项目设置),它们将由容器(Tomcat/ Jetty/Glassfish) servlet。

在 Wildfly 中,这可以通过添加文件处理程序使用 Standalone.xml 来实现:

在standalone.xml 中向undertow 子系统添加另一个文件处理程序和另一个位置:

<server name="default-server">
    <http-listener name="default" socket-binding="http"/>
    <host name="default-host" alias="localhost">
        <location name="/" handler="welcome-content"/>
        <location name="/img" handler="images"/>
    </host>
</server>
<handlers>
    <file name="welcome-content" path="${jboss.home.dir}/welcome-content" directory-listing="true"/>
    <file name="images" path="/var/images" directory-listing="true"/>
</handlers>

来源:https://stackoverflow.com/a/22695843

【讨论】:

  • 我应该怎么做才能只使用 JAX-RS 为端点提供服务,而使用默认提供程序提供其他文件?
  • 如果你在 Tomcat 中运行它,你不需要做任何事情。你在用什么运行它?
  • 我正在 Wildfly 上运行 JEE 内容。
  • @Swadish 参考 Wildfly 配置更新了答案。
  • 谢谢!因为我不想为我添加的每一种文件都添加一个例外,所以我选择为 Web 应用程序创建一个新项目。
猜你喜欢
  • 2017-11-04
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 2015-02-20
  • 1970-01-01
相关资源
最近更新 更多