本仕様書では、Apache VelocityテンプレートエンジンにおけるJavaScript実行の仕組みと、Java処理からブラウザでの最終描画までの処理フローについて説明します。
重要: Velocity自体がJavaScriptを実行するのではなく、JavaScriptコードを含むHTMLを生成して、それがブラウザで実行される。
<script>
var data = {
title1: "$data.title1",
title2: "$data.title2",
title3: "$data.title3"
};
// JavaScriptロジック
</script>
<script>
var recommendData = $jsonData;
processRecommendations(recommendData);
</script>
#foreach($item in $recommendations)
<script>
addRecommendation("$item.title", "$item.description");
</script>
#end
<html>
<head>
<script>
console.log("1. headで実行"); // HTMLの解析中に即座に実行
</script>
</head>
<body>
<div id="content">コンテンツ</div>
<script>
console.log("2. bodyで実行"); // この位置で即座に実行
</script>
</body>
</html>
// DOM構築完了後(画像等は未完了でもOK)
document.addEventListener('DOMContentLoaded', function() {
console.log("DOM構築完了");
});
// ページ全体(画像等も含む)の読み込み完了後
window.addEventListener('load', function() {
console.log("ページ全体の読み込み完了");
});
<!-- HTMLの解析をブロックせずに並行実行 -->
<script async src="script.js"></script>
<!-- HTMLの解析完了後に実行 -->
<script defer src="script.js"></script>
<body>
<div id="recommendations"></div>
<!-- Velocityでデータ埋め込み -->
<script>
var data = {
titles: ["$data.title1", "$data.title2", "$data.title3"]
};
</script>
<!-- DOM構築完了後に実行 -->
<script>
document.addEventListener('DOMContentLoaded', function() {
// この時点でHTMLは全て解析済み
// JSONからの追加データ取得・描画処理
});
</script>
</body>
ユーザ → TOPリクエスト → Java → Velocity → ブラウザ → 非同期JS実行 → 最終描画
参考ファイル: Java処理シーケンス図.puml
.png)
作成日: 2024年
対象: Java + Velocity + JavaScript 連携システム