Struts2与特定于域的servlet相结合

时间:2010-05-12 06:40:06

标签: struts2

我有struts2 web应用程序。现在我需要在iframe的帮助下嵌入来自独立servlet的一些功能。 但是根据以下规则,servlet永远不会被调用。

<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

不幸的是我无法将其更改为/ prefix / *

那么有人知道如何解决它吗?

3 个答案:

答案 0 :(得分:2)

web.xml中定义过滤器时,会按顺序调用过滤器。我在Struts2过滤器的前面创建了一个具有更具体url-pattern的过滤器,然后让这个过滤器将请求转发给有问题的servlet,而不是继续过滤器链。 E.g。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
    request.getRequestDispatcher("/servletURL").forward(request, response);
}

将此映射到与servlet相同的url-pattern,即/servletURL,然后在<{1}}中将放在 Struts2过滤器之前。

答案 1 :(得分:0)

试着看一下:Struts 2 Web XML

有一个问题:“为什么使用/ *映射过滤器以及如何配置显式排除(自2.1.7起)”这应该是理想的帮助。从理论上讲,您应该能够将异常放在此列表中,并正常映射您的servlet。

我不会对Struts 2人的这个设计决定发表评论。

答案 2 :(得分:0)

我们正在使用struts 2.1.6来定义struts过滤器,如下所示:

<filter><!--  struts filter  -->
    <filter-name>strutsFilter</filter-name>
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
    <filter-name>strutsFilter</filter-name>
    <url-pattern>*.do</url-pattern>
</filter-mapping>

我们的其他Servlet就像这样:

<servlet-mapping>
    <servlet-name>SomeOtherServlet</servlet-name>
    <url-pattern>*.yo</url-pattern>
</servlet-mapping>