0

私のアプリケーションには、FrontController、Command、Service、およびDAOのパターンがあります。

私が抱えている問題は、ホームページにユーザー(およびそのアバター)のリストを表示したいということです。ListMembersCommandget / postリクエストなしで、ページの読み込み時にjspページを自動的に呼び出すにはどうすればよいですか?

4

1 に答える 1

4

あなたはそうしない。あなたがすることは、あなたがコントローラーを呼び出して、JSPに転送する場合に持っていることです。JSPを直接呼び出すことはありません。

したがって、最終的には次のようになります。

request --- invokes ---> Controller --- forwards to ---> JSP

コントローラは、JSPを呼び出してすべてをレンダリングする前に、必要なものをすべてフェッチし、リクエストを適切に入力できます。

補遺-

これは、/MyServletにマップされた単純なサーブレットです。

public class MyServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        MemberDAO dao = DAOFactory.getMemberDAO();
        List<Member> members = dao.getMembers();
        request.setAttribute("members", members);
        RequestDispatcher rd = getServletContext().getRequestDispatcher("/WEB-INF/jsp/members.jsp");
        rd.forward(request, response);
    }
}

そして、これが/WEB-INF/jsp/members.jspに配置された関連するJSPです。

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Members List</title>
    </head>
    <body>
        <h1>Members List</h1>
        <table>
            <tr>
                <td>Member ID</td>
                <td>First Name</td>
                <td>Last Name</td>
            </tr>
            <c:forEach items="${members}" var="member">
                <tr>
                    <td>${member.id}</td>
                    <td>${member.firstName}</td>
                    <td>${member.lastName}</td>
                </tr>
            </c:forEach>
        </table>
    </body>
</html>

ブラウザで、次のコマンドを押します:http:// yourhost / yourapp / MyServlet

コントローラとして機能するサーブレットは、リクエストを受け取り、それに基づいて動作し(この場合、単純なDAOパターンを使用してデータベースからすべてのメンバーのリストを取得します)、結果を「」というタグを付けてリクエストに入れます。メンバー」(request.setAttribute("members", members)これを行います)。

リクエストに興味深い情報が適切に入力されると、サーブレットはJSPに転送されます。

この場合、JSPはWEB-INFディレクトリの下にあることに注意してください。WEB-INF内にあるJSPには、ブラウザからはまったくアクセスできません。したがって、http://yourhost/yourapp/WEB-INF/jsp/members.jspへのリクエストは単に失敗します。

ただし、内部からアクセスできます。

したがって、サーブレットはmembers.jspに転送し、members.jspがレンダリングしmembersて、リクエストから値を見つけます(JSTL c:forEachタグの$ {members})。c:forEachはそのリスト全体を反復処理し、member変数を入力します。そこからテーブルの行に入力します。

これは、JSPを邪魔にならないようにする古典的な「コントローラーファースト」パターンです。また、JSPがMVCのビューレイヤーにのみ存在することを維持するのにも役立ちます。この簡単な例では、Member and the Listがモデルであり、Controllerのサーブレットであり、JSPがビューです。

于 2012-04-06T23:56:51.510 に答える