java - URL 重写后所有操作都转发到 Struts2 servlet

标签 java regex struts2

我正在使用 struts 2,并且最近配置了 web.xmlstruts.xml 来更改 url 中的消除 .action 。令人高兴的是,除了一个重大问题之外,一切都运行良好。 我希望将我的一些请求转发到其他 servlet,但以下代码可确保我的每个操作都重定向到 Struts2 servlet。

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

我想将我的 "/do/*" 转发到另一个 servlet,比如 xyz 那么有人可以帮助我该怎么做。我有一个想法,我可能必须使用正则表达式,但我尝试了很多模式但失败了。我已经尝试了我认为应该匹配的最佳正则表达式:

[^(\/do\/*)]

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

</filter-mapping>



<servlet>
    <servlet-name>xyzServlet</servlet-name>
    <servlet-class>com.blah.xyzServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>xyzServlet</servlet-name>
    <url-pattern>/do/guide</url-pattern>

同样,我有很多这样的 servlet,它们都有自己的用途。 url 模式对它们来说几乎相同...它们就像/do/abc 或/do/pqr 等。

编辑:通过使用 StrutsPrepareAndExecuteFilter 并将接受的解决方案添加到代码中来解决问题。

最佳答案

在排除模式中配置您的 URL,如下所示在 struts.xml 中。并在 web.xml 中添加/do/* 的 servlet 映射。

<constant name="struts.action.excludePattern" value="/do/.*" />

关于java - URL 重写后所有操作都转发到 Struts2 servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17205556/

相关文章:

java - Elasticsearch 搜索 Java API

java - Android Studio React Native 应用未运行 : AAPT2 error: check logs for details

java - 获取接口(interface)实现的通用参数

正则表达式删除文件扩展名后的字符串

javascript - JS 正则表达式抛出超出最大调用堆栈大小错误

regex - 如何在 Perl 中提取以子字符串开头的字符串的其余部分?

java - 我如何使用struts 2将url重定向到特定页面

java - System.nanoTime() 是否跨线程一致?

java - 使用 Struts 和 Convention 插件的不区分大小写的 URL

java - Struts2.5.12 - 使用 ActionSupport 中的 getText 方法时的 NPE