REST服务是否应具有非Servlet内容?

时间:2015-11-08 20:53:37

标签: java web-services rest web

我正在使用Wildfly和JAX-RS做一个Rest Service + Web站点。 我的观点是将休息服务作为某种“控制器”。 我通常可以加载 index.jsp 页面,但是当遇到其他类型的文件(例如 main.css )时,它会返回404 HTTP file not found错误。

这些文件是否应该在同一个项目中?或者我应该为Rest服务创建一个Java项目,为网站创建另一个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>

1 个答案:

答案 0 :(得分:0)

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

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

如果您将它们放在 web src / webapp 文件夹中(具体取决于您的项目设置),那么它们将由容器提供服务(Tomcat / Jetty / Glassfish)servlets for you。

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

  

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

<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