モジュール式 Java Web アプリケーションを作成する最良の方法は何ですか [終了]

StackOverflow https://stackoverflow.com/questions/71692

  •  09-06-2019
  •  | 
  •  

質問

私はJavaで小さなWebサイト(JSPビューを備えたSpring MVC)を構築しており、いくつかの再利用可能なモジュール(「最新ニュース」「今後のイベント」など)を作成して組み込むための最良のソリューションを見つけようとしています。

そこで質問は次のとおりです。ポートレット、タイル、またはその他のテクノロジーですか?

役に立ちましたか?

解決

Spring MVC を使用している場合は、ポートレットを使用することをお勧めします。Spring では、ポートレットはページ全体の一部のみを担当し、非常に簡単に作成できるため、軽量のコントローラーにすぎません。Spring 2.5 を使用している場合は、新しいアノテーション サポートのすべての利点を享受でき、それらは依存関係注入を備えた Spring アプリケーション全体にうまく適合し、Spring を使用する他の利点も得られます。

ポートレット コントローラーはサーブレット コントローラーとほぼ同じです。簡単な例を次に示します。

@RequestMapping("VIEW")
@Controller
public class NewsPortlet {

    private NewsService newsService;

    @Autowired
    public NewsPortlet(NewsService newsService) {
        this.newsService = newsService;
    }

    @RequestMapping(method = RequestMethod.GET)
    public String view(Model model) {
        model.addAttribute(newsService.getLatests(10));
        return "news";        
    }
}

ここでは、NewsService が自動的にコントローラーに挿入されます。view メソッドはモデルに List オブジェクトを追加します。これは JSP で ${newsList} として利用可能になります。Spring はメソッドの戻り値に基づいて news.jsp という名前のビューを探します。RequestMapping は、このコントローラーがポートレットの VIEW モード用であることを Spring に伝えます。

XML 設定で必要なのは、ビューとコントローラーの場所を指定することだけです。

<!-- look for controllers and services here -->
<context:component-scan base-package="com.example.news"/>

<!-- look for views here -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/news/"/>
    <property name="suffix" value=".jsp"/>
</bean>

既存のアプリケーションにポートレットを単純に埋め込みたい場合は、次のようなポートレット コンテナをバンドルできます。 エクソ, 太陽, 、 または アパッチ. 。アプリケーションをポートレットのセットとして構築したい場合は、次のような本格的なポータル ソリューションを検討するとよいでしょう。 ライフレイポータル.

他のヒント

タイルは面倒かもしれません。以前のものと比べて大幅に改善されました (例:何もありません)、むしろ制限的です。

ウィケット JSP に落ち着いていない限り、あなたが探しているものはもっとあるかもしれません。

アプリケーションが本当にそうでない限り、ポートレットの使用はお勧めしません。 ウェブポータル.

「再利用可能なコンポーネント」だけが必要な場合は、次を使用します。 JSPタグファイル, これらは通常の JSP と同じであるため、非常にシンプルですが非常に強力です。

私はタイルを使用した経験がありますが、それに伴う複雑さにはそれだけの価値がありません。

私は大ファンです GWT. 。これにより、コンポーネントを通常の Java クラスとして記述し、それらを自由にページに挿入できるようになります。最終的にはすべてが JavaScript にコンパイルされます。

以下に例を示します。

public class MyApplication implements EntryPoint, HistoryListener
{
    static final String INIT_STATE = "status";

    /**
     * This is the entry point method.  Instantiates the home page.
     */
    public void onModuleLoad ()
    {
        RootPanel.get ().setStyleName ("root");
        initHistorySupport ();
    }

    private void initHistorySupport ()
    {
        History.addHistoryListener (this);

        // check to see if there are any tokens passed at startup via the browser’s URI
        String token = History.getToken ();
        if (token.length () == 0)
        {
            onHistoryChanged (INIT_STATE);
        }
        else
        {
            onHistoryChanged (token);
        }
    }


    /**
     * Fired when the user clicks the browser's 'back' or 'forward' buttons.
     *
     * @param historyToken the token representing the current history state
     */
    public void onHistoryChanged (String historyToken)
    {
        RootPanel.get ().clear ();
        Page page;
        if (Page1.TOKEN.equalsIgnoreCase (historyToken))
        {
            page = new Page1 ();
        }
        else if (Page2.TOKEN.equalsIgnoreCase (historyToken))
        {
            page = new Page2 ();
        }
        else if (Page3.TOKEN.equalsIgnoreCase (historyToken))
        {
            page = new Page3 ();
        }
        RootPanel.get ().add (page);
    }
}

私は Ajax JSF (IceFaces) や Liferay Portal と組み合わせたポートレットの経験が豊富ですが、誰にもお勧めしません。チュートリアルを読むとすべてがうまくいき、実際には地獄のように見えます。もちろん、Spring MVC と JSP を使用すると、はるかに便利で軽量になると思いますが、いずれにしても、ポートレットは十分にサポートされているテクノロジーではありません。

この文脈での「再利用可能なコンポーネント」が何を意味するのかは 100% わかりませんが、バナー、フッター、ナビゲーション リンクなど、特定の共通要素をすべてのページに表示したいということであれば、これ以上探す必要はありません。 サイトメッシュ. 。私のチームは、いくつかの国際化された Web アプリケーションでこれを使用して成功しました。

タペストリー は、再利用可能なコンポーネントを簡単に作成することに重点を置いた Java Web アプリ フレームワークです。

私は sitemesh を使用しました。標準のヘッダーとフッターで一連のページをラップするのには適していますが、多くのページで (おそらくページごとに何度も) 使用されるコンポーネントを作成するには、Tapestry の方が適しています。タペストリー コンポーネントは他のコンポーネントをパラメータとして受け取ることができるため、Sitemesh スタイルのラッピングが可能になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top