JSP中的MVC - 标准方法

时间:2013-01-23 06:38:47

标签: jsp model-view-controller

我正在尝试创建一个在线图书订购系统的虚拟项目来练习JSP。我试图跟随MVC。

根据定义,在MVC中,模型中的任何更改都不需要在View / Controller中进行任何更改。

在Model中,我创建了Customer类(具有customer属性及其getter-setters)和CustomerCollection类(对客户数据执行CRUD)

在Controller中,我有一个Controller servlet,它调用CustomerCollection,访问Customer数据并添加客户列表作为请求的属性。

在视图中,我有JSP访问控制器添加的客户列表,并在页面中显示如下:

<table id="customerTable">
                <tr id="customerTableHeaderRow">
                    <th>Id</th>
                    <th>First name</th>
                    <th>Last name</th>
                    <th>Address</th>
                    <th>Phone number</th>
                    <th>Gender</th>
                </tr>
                <%                  
                    for(Customer customer: customers)                        
                    {  
                %>
                <tr class="customerTableRow">
                    <td><%= customer.getId() %></td>
                    <td><%= customer.getFirstName() %></td>
                    <td><%= customer.getLastName() %></td>
                    <td><%= customer.getAddress() %></td>
                    <td><%= customer.getPhoneNumber() %></td>
                    <td><%= customer.getGender() %></td>                    
                </tr>   
                <%      
                    }
                %>
 </table>

但是现在我相信当我对我的数据库进行任何更改时,比如将任何列添加到customers表中,我必须在视图中修改for循环以显示该列的内容,这也是不好的。

这里有什么不对吗?我做错了吗?或者是否有任何标准的方法来做同样的事情

1 个答案:

答案 0 :(得分:0)

在MVC方法中,JSP文件不应包含任何Java代码行,您应该使用JSTL并且servlet类不应包含任何JDBC代码,您应该使用DAO。所以基本上你正确地实现它,只需要进行如下的少量更改。

通过命名约定,您的CustomerCollection应为CustomerDAO。 用JSTL和EL替换Scriptlet。

jsp中的客户可以通过以下方式访问。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<table>
<c:forEach items="${customers}" var="customer">
    <tr>
        <td>${customer.firstName}</td> - access all your attributes this way
    </tr>
</c:forEach>
</table>