在发现我与Mojarra有关的一些潜在性能问题之后,我最近将我的应用程序改为运行在Mojarra 2.1.7的MyFaces 2.1.10实现上。
我一直在使用OmniFaces SEO功能,允许相当无扩展的URL。这通过使用servlet过滤器来运行,并通过向web.xml
添加上下文参数以及向WEB-INF添加目录faces-views
来自动启用,该WEB-INF反映了Web应用程序的xhtml文档布局。
我有点担心Spring的兼容性问题,因为我正在使用Spring容器和他们的自定义EL解析器,用Spring依赖注入替换JSF依赖注入,使每个托管bean也是一个Spring bean。更令人担心的是,我正在实现Spring Security,它还通过使用servlet过滤器来拦截和验证传入的请求。我担心的是,如果它们碰巧按某种顺序被调用,那么两者可能无法正常工作。
与Mojarra的ExtensionlessURLS功能有点不同documentation
中描述的功能我注意到要让它在Mojarra中运行,我只需将我的xhtml文件保留在原始位置,但是我需要在faces-views
目录中放置一个同名和相对路径的空文件。过滤器似乎识别无扩展或XHTML请求并正确显示页面
然而,当我切换到MyFaces时,此行为发生了变化,现在faces-views
目录中的空文件导致在页面请求上抛出过早的EOF异常。我注意到,为了能够同时提供XHTML和无扩展请求,我需要在两个地方保留同一页面的重复副本。
我尝试通过让faces-views
中的文件执行来解决这个问题,并且找到了源代码但是当我执行此操作时页面未正确加载。
我的问题是,为什么我看到Mojarra和MyFaces之间使用ExtensionlessURLs会有不同的行为? Spring Spring的原因是什么?我如何解决这个问题,我不需要在我的项目中保留相同源代码的两个副本(显然我接受这个错误和错过的功能)?