【问题标题】:JSP cannot find css files while using ResourceHandlerRegistry.addResourceHandler (Java based webConfig)JSP 在使用 ResourceHandlerRegistry.addResourceHandler(基于 Java 的 webConfig)时找不到 css 文件
【发布时间】:2013-11-12 18:49:10
【问题描述】:

这是我放置我的 css 文件的地方:

这就是我注册此资源的方式:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
     registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}

这就是我从 JSP 中引用这个 css 的方式:

<link type="text/css" href="/css/bootstrap.css" rel="stylesheet"/>

我可以看到有内容但没有样式的 JSP 页面。

我认为错误是在引用时,但我找不到它。我也尝试过这些,但不起作用:

<link type="text/css" href="../css/bootstrap.css" rel="stylesheet"/>

<link type="text/css" href="/resources/css/bootstrap.css" rel="stylesheet"/>

<link type="text/css" href="<%=request.getContextPath() %>/css/bootstrap.css" rel="stylesheet"/>

<link type="text/css" href="<%=request.getContextPath() %>/resources/css/bootstrap.css" rel="stylesheet"/>

有什么想法吗?

编辑: 现在我已将 css 文件夹移至 WebContent。好像是这样的:

还是不行。我应该为 ResourceHandler 注册什么?

registry.addResourceHandler("/WEB-INF/**").addResourceLocations("/WEB-INF/"); ?

我应该如何从 JSP 中引用 css?

【问题讨论】:

    标签: java html css spring jsp


    【解决方案1】:

    默认情况下,资源处理程序不会在类路径上查找资源。它会在 webapp 中查找它们。

    创建一个名为resources 的文件夹并将其放入/src/main/webapp。然后把你的cssjs等文件夹放在那里。

    【讨论】:

    • 默认情况下,资源处理程序不会在类路径上查找资源我不明白“默认”是什么。 registry.addResourceHandler 正是出于这个原因,因此可以注册构建路径上的任何文件..
    • @Cimbom 你的jsps在哪里?这些通常应位于 webcontent 内的 WEB-INF 文件夹中。使用 maven,您可以使用 src/main/webapp 而不是 webcontent
    • @Cimbom 如果要在构建路径中指定文件,资源位置需要以classpath:为前缀。我认为这不是一个好主意。
    • 我正在使用 maven,并且我有一个 webContent 文件夹。请看问题。我更新了它。请定义一个具体的解决方案。
    • @Cimbom 保留您的原始资源注册。创建一个src/main/webapp 文件夹。在 Eclipse 中,将其添加到构建路径中。它现在是一个源文件夹。向其中添加一个名为 resources 的文件夹。将您的 css 文件夹从 src/main/resources 移动到 src/main/webapp/resources
    【解决方案2】:

    src下的文件默认是无法访问的,你应该把这些资产放到WebContent目录下。


    资源通常意味着配置属性,如属性和 xml,它们将被 java代码,assets一般是指浏览器可以直接访问,注意WEB-INF是受保护的,需要把你的css目录放在WebContent下,WEB-INF

    除外

    例如,你可以把你的css目录放在/WebContent/assets/

    并将这些代码添加到您的 jsp 页面的头部

    <%
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + request.getContextPath();
    %>
    
    <link type="text/css" href="<%=basePath%>/assets/css/bootstrap.css" rel="stylesheet"/>
    

    相对路径不好用!!

    【讨论】:

    • 我不明白“默认条件”是什么。 registry.addResourceHandler 正是出于这个原因,因此可以注册构建路径上的任何文件..
    • 您最后的建议无效。 href 看起来像这样“localhost:8080/projectName/assets/css/bootstrap.css”并且找不到文件。这也应该以另一种方式进行,您不必定义basePath。由于我们在这里使用 Spring,我们应该可以轻松注册 css 文件,并且这些文件应该像 jsp 文件本身一样容易访问。我不认为应用程序中的每个 JSP 页面都必须定义或需要这个常量 basePath。
    • 好的。当我将评估文件夹添加为资源时,它可以工作。 registry.addResourceHandler("/assets/**").addResourceLocations("/assets/**")。我现在正试图摆脱这个 basePath..
    • href="../assets/css/bootstrap.css"。没有 basePath。它有效。
    • 也许 WEB-INF 受到保护,即使是 spring 资源处理程序也无法访问它。哈哈
    猜你喜欢
    • 2015-03-22
    • 1970-01-01
    • 2012-05-16
    • 2020-05-30
    • 2016-07-21
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 2013-10-22
    相关资源
    最近更新 更多