过滤器映射 URL 模式 *.action 不起作用 struts2

Posted

技术标签:

【中文标题】过滤器映射 URL 模式 *.action 不起作用 struts2【英文标题】:Filter mapping Url pattern *.action not working struts2 【发布时间】:2014-04-22 10:03:34 【问题描述】:

在 struts2 web.xml 应用程序中,我有过滤器和 servlet

web.xml

...
<servlet>
        <servlet-name>SchServlet</servlet-name>
        <servlet-class>com.vk.translate.report.SchServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SchServlet</servlet-name>
        <url-pattern>/SchServlet</url-pattern>
    </servlet-mapping>
...

<filter>
        <filter-name>struts</filter-name> 
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        <!-- <init-param> <param-name>actionPackages</param-name> <param-value>com.mycompany.myapp.actions</param-v2alue> 
            </init-param> -->
    </filter>
    <filter-mapping>
        <filter-name>struts</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

...

在调用 servlet 时,它将请求映射为操作,因为 Filer Url 模式为

<url-pattern>/*</url-pattern>

我尝试将其修改为

 <url-pattern>/*.action</url-pattern>

它显示错误。请帮助我如何调用 servlet。

<url-pattern>/SchServlet</url-pattern>

在这种情况下,当调用它显示为的 servlet 时

没有为命名空间 [/] 和操作名称映射的操作 [SchServlet] 与上下文路径 [/TranslateApp] 关联。

【问题讨论】:

见***.com/q/12672569/1700321。 Error 404 on using servlets with struts 2的可能重复 【参考方案1】:

用途:

<url-pattern>*.action</url-pattern>

【讨论】:

得到这个错误“Servlet failed with Exception The Struts dispatcher can be found. 这通常是由于使用没有关联过滤器的 Struts 标签造成的。只有当请求通过其 servlet 过滤器时,Struts 标签才可用,它初始化此标签所需的 Struts 调度程序。- [未知位置]" 您是否点击了如下网址:http://domain.com/something.action?您点击的 url 必须与模式匹配才能调用 struts servlet。 不,我无法登录应用程序,我在欢迎页面本身出现此错误http://domain.com/welcome【参考方案2】:

这个成功了

在 struts.xml 中

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

在 web.xml 中

<filter>
        <filter-name>struts</filter-name> 
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

    </filter>
    <filter-mapping>
        <filter-name>struts</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>

    <servlet>
        <servlet-name>SchServlet</servlet-name>
        <servlet-class>com.vk.translate.report.SchServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SchServlet</servlet-name>
        <url-pattern>/SchServlet</url-pattern>
    </servlet-mapping>

参考: Struts2 exclude pattern not working

【讨论】:

以上是关于过滤器映射 URL 模式 *.action 不起作用 struts2的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Jetty 中的 /* 上映射 servlet 过滤器?

关于拦截器与过滤器使用场景拦截器与过滤器的区别整理

如何创建 JSF 过滤器/url 模式来保护 javascript

在 Java 过滤器中获取配置的 url 模式 [重复]

SpringMVC学习系列 之 URL请求到Action的映射规则

Android:除非您添加意图过滤器,否则电子邮件意图 ACTION_SENDTO 不起作用