(JSP 页面) 实例化以从数据库中读取数据的类。如果查看最后一个定义的 bean phonebookJdbcDataProvider,则 Spring 容器将注入 PhonebookDao 对象以实现 IoC。现在回头再看 图 3 应当更有意义。
清单 8. 客户机 (JSP) 的电话本 DataProvider 服务
/*
* PhonebookDataProvider.java
* This class works as a Service Provider class for your application
*/
public class PhonebookDataProvider {
private IPhonebookDAO pbDao;
/** Creates a new instance of PhonebookDataProvider */
public PhonebookDataProvider() {
}
public void setPbDao(IPhonebookDAO pbDao) {
this.pbDao = pbDao;
}
public List getPhonebookEntries() throws Exception{
return pbDao.getPhonebookEntries();
}
}
将主页从 home.jsp 更改为 home-dao.jsp
现在来了解一下 JSP 如何利用 PhonebookDataProvider 服务。正如在 清单 9 所 见,客户机只需要三行代码就可以获取电话本条目的列表。所有 JDBC 细节都已被处理;也无需显式的错 误处理代码。它就是一段干净的代码,而且具有高可配置性并易于测试!
JSP 中的代码将获取电 话本条目的列表并迭代这些条目来填充视图。清单 9 提供了一个代码小片段来展示如何将这段代码添加 到 JSP 中。
Apache Geronimo和Spring框架,第3部分: 集成DAO与ORM(12)
时间:2011-10-13 IBM Arun Chhatpar
清单 9. home-dao.jsp 将透明地使用 JDBC DAO 动态装入来自数据库的数据
...
<%
try{
WebApplicationContext ctx =
WebApplicationContextUtils.getWebApplicationContext(application);
PhonebookDataProvider pb = (PhonebookDataProvider)
ctx.getBean ("phonebookJdbcDataProvider");
List pbDetails = pb.getPhonebookEntries();
%>
<html>
...
<!-- Dynamically populate all the fields read from the database -->
<%
for (int i=0; pbDetails!=null && i<pbDetails.size();i++){
PhonebookEntry pbEntry =
(PhonebookEntry)pbDetails.get(i);
% >
<TR>
<TD align=center><input type=checkbox name=cb_1
alt="Select to Delete" align="middle"></TD>
<TD align=center><% =pbEntry.getFName()+"
"+pbEntry.getLName()%></TD>
<TD
align=center><%=pbEntry.getHomeNumber()%></TD>
<TD
align=center><%=pbEntry.getWorkNumber()%></TD>
<TD
align=center><%=pbEntry.getCellNumber()%></TD>
<TD
align=center><%=pbEntry.getEmail()%></TD>
</TR>
</html>
...
略微更改 PhonebookController servlet
最后一项任务是使 PhonebookController servlet 识别这个新的 JSP 页面。清单 10 中的代码无需过多解释。控制器将基于 URI 返回相应的视图。
清单 10. PhonebookController 被更改为处理其他请求
/*
* This class is a simple Spring Controller. This controller is registered
* as a Bean in the Phonebook ApplicationContext.
*/
public class PhonebookCo
|