【问题标题】:How to remove the file suffix/extension (.jsp and .action) using the Stripes Framework?如何使用 Stripes 框架删除文件后缀/扩展名(.jsp 和 .action)?
【发布时间】:2025-12-04 22:00:01
【问题描述】:

我希望在我的网络应用中使用漂亮/干净的 URL。

我想要以下网址:

http://mydomain.com/myapp/calculator

.. 解析为:

com.mydomain.myapp.action.CalculatorActionBean

我尝试使用以下方法覆盖 NameBasedActionResolver:

public class CustomActionResolver extends NameBasedActionResolver {
    public static final String DEFAULT_BINDING_SUFFIX = ".";

    @Override
    protected String getBindingSuffix() {
        return DEFAULT_BINDING_SUFFIX;
    }

    @Override
    protected List<String> getActionBeanSuffixes() {
        List<String> suffixes = new ArrayList<String>(super.getActionBeanSuffixes());
        suffixes.add(DEFAULT_BINDING_SUFFIX);
        return suffixes;
    }
}

并将其添加到web.xml

<servlet-mapping>
    <servlet-name>StripesDispatcher</servlet-name>
    <url-pattern>*.</url-pattern>
</servlet-mapping>

这让我:

http://mydomain.com/myapp/Calculator.

但是:

  1. 一个流浪的“。”仍然既不漂亮也不干净。
  2. 类名在 URL 中仍然大写..?
  3. 那还留给我*.jsp..?是否有可能同时摆脱.action.jsp

【问题讨论】:

    标签: java tomcat web.xml stripes


    【解决方案1】:

    我认为您正在寻找 @URLBinding 注释。查看 Bean 上的 @URLBinding

    @UrlBinding("/计算器")

    【讨论】:

    • 我应该提到我已经尝试过这个,但是当我尝试访问 http://mydomain.com/myapp/calculator 时得到一个 404。此外,我宁愿建立自己的约定,而不是逐个操作地配置异常。
    【解决方案2】:
    【解决方案3】:

    我试图做同样的事情,并且有同样的问题,但我希望我的 URL 使用尾部斜杠 http://mydomain.com/myapp/calculator/

    答案是使用@UrlBinding 和 DynamicMappingFilter

    我将示例修改为:

    @UrlBinding("/calculator/")
    public class CalculatorActionBean implements ActionBean {
      .
      .
      .
    return new ForwardResolution("/WEB-INF/view/calculator.jsp");
    

    然后我将 DMF 添加到 web.xml:

    <filter>
        <display-name>Stripes Dynamic Mapping Filter</display-name>
        <filter-name>DynamicMappingFilter</filter-name>
        <filter-class>net.sourceforge.stripes.controller.DynamicMappingFilter</filter-class>
        <init-param>
            <param-name>ActionResolver.Packages</param-name>
            <param-value>com.example.stripes</param-value>
        </init-param>
    </filter>
    
    <filter-mapping>
        <filter-name>DynamicMappingFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>
    

    现在干净的 URL 按预期工作,我在与表单交互后从未重定向到 *.action URL。

    【讨论】: