【问题标题】:UrlRewriteFilter ERRORUrlRewriteFilter 错误
【发布时间】:2012-03-18 18:26:16
【问题描述】:

我正在使用 maven,并将 urlrewrite.xml 放在源文件夹 src/main/resources/ 下。像这样配置 web.xml:

<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
    <param-name>confPath</param-name> 
    <param-value>classpath:urlrewrite.xml</param-value>             
</init-param>


</filter>

  <filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
  </filter-mapping>

但得到错误:org.tukey.web.filters.urlrewrite.UrlRewriteFilter 错误:无法在类路径找到 urlrewrite conf 文件:urlrewrite.xml。如果我把它放在默认的 loc:/WEB-INF/urlrewrite.xml 中。有用。但我想符合 Maven 规范并将所有配置放在资源文件夹下。

谁能帮帮我?谢谢。

【问题讨论】:

    标签: url-rewriting servlet-filters


    【解决方案1】:

    使用这个

    <init-param>
        <param-name>confPath</param-name>
        <param-value>/WEB-INF/urlrewrite.xml</param-value>
    </init-param>
    

    并将 urlrewrite.xml 文件放入 'WEB-INF' This article 有设置说明。

    【讨论】:

    • 我可以把它放在其他地方吗?那么confPath参数有什么用呢?
    • 我发现这个问题已解决code.google.com/p/urlrewritefilter/issues/detail?id=28 根据他们的说法,首先过滤器尝试从 servlet 上下文中加载它。如果找不到,它会尝试从系统的类加载器中加载它。
    • 我明白了。我尝试通过实现我自己的 UrlRewriteFilter 来解决这个问题,但它似乎有太多的依赖关系。所以我放弃了。我将不得不使用上下文路径。非常感谢。
    【解决方案2】:

    不是世界上最干净的解决方案,但我能够找到解决方法。请注意,我的应用程序是基于弹簧的:

    公共类 EnhancedUrlRewriteFilter 扩展 UrlRewriteFilter {

    private String confPath;
    
    private final Log logger = LogFactory.getLog (getClass ());
    
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        String confPathStr = filterConfig.getInitParameter("confPath");
        confPath = StringUtils.trim(confPathStr);
        super.init (filterConfig);
    }
    
    @Override
    protected void loadUrlRewriter (FilterConfig aFilterConfig) throws ServletException {
    
        try {  
            configure (aFilterConfig.getServletContext ());
        }
        catch (Throwable e) {
            throw new IllegalArgumentException (e);
        }
    
    }
    
    private void configure (ServletContext context) throws IOException {
    
        ResourceLoader webApplicationContext = WebApplicationContextUtils.getWebApplicationContext (context);
    
        Resource resource = webApplicationContext.getResource (confPath);
    
        logger.debug ("Loaded urlrewrite.xml from " + resource.getFilename ());
    
        InputStream inputStream = resource.getInputStream();
    
        URL confUrl = null;
    
        try {
            confUrl = context.getResource(confPath);
        } catch (MalformedURLException e) {
            logger.debug(e);
        }
    
        String confUrlStr = null;
        if (confUrl != null) {
            confUrlStr = confUrl.toString();
        }
    
        if (inputStream != null) {
            Conf conf = new Conf(context, inputStream, confPath, confUrlStr, false);
            checkConf(conf);
        }
    }
    

    }

    在我的 web.xml 中:

    <filter>
        <filter-name>UrlRewriteFilter</filter-name>
        <filter-class>EnhancedUrlRewriteFilter</filter-class>
        <init-param>
            <param-name>confPath</param-name>
            <param-value>classpath:urlrewrite.xml</param-value>
        </init-param>
        <init-param>
            <param-name>logLevel</param-name>
            <param-value>WARN</param-value>
        </init-param>
    </filter>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      相关资源
      最近更新 更多