jsp包括CSS&amp; JS&lt;%@ include%&gt; vs <script> </script>

时间:2014-06-02 16:19:18

标签: javascript css jsp jspinclude

JSP对我来说是新手,我想知道这两个标签在导入 JS CSS 文件时的区别。

我测试过的是我们可以使用它们来在JSP中包含文件。

但是

<script src = "../js/someJavaScript.js"></script>

文件必须 WEB-INF文件夹,而

<%@include file = "../js/someJavaScript.js"%>

我可以访问WEN-INF文件夹中的 中的js文件,但是当我尝试包含jquery-library时, 我收到了这个错误:

org.apache.jasper.JasperException: Impossible de compiler la classe pour la JSP: 

An error occurred at line: 56 in the generated java file
The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit

Stacktrace:
    at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
    at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
    at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:443)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:321)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
    at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1180)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:950)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:619)

CSS &amp; JS 文件必须在WEB-INF文件夹之外?

我知道还有<%@include file="../../*.jsp"/><jsp:include page="../../*.jsp"/> 包括另一个jsp。

有人可以解释这些差异吗?

1 个答案:

答案 0 :(得分:2)

不同之处在于<script src = "../js/someJavaScript.js"></script>将确切的HTML放在输出中,浏览器再次调用服务器来获取JS文件。虽然<%@include file = "../js/someJavaScript.js"%>将JS文件的内容放在输出中,这意味着您需要在其周围包装脚本标记:<script><%@include file = "../js/someJavaScript.js"%></script>。最好使用第一种方法,因为在HTML文件中打印一堆Javascript本身很混乱,看起来不专业,而且浪费带宽。当我说“HTML文件本身”时,我指的是主JSP返回给浏览器的HTML。在浏览器中查看您的来源以查看差异。

  

CSS&amp; JS文件必须在WEB-INF文件夹之外?

当然,WEB-INF中的所有内容都可用于服务器端代码。但除非在web.xml中映射,否则客户端可以直接访问WEB-INF下的任何内容,因此当您以需要浏览器进行另一次调用来获取它的方式引用javascript / css时(更好的方式),如果你在WEB-INF下有CSS / JS。

  

方法代码_jspService(HttpServletRequest,HttpServletResponse)超出65535字节限制

尝试包含jquery库时出现的错误是因为JS文件非常大。这是引用JS文件并让浏览器单独下载的一个原因。想象一下,如果您在网站的每个页面中直接包含65535字节JS文件的文本!但是,如果在每个页面中您引用了相同的内容并让浏览器自行下载,则浏览器可以缓存它,而不必每次都下载它。它节省了带宽。