UrlRewriteFilter 错误
Posted
技术标签:
【中文标题】UrlRewriteFilter 错误【英文标题】:UrlRewriteFilter ERROR 【发布时间】: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.:无法在类路径找到 urlrewrite conf 文件:urlrewrite.xml。如果我把它放在默认的 loc:/WEB-INF/urlrewrite.xml 中。有用。但我想符合 Maven 规范并将所有配置放在资源文件夹下。
谁能帮帮我?谢谢。
【问题讨论】:
【参考方案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>
【讨论】:
以上是关于UrlRewriteFilter 错误的主要内容,如果未能解决你的问题,请参考以下文章
UrlRewriteFilter 在 Tomcat 中不生效
使用urlrewritefilter发现部分请求url报404