如何在web.xml中对/ * url-pattern进行例外处理?

时间:2013-05-16 15:42:58

标签: java websphere web.xml

在我们的web.xml中,我们将CXFServlet映射到/ * url模式:

<servlet-mapping>
    <servlet-name>CXFServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

这很有用,我们现在不想改变它。但我希望有一个不由CXFServlet处理的html页面(/admin/index.html),并且只是直接作为html提供。我怎么能做到这一点?我不知道如何创建servlet映射只是为了提供一个html页面。

请注意,如果重要的话,我们正在使用IBM WebSphere 8(WAS 8)。

3 个答案:

答案 0 :(得分:0)

您可以尝试:

<servlet-mapping>
    <servlet-name>CXFServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/admin/*</url-pattern>
</servlet-mapping>

它在Jetty和Tomcat中工作。

答案 1 :(得分:0)

给定的答案(到目前为止)都没有达到我的要求,但我找到了一个简单的解决方案。

由于某种原因,事实证明WebSphere将自己处理JSP,而不是委托给具有/*映射的servlet - 即使web.xml中没有提到JSP的特定映射。也许这是规范的一部分,如果你想让它处理这些请求,就必须将*.jsp显式映射到servlet?

在任何情况下它都适合我 - 而不是使用/admin/index.html我可以使用/admin/index.jsp(并且可能会将index.jsp添加到welcome-file-list,以便/admin的请求1}}也会给这个页面。)

答案 2 :(得分:0)

您可以在CXFServlet.java中找到一些代码

在doget()方法中:

URL url = new URL(request.getRequestURL());
    System.out.println("URL is:" + url);
if (url.toString().contains("/admin/")) {
        response.setContentType("text/html; charset=UTF-8");
        PrintWriter pw = response.getWriter();
        pw.print("<!DOCTYPE html><html lang=\"fa\" dir=\"rtl\">\n"
                + "<head>"
                + "<meta charset=\"utf-8\"/>"
                + "</head>"
                + "<body>"
                + "<div>some thing</div>"
                + "<body></html>");
        pw.close();
        return;
    }