<jsp:include page=""/> action和<c:import url=""/> jstl tag都是動態加載。但是c:import則更為靈活。jsp:include只能include當前web app下的頁面,而c:import則可以從外部容器加載內容。
動態加載和靜態加載最根本的不同在於,jsp生成的servlet的不同。在tomcat下靜態(include directive)和動態(include action)的_jspService()代碼如下:
- out.write(“<html><body>\r”);
- <span style="font-family: webdings;">out.write(“\r<html>\r<body>\r<img src=\”images/Web-Services.jpg\” >
- <br>\r<em><strong>We know how to make SOAP suck less.</strong></em> <br>\r\r
- </body>\r</html>\r”);</span>
- out.write(“\r<br>\r\r\r<em>We can help.</em> <br><br>\r\rContact us at: “);
- out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.
- proprietaryEvaluate(“${initParam.mainEmail}”, java.lang.String.class,
- (PageContext)_jspx_page_context, null, false));
- out.write(“\r\r\r</body></html>”);
而動態的則是:
- out.write(“<html><body>\r”);
- <span style="font-family: webdings;">org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response,
- “Header.jsp”, out, false);</span>
- out.write(“\r<br>\r\r\r<em>We can help.</em> <br><br>\r\rContact us at: “);
- out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.
- proprietaryEvaluate(“${initParam.mainEmail}”, java.lang.String.class,
- (PageContext)_jspx_page_context, null, false));
- out.write(“\r\r\r</body></html>”);
可以看到靜態的是將要include的頁面直接寫在了servlet里面,這樣當servlet生成之后,就不能修改了。動態的則不同,運行時才會導入頁面。
另外jsp:include和c:import可以分別使用jsp:param和c:param來設置參數來控制要include的頁面。

