我正在将应用程序从Struts1迁移到Struts2。
在我的Struts1应用程序中,我有一个由两个过滤器(Filter1.java,Filter2.java)实现的过滤器链。 而且我也重写了ActionServlet类。 下面是如何在web.xml中配置这些组件。
<filter>
<filter-name>Filter1</filter-name>
<filter-class>MyFilter1</filter-class>
</filter>
<filter>
<filter-name>Filter2</filter-name>
<filter-class>MyFilter2</filter-class>
...init params...
</filter>
<filter-mapping>
<filter-name>Filter2</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Filter2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Filter1</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>InitServlet</servlet-name>
<servlet-class>MyActionServlet</servlet-class>
..........
..........
</servlet>
<servlet-mapping>
<servlet-name>MyActionServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
基本上,每当有一个请求到达我的应用程序时,它就会被这两个过滤器(在doFilter()方法中)拦截,然后将此请求提供给Action servlet。
public void doFilter(....) {
......
if (condition) {
filterChain.doFilter(req, res);
}
else {
RequestDispatcher dispatcher = req.getRequestDispatcher("someJSPPage");
dispatcher.forward(req, res);
}
......
}
public void doFilter(....) {
......
if (condition) {
//some logic
filterChain.doFilter(req, res);
}
else {
filterChain.doFilter(req, res);
}
......
}
如何在Struts2中实现这些过滤器。在Struts2中,前端控制器本身是一个过滤器(org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter)。 我已经在新的Struts2过滤器StrutsPrepareAndExecuteFilter中编写了这两个过滤器的逻辑,但没有遇到任何问题。
任何帮助将不胜感激。
谢谢, 苏尼尔