2

这是我当前的 Guice 配置:

public class MyServletModule extends ServletModule {
    @Override
    protected void configureServlets() {
        bind(MyRest.class);
        serveRegex(".+(?<!\\.(html|css|png|jpg))")
               .with(HttpServletDispatcher.class);
    }
}

但是我希望我的 Rest 资源只能以的形式访问,http://127.0.0.1:8888/{hashcode_or_filename}并且是唯一接受和处理的形式(好吧,加上下面的 /create 方法)。

现在,我可以在这个路径模式中正确处理哈希码和文件名。

但是我不确定如何处理下面的类型或场景,其中客户端请求未映射的路径,在我的情况下返回:

找不到相对资源:/examples/foo 的完整路径: http://127.0.0.1:8888/examples/foo

或者

找不到相对资源:/examples/bar/foo 的完整路径:http://127.0.0.1:8888/examples/bar/foo

我需要的是能够处理未映射的路径,以便我可以返回错误 HTML 页面或其他内容,而不是在浏览器中显示这些错误文本。

另外,如果请求是:http://127.0.0.1:8888/我需要http://127.0.0.1:8888/index.html自动转发。现在我必须手动将 index.html 放在尾部。

我的 Resteasy 资源仅配置或连接:

@Singleton
@Path("/")
public class MyRest {
    @GET
    @Path({hashcode})
    public Response getSomething(...){}

    @POST
    @Path("create")
    public Response createSomething(...){}
}
4

1 回答 1

0

最简单的方法是注册过滤器以处理具有 200(OK)以外的错误代码的响应。或添加到您的 web.xml 中,如下所示:

<error-page>
    <error-code>404</error-code>
    <location>/ErrorPage.jsp</location>
</error-page> 

另外,如果请求是:http://127.0.0.1:8888/我需要 http://127.0.0.1:8888/index.html自动转发。现在我必须手动将 index.html 放在尾部。

您可以使用此模块http://tukey.org/urlrewrite/

WEB-INF/web.xml

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    <init-param>
        <param-name>confPath</param-name>
        <param-value>/WEB-INF/urlrewrite.xml</param-value>
    </init-param>
    <!--...omitted...-->
</filter>

<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

WEB-INF/urlrewrite.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite
        PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
        "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
<urlrewrite>
    <rule match-type="regex">
        <from>^/$</from>
        <to type="redirect">/index.html</to>
    </rule>
</urlrewrite>
于 2013-07-26T11:11:41.443 回答