1. ホーム
  2. javascript

[解決済み] JSPをjavascriptに埋め込むには?

2022-02-10 08:31:50

質問事項

JSPでデータベースを読み込むプロジェクトを行っていますが、そのデータはjavascriptでgoogleマップ(地図上の点)を描画するために使用されています。javascriptでNoSQLデータベースにアクセスする方法が分からないので、javascriptにJSPを埋め込んでデータにアクセスし、javascriptにデータを供給する方法として考えています。

この機能についていろいろ検索してみたんですが、こんな感じのコードが欲しいです。

var a = <%=data %>

スクリプト(.js)とindex.jspを制御するにはどうしたらいいでしょうか?

ありがとうございます。

解決方法は?

Javaコードはサーバー上で動作します。つまり、アプリケーションサーバー上で動作し、ビュー(この場合、JSP)のレンダリングを支援します。JavaScriptはクライアント側で実行されます。つまり、クライアントのブラウザ(Internet Explorer、Firefox、Chrome、など)上で実行されます。というわけで、現在のコードからすると

var a = <%=data %>;

仮定の話 dataString という値を持ち "Hello World" の場合、生成されるHTML/JSは次のようになります。

var a = Hello World;

というエラーが出ます。そこで、変数を引用符で囲む必要があります。

var a = '<%=data %>';

これで、生成されます。

var a = 'Hello World';


リストや複雑な構造体、複雑な構造体のリストをサーバーからクライアントに渡すような、より複雑な通信の場合は、JSONのようなデータ交換のための共通のフォーマットを使用する方がよいでしょう。サーバからJSON文字列にデータをマーシャルして(できればServletの中で)、それをJavaScript側に簡単に渡すことができるのです。例えば、JavaのJackson Libraryを使うなど。

@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws IOException {
        List<ComplexObject> complexObjectList = ... //get your data
        request.setAttribute("complexObjectList", OBJECT_MAPPER.writeValueAsString(complexObjectList));
        //forward to the desired view...
        request.getRequestDispatcher("/WEB-INF/theView.jsp").forward(request, response);
    }
}

そして、JSPで ( 表現言語 というのも スクリプトレットの使用は避けてください。 ):

<script type="text/javascript">
    var complexObjectList = JSON.parse('${complexObjectList}');
    //play with your new object in JavaScript side...
</script>