Java JSPのヘッダ部分などを共通化して再利用

はじめに

下記のようなファイル構成になることはよくあると思います。 何らかのフレームワークを使っていれば、同じパターンの箇所は部品化して再利用もできるのですが、 JSPの基本的な機能だけでも効率化はできます。

<%-- 
    Author     : tool-taro.com
--%>

<%@page contentType="text/html" pageEncoding="UTF-8" session="false" %>
<!DOCTYPE html>
<html>
    <!-- headの内容が皆同じ -->
    <head>
        <title>tool-taro.com</title>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <script src="//code.jquery.com/jquery-2.2.0.min.js"></script>
    </head>
    <body>
        index.jsp
    </body>
</html>
<%-- 
    Author     : tool-taro.com
--%>

<%@page contentType="text/html" pageEncoding="UTF-8" session="false" %>
<!DOCTYPE html>
<html>
    <!-- headの内容が皆同じ -->
    <head>
        <title>tool-taro.com</title>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <script src="//code.jquery.com/jquery-2.2.0.min.js"></script>
    </head>
    <body>
        index2.jsp
    </body>
</html>

今回は、\~\までを部品化する対応をしてみます。 簡単に言えば、部品化した部分を別のheader.jspとして定義し、 もとのindex.jspおよびindex2.jspからincludeします。

実装例

header.jspを用意します。

<%-- 
    Author     : tool-taro.com
--%>

<%@page contentType="text/html" pageEncoding="UTF-8" session="false" %>
    <head>
        <title>tool-taro.com</title>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <script src="//code.jquery.com/jquery-2.2.0.min.js"></script>
    </head>

次に、index.jspおよびindex2.jspからheader.jspをincludeしますが、includeには2つの方法があります。

\<%@ include %>タグ 初回include時にincludeする側に取り込まれます。 その後、includeされる側をいくら更新しても変更は反映されません。 includeする側を更新すると、変更が反映されます。 パフォーマンスの面では無駄がないですが、変更の反映については注意が必要です。

\<jsp:include />タグ includeする側が実行される度に、includeされる側へのリクエストが発生し、 その結果をincludeする側が取り込んで表示します。 includeされる側、includeする側、それぞれ常に最新の結果が得られます。

今回は\<jsp:include />タグでやってみます。

<%-- 
    Author     : tool-taro.com
--%>

<%@page contentType="text/html" pageEncoding="UTF-8" session="false" %>
<!DOCTYPE html>
<html>
    <jsp:include page="header.jsp" flush="true" />
    <body>
        index.jsp
    </body>
</html>
<%-- 
    Author     : tool-taro.com
--%>

<%@page contentType="text/html" pageEncoding="UTF-8" session="false" %>
<!DOCTYPE html>
<html>
    <jsp:include page="header.jsp" flush="true" />
    <body>
        index2.jsp
    </body>
</html>

重複部分がすっきりしました。

動作確認

index.jspの実行結果を見てみましょう。

<!DOCTYPE html>
<html>
    


    <head>
        <title>tool-taro.com</title>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <script src="//code.jquery.com/jquery-2.2.0.min.js"></script>
    </head>

    <body>
        index.jsp
    </body>
</html>

includeしている箇所は改行が入っていますが、 header.jspの内容がきちんとincludeされているのがわかります。

この後、header.jspだけを編集し、再度index.jspの実行結果を確認したところ、 header.jspの変更箇所がきちんと反映されていることも確認しました。

環境

Webツールも公開しています。 Web便利ツール@ツールタロウ