在每个 jsp 页面中包含 css 和 js 文件

Posted

技术标签:

【中文标题】在每个 jsp 页面中包含 css 和 js 文件【英文标题】:Include css and js file in every jsp page 【发布时间】:2015-01-18 00:13:36 【问题描述】:

我在每个 jsp 文件中都有常用的 css 和 js 文件。

那么将它们包含在每个页面中的最佳做法是什么?

我曾经使用<%@ include file="header.jsp" %>,但我想知道这是否是最好和最干净的方式。

【问题讨论】:

【参考方案1】:

我喜欢为此使用片段,它们是 JSP 支持的标准,因此不需要其他依赖项。正如您将看到的那样,它还会带来许多其他好处。

创建标签(parentpage.tag):

<%@tag description="Base page" pageEncoding="UTF-8" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

<%@attribute name="extra_css" fragment="true" %>
<%@attribute name="footer" fragment="true" %>
<%@attribute name="header" fragment="true" %>

<html>
<head> ....
// insert css that is needed for every page
<jsp:invoke fragment="extra_css"/>
<jsp:invoke fragment="header"/>
<jsp:doBody/>
<jsp:invoke fragment="footer"/>

然后您创建从该标签继承的单个页面

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
<t:parentpage>

    <jsp:attribute name="extra_css">
        // custom css for this page 
    </jsp:attribute>
    <jsp:attribute name="footer">
        // footer content
    </jsp:attribute>
    <jsp:body>
       // body content
    </jsp:body>

</t:parentpage>

【讨论】:

【参考方案2】:

您可以在您的web.xml 中尝试不使用任何框架:

<jsp-config>
   <jsp-property-group>
     <display-name>Display</display-name>
     <url-pattern>*.jsp</url-pattern>
     <el-ignored>false</el-ignored>
     <scripting-invalid>false</scripting-invalid>
     <is-xml>false</is-xml>
     <include-prelude>/template/header.jsp</include-prelude><!-- header -->
     <include-coda>/template/footer.jsp</include-coda><!-- footer -->
   </jsp-property-group>
 </jsp-config>

查看更多here

【讨论】:

我认为这不是一个好的解决方案,原因有 3 个。首先,行为取决于您的 servlet 容器/应用程序服务器,请查找与特定编辑器无关的单个文档(您链接了 weblogic 文档)。其次,它根本不灵活。第三,如果你使用 Servlet 3.0,你可能根本就没有 web.xml! @alain.janinm ,它是一个如何使用它的例子 是的,当然 :) 没问题,这就是我没有投反对票的原因。我只是认为这不是最好的解决方案。 (但它仍然是一个可行的解决方案,我同意) @alain.janinm 我找不到任何明确的标准规范,但看起来应该到处都支持。看看这些:docs.oracle.com/javaee/5/tutorial/doc/bnajg.htmloracle.com/webfolder/technetwork/jsc/xml/ns/javaee/index.html#5【参考方案3】:

是的!将所有 css 和 js 定义在一个 jsp 中,然后将该 jsp 包含在所有页面/jsp 中,这是一个不错的选择。

当您使用 spring 时,我建议您使用瓷砖 https://tiles.apache.org/,这是制作标准布局然后在您的所有 jsp 中使用该布局的更好方法。

【讨论】:

但是我的方法不是一样吗?使用瓷砖我会赢什么? 看到这个spring.io/blog/2012/10/30/…【参考方案4】:

最好的解决办法是使用JSP Tag File。 它允许使用标签文件封装可重用的内容:Java doc ref

这是一个很好的例子:https://***.com/a/3257426/1140748

【讨论】:

【参考方案5】:

使 JavaScript 和 CSS 外部化。

在现实世界中使用外部文件通常会产生更快的页面,因为 javascript 和 CSS 文件由浏览器缓存。每次请求 HTML 文档时,都会下载 HTML 文档中内联的 JavaScript 和 CSS。这会减少所需的 HTTP 请求数量,但会增加 HTML 文档的大小。另一方面,如果 JavaScript 和 CSS 在浏览器缓存的外部文件中,则 HTML 文档的大小会减小,而不会增加 HTTP 请求的数量。

点击以下链接获取更多信息:

“https://developer.yahoo.com/performance/rules.html”

“include external java script file in jsp page ”

【讨论】:

以上是关于在每个 jsp 页面中包含 css 和 js 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 node.js 在 html 中包含静态文件

如何从节点包中包含 css/js 文件?

WebStorm 内置 Web 服务器为 index.html 中包含的每个 css 和 js 文件获取 404

在 laravel 5.3 中添加 css 和 js 文件

在 Node.js 中包含 CSS 和 JS 文件

如何在Nuxt.js项目的页面中包含CSS