我的应用程序具有以下模式:FrontController,Command,Service和DAO。
我遇到的问题是我想在我的主页上显示用户列表(以及他们的头像)。我如何ListMembersCommand在没有get / post请求的情况下让我的jsp页面自动调用on页面加载?
ListMembersCommand
你不知道 您要做的就是调用控制器,并将其转发给JSP。您永远不会直接调用JSP。
因此,最终得到的是:
request --- invokes ---> Controller --- forwards to ---> JSP
Controller可以获取所有必需的内容,并在调用JSP呈现所有请求之前适当地填充请求。
附录-
这是一个简单的Servlet,映射到/ 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
充当控制器的Servlet接受请求,然后对请求执行操作(在这种情况下,使用简单的DAO模式从数据库中获取所有成员的列表),然后将结果放入带有标签“成员”(这样request.setAttribute("members", members)做)。
request.setAttribute("members", members)
一种是使用有趣的信息正确填充请求,然后将servlet转发到JSP。
请注意,在这种情况下,JSP位于WEB-INF目录下面。根本无法从浏览器访问位于WEB- INF内的JSP。因此,对http://yourhost/yourapp/WEB- INF/jsp/members.jsp的请求将完全失败。
但是它们内部可以访问。
因此,Servlet将转发到members.jsp,然后进行members.jsp渲染,members从请求中定位值(JSTL c:forEach标记中的$ {members}),然后c:forEach遍历该列表,填充member变量,然后从那里填写表格中的行。
members
member
这是一种经典的“控制器优先”模式,它使JSP不受干扰。它还有助于确保JSP仅位于MVC的View层中。在这个简单的示例中,成员和列表是模型,控制器中的Servlet,而JSP是视图。