0

SiteBricksユーザーガイドの例を次に示します。

<html>
<body>
    @ShowIf(true)     <----- I'm impressed with this line
    <p>${message} from Sitebricks!</p>
</body>
</html>

それがどのように実装されているのか興味がありますか?(つまり、sitebricksの作成者がjspからサーブレットへの変換をどのようにそしてどのエントリポイントで強化できたのでしょうか?)

アイデアをありがとう!

4

3 に答える 3

2

おそらく JSP ではなく、独自のテンプレート言語です。フレームワークは、テンプレートを構造化された xml + 注釈として解析する必要があります。次に、その場でコンパイルされる Java コードに変換されます。

于 2011-07-17T08:59:28.377 に答える
1

これを行うフィルターはありません。再帰下降パーサーと呼ばれるものを使用する独自のテンプレートロジックがあります。

この種の注釈解析を実行することは、実際には重要な問題です。最初に行うことは、Jsoupを使用してHTML全体をDOMのようなツリーとして丸呑みすることです。Jsoupは、HTMLをXMLのような構造に正規化する処理を行います(ただし、正確ではありません)。

次に、このツリーを下って、Javaオブジェクトとして「レンダラー」の並列ツリーを構築します。各レンダラーには、HTMLの吐き出し、値がtrueの場合の表示などの特定の処理を実行する機能があります。レンダラーツリーがHTMLツリーと一致する場合、ShowIfがfalseを返すと、ブランチ全体もその下に表示されます。

ページ埋め込みなどの内部で行われているより複雑なことがいくつかありますが、これがその要点です。優しい言葉をありがとう!

Dhanji、作成者、Sitebricks&Guiceサーブレット。

于 2013-01-03T03:41:49.643 に答える
1

応答本文に書き込まれた内容をインターセプトし、それに応じて装飾し、 aFilterと aを使用して最終的な応答本文を変更することができます。HttpServletResponseWrapper少なくともgetWriter()はオーバーライドされているため、カスタム実装が返されます。

例えば

chain.doFilter(request, new FooResponse((HttpServletResponse) response));

public class FooResponse extends HttpServletResponseWrapper {

    public FooResponse(HttpServletResponse response) {
        super(response);
    }

    public Writer getWriter() throws IOException {
        // ... Here a custom one is returned.
    }

}

そのライターは、たとえば、応答を行ごとにバッファリングし、書き込まれた文字を解析し、文字を含む行をスキャンし@Foo、次の行に応じてアクションを実行します。

于 2011-07-17T08:35:08.550 に答える