JavaScriptを使ってHTMLのインクルードを実現しつつ、JSPでもインクルードできる方法

先のエントリにJSP版。これはあまりいけてないなあ。


●呼び出しイメージ
<script type="text/javascript" >//<%
include("a.txt",request,response); //%>
</script>


スクリプト本体
<script type="text/javascript" >

var request; // ←スクリプトエラーとならないように宣言
var response;
function include(filename) {
include.seq = (include.seq)? include.seq + 1: 1;

var id = new Date().getTime() + "-" + include.seq;
var inc = document.createElement("iframe");

inc.id = "inc-" + id;
inc.src = filename;
inc.style.display = "none";
document.body.appendChild(inc);
document.write("<span id=\"" + id + "\"></span>");

var f = function() {
inc = document.getElementById("inc-" + id);
var s = inc.contentWindow.document.body.firstChild.innerHTML;
document.getElementById(id).innerHTML =
s.split("&gt;").join(">").split("&lt;").join("<");
document.body.removeChild(inc);
};
if (window.addEventListener) window.addEventListener('load', f, false);
if (window.attachEvent) window.attachEvent('onload', f);
}

/*<%!
void include(String filename,
javax.servlet.ServletRequest req, javax.servlet.ServletResponse res)
throws Exception {
req.getRequestDispatcher(filename).include(req, res);
}
/**///%>


JSPの場合は、標準ではしかないので、includeメソッドを自作してます。ただ、JSPではメソッド内で暗黙の変数 request, response が使えないため、メソッドの呼び出しのときに引数が必要になってしまいます。残念。