我有struts2 web应用程序。现在我需要在iframe的帮助下嵌入来自独立servlet的一些功能。 但是根据以下规则,servlet永远不会被调用。
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
不幸的是我无法将其更改为/ prefix / *
那么有人知道如何解决它吗?
答案 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>