Servlet筛选器无法访问基于JSF的应用程序中的CSS,资源和质数

杰夫

我有一个ServletFilter,我想通过转发使我的应用程序进入维护模式,甚至尝试包含facelet页面,但是无论哪种方式,我都无法使facelet页面包含资源(图像,css)

我知道这个问题,浏览器在调用转发到JSP的Servlet时无法访问/查找CSS,图像和链接等相对资源,但是答案是使用jsp页面,而不使用h:head h:body,所以我从那篇文章中尝试过的东西并没有起作用。

public class OfflineFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
    LocalTime now = LocalTime.now();
    LocalTime start = LocalTime.parse("06:45:00");
    LocalTime stop = LocalTime.parse("07:00:00");

    // Want to go into maintenance mode every morning between 6:45 and 7:00 am
        if (now.isAfter(start) && now.isBefore(stop)) {
        // ((HttpServletResponse) response).sendRedirect(((HttpServletRequest) request).getContextPath() + "/maintenance.xhtml");
           request.getRequestDispatcher("maintenance.xhtml").forward(request, response);
        // request.getRequestDispatcher("maintenance.xhtml").include(request, response);
        } else {
           chain.doFilter(request, response);
        }
    }
}

maintenance.xhtml

<h:head>
    <title>Maintenance</title>
    <h:outputStylesheet name="#{pageContext.request.contextPath}/css/screen.css" />
</h:head>

<h:body>
    <h:outputStylesheet name="#{pageContext.request.contextPath}/css/screen.css" />
    test 0<img src="/AppName/resources/gfx/bug.png" />
    test 1<h:graphicImage styleClass="bug_logo" name="gfx/bug.png" />
    test 2<h:graphicImage styleClass="bug_logo" name="/gfx/bug.png" />
    test 3<h:graphicImage styleClass="bug_logo" name="resources/gfx/bug.png" />
    test 4<h:graphicImage styleClass="bug_logo" name="#{pageContext.request.contextPath}/gfx/bug.png" />
    <p:clock pattern="HH:mm:ss a" mode="server" />

即使只使用纯HTML,我也无法正常工作。

另外,我什至都不认为我的时钟小部件都加载了Primefaces样式表。

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui" xmlns:o="http://omnifaces.org/ui"
xmlns:of="http://omnifaces.org/functions">

编辑

看我看到的页面来源 <img src="/AppName/javax.faces.resource/gfx/bug.png.xhtml"

但是我的过滤器与*.xhtmlOrigianlly匹配,我在将url/*更改为*.xhtml固定的html页面中的固定内容,但仍然无法使用facelet。

<filter-mapping>
    <filter-name>OfflineFilter</filter-name>
    <url-pattern>*.xhtml</url-pattern>
</filter-mapping>

所以有一个问题,<h:graphicImage就是将.xhtml附加到我的所有资源上,而这些资源却被排除在外了。

米歇尔·马里奥蒂(Michele Mariotti)

记住要排除资源!!

但是,我会进行重定向:

private static final String MAINTENANCE_PAGE = "/maintenance.jsf";

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException
{
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;

    String servletPath = request.getServletPath();

    LocalTime now = LocalTime.now();
    LocalTime start = LocalTime.parse("06:45:00");
    LocalTime stop = LocalTime.parse("07:00:00");

    // Want to go into maintenance mode every morning between 6:45 and 7:00 am
    if(now.isAfter(start) && now.isBefore(stop) && !servletPath.startsWith(MAINTENANCE_PAGE) && !servletPath.startsWith(ResourceHandler.RESOURCE_IDENTIFIER))
    {
        response.sendRedirect(request.getContextPath() + MAINTENANCE_PAGE);
        return;
    }

    chain.doFilter(req, res);
}

注意,MAINTENANCE_PAGE应该在客户端模式下解决;换句话说,你的Servlet脸前,所以要知道它的映射(的/faces/**.jsf或其他)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Apache TomEE-无法访问“ TomEE GUI”,“服务器状态”,“ Manager应用程序”和“ Host Manager”服务

来自分类Dev

Angular和Coffeescript无法访问单独文件中的应用程序模块

来自分类Dev

网络中的远程计算机无法访问Python Flask应用程序

来自分类Dev

无法访问iTunes Connect中的“我的应用程序”

来自分类Dev

应用程序启动时无法访问文件

来自分类Dev

在桌面应用程序中无法访问mdf文件

来自分类Dev

应用程序在共享托管中保持活动状态,无法访问IIS管理器

来自分类Dev

XAML DataTemplate无法访问应用程序资源

来自分类Dev

Azure Web应用程序无法访问Azure DB

来自分类Dev

无法访问电子应用程序中asar存档中的文件

来自分类Dev

保护JSF应用程序以防止访问WEB-INF文件夹中的应用程序的XML资源

来自分类Dev

在PHP Web应用程序中无法访问Docker环境变量

来自分类Dev

无法访问端口80上的应用程序

来自分类Dev

无法访问将类路径发布为webApp的tomee嵌入式应用程序中的静态html资源

来自分类Dev

无法访问Facebook会话-UnknownError:无效的应用程序

来自分类Dev

Apache TomEE-无法访问“ TomEE GUI”,“服务器状态”,“ Manager应用程序”和“ Host Manager”服务

来自分类Dev

应用程序崩溃,无法访问互联网

来自分类Dev

Angular和Coffeescript无法访问单独文件中的应用程序模块

来自分类Dev

基于Web的应用程序无法访问哪些硬件?

来自分类Dev

Windows 10的通用应用程序无法访问Internet

来自分类Dev

org.omg.CORBA.TRANSIENT:初始和转发的IOR无法访问-应用程序之间

来自分类Dev

无法访问的glXMakeCurrent使C ++应用程序崩溃

来自分类Dev

声音从扬声器发出,应用程序中无法访问音频?

来自分类Dev

在某些应用程序中无法访问已安装的驱动器

来自分类Dev

无法访问 Nginx 的 Ruby on Rails 应用程序

来自分类Dev

无法访问部署在 kubernetes 集群上的应用程序

来自分类Dev

无法访问 EC2 中的 Rails 应用程序,但可以访问 Python

来自分类Dev

在 JSF 应用程序中更改和保存 css 渐变

来自分类Dev

IIS 应用程序池用户无法访问 UNC 驱动器

Related 相关文章

  1. 1

    Apache TomEE-无法访问“ TomEE GUI”,“服务器状态”,“ Manager应用程序”和“ Host Manager”服务

  2. 2

    Angular和Coffeescript无法访问单独文件中的应用程序模块

  3. 3

    网络中的远程计算机无法访问Python Flask应用程序

  4. 4

    无法访问iTunes Connect中的“我的应用程序”

  5. 5

    应用程序启动时无法访问文件

  6. 6

    在桌面应用程序中无法访问mdf文件

  7. 7

    应用程序在共享托管中保持活动状态,无法访问IIS管理器

  8. 8

    XAML DataTemplate无法访问应用程序资源

  9. 9

    Azure Web应用程序无法访问Azure DB

  10. 10

    无法访问电子应用程序中asar存档中的文件

  11. 11

    保护JSF应用程序以防止访问WEB-INF文件夹中的应用程序的XML资源

  12. 12

    在PHP Web应用程序中无法访问Docker环境变量

  13. 13

    无法访问端口80上的应用程序

  14. 14

    无法访问将类路径发布为webApp的tomee嵌入式应用程序中的静态html资源

  15. 15

    无法访问Facebook会话-UnknownError:无效的应用程序

  16. 16

    Apache TomEE-无法访问“ TomEE GUI”,“服务器状态”,“ Manager应用程序”和“ Host Manager”服务

  17. 17

    应用程序崩溃,无法访问互联网

  18. 18

    Angular和Coffeescript无法访问单独文件中的应用程序模块

  19. 19

    基于Web的应用程序无法访问哪些硬件?

  20. 20

    Windows 10的通用应用程序无法访问Internet

  21. 21

    org.omg.CORBA.TRANSIENT:初始和转发的IOR无法访问-应用程序之间

  22. 22

    无法访问的glXMakeCurrent使C ++应用程序崩溃

  23. 23

    声音从扬声器发出,应用程序中无法访问音频?

  24. 24

    在某些应用程序中无法访问已安装的驱动器

  25. 25

    无法访问 Nginx 的 Ruby on Rails 应用程序

  26. 26

    无法访问部署在 kubernetes 集群上的应用程序

  27. 27

    无法访问 EC2 中的 Rails 应用程序,但可以访问 Python

  28. 28

    在 JSF 应用程序中更改和保存 css 渐变

  29. 29

    IIS 应用程序池用户无法访问 UNC 驱动器

热门标签

归档