本文为学习佟刚JavaWeb MVC模式笔记
A 深入理解面向接口编程:在类中调用接口的方法,而不必关心具体的实现。这将有利于代码的解耦。使程序有更好的可移植性和可扩展性
B动态修改Customer的存储方式:通过修改类路径下的switch.properties文件的方式来实现
1 .CustomerServlet中不能在通过privateCustomerDAOcustomerDAO= new CustomerDAOXMLImpl();的方式来写死实现类
2 . 需要通过一个类的一个方法来获取具体的实现类的对象
C 当前 WEB 应用才启动的时候,InitServlet 被创建,并由 Servlet 容器调用其 init() 方法:
1.读取类路径下的switch.properties 文件
2.获取 switch.properties 的 type 属性值
3.赋给了 CustomerDAOFactory 的 type 属性值
InitServlet.java如下:<span style="font-size:14px;">package com.ali.mvc.servlet;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import com.ali.mvc.dao.factory.CustomerFactory;
public class InitServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void init() throws ServletException {
super.init();
// 设置默认值
CustomerFactory.getInstance().setType("jdbc");
// 读取类路径下的switch.properties文件
InputStream in = getServletContext().getResourceAsStream(
"/WEB-INF/classes/switch.properties");
Properties properties = new Properties();
try {
properties.load(in);
// 将获得的type付给CustomerFactory的type
String type = properties.getProperty("type");
if (type != null) {
CustomerFactory.getInstance().setType(type);
} else {
CustomerFactory.getInstance().setType("jdbc");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
</span>
并需要在web.xml中进行配置:
<span style="font-size:14px;"><servlet>
<servlet-name>InitServlet</servlet-name>
<servlet-class>com.ali.mvc.servlet.InitServlet</servlet-class>
<span style="color:#ff6666;"><load-on-startup>1</load-on-startup></span>
</servlet></span>
创建 CustomerServlet 时,为 customerDAO 属性赋值是通过CustomerDAOFactory 的 getCustomerDAO() 方法完成的。此时的 type 已经在 InitServlet 中被赋值了。
<span style="font-size:14px;">public class CustomerServlet extends HttpServlet {
// private CustomerDao customerDao = new CustomerDaoXmlImp();
// private CustomerDao customerDao = new CustomerDaoJdbcImp();
<span style="color:#ff0000;">private CustomerDao customerDao = CustomerFactory.getInstance()
.getCustomerDao();</span>
}
</span>
CustomerFactory.java如下:
<span style="font-size:14px;">package com.ali.mvc.dao.factory;
import java.util.HashMap;
import java.util.Map;
import com.ali.mvc.dao.CustomerDao;
import com.ali.mvc.dao.impl.CustomerDaoJdbcImp;
import com.ali.mvc.dao.impl.CustomerDaoXmlImp;
public class CustomerFactory {
private String type = null;
private Map<String, CustomerDao> daos = new HashMap<String, CustomerDao>();
<span style="color:#ff6600;">private CustomerFactory() {
daos.put("jdbc", new CustomerDaoJdbcImp());
daos.put("xml", new CustomerDaoXmlImp());
}
public CustomerDao getCustomerDao() {
return daos.get(type);
}</span>
private static CustomerFactory instance = new CustomerFactory();
public static CustomerFactory getInstance() {
return instance;
}
public void setType(String type) {
this.type = type;
}
}</span>