私のアプリケーションには、FrontController、Command、Service、およびDAOのパターンがあります。
私が抱えている問題は、ホームページにユーザー(およびそのアバター)のリストを表示したいということです。ListMembersCommand
get / postリクエストなしで、ページの読み込み時にjspページを自動的に呼び出すにはどうすればよいですか?
あなたはそうしない。あなたがすることは、あなたがコントローラーを呼び出して、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がビューです。