public class RequestProcessorFactory {
public static RequestProcessor getRequestProcessor(String requestType,
String paraStr) {
RequestProcessor processor = null;
if ("PRODUCT_REQUEST".equals(requestType)) {
processor = new ProductRequestProcessor(paraStr);
} else if ("LOCATION_REQUEST".equals(requestType)) {
processor = new LocationRequestProcessor(paraStr);
} else if ("ADDRESS_REQUEST".equals(requestType)) {
processor = new AddressRequestProcessor(paraStr);
}
return processor;
}
}
public abstract class RequestProcessor {
protected abstract ........; //抽象方法,需要在子类中实现
}
public class AddressRequestProcessor extends RequestProcessor {
protected …… ; //父类中声明的需要在不同子类中定义的方法
}
public class LocationRequestProcessor extends RequestProcessor {
protected …… ; //父类中声明的需要在不同子类中定义的方法
}
public class ProductRequestProcessor extends RequestProcessor {
protected …… ; //父类中声明的需要在不同子类中定义的方法
}
这样客户端只需要创建具体工厂的实例,然后调用工厂对象的工厂方法就可以得到所需要的产品对象。
服务端的设计模式大概就这样了,接下来是数据库服务器与服务端之间的交互设计,本项目采用的是Hibernate,即符合Java习惯的关系数据库持久化语言,它对JDBC进行了非常轻量级的对象封装,使得我们可以随心所欲的使用对象编程思维来操纵数据库,Hibernate的大部分方法都封闭在一个辅助类HibernateUtil中,这是一个用来管理Hibernate Session的类,使用线程本地来存储Session,我们只需调用里面的currentSession方法获取当前session状态,以及closeSession方法关闭当前Session即可。另外还需要学会如何配置hibernate的配置与映射文件,网上很多教程,这里就不多说了。最后关于数据库的查询语言,假如数据库需要批量处理大数据时,那么对数据库的查询效率要求就比较高,这时HQL可能会是一个比较好的选择,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。但由于本人对HQL不是很了解,所以也只是采用SQL语言来操作。
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
super.init();
HibernateUtil.getCurrentSession();
HibernateUtil.closeSession();
System.out.println("数据库连接成功!");
}
之后通过继承HttpServlet中的doPost方法来完成客房端发来的请求,首先设置请求的编码格式,再获取请示的类型与参数,通过请求工厂类生成具体的请求对象实例,最后处理请求获得结果。大功告成。
/**
* 处理post请求
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println(req.getSession().getServletContext().getRealPath(
getServletInfo()));
resp.setCharacterEncoding("utf-8");
//获取请求类型与请求参数
String requestType = req.getHeader("RequestType");
String parameter = req.getHeader("RequestParameter");
//生成请求
RequestProcessor requestProcessor = RequestProcessorFactory
.getRequestProcessor(requestType, parameter == null ? null
: URLDecoder.decode(parameter, "UTF-8"));
if (null == requestProcessor) {
return;
}
//处理请求
String result = requestProcessor.getResult();
//记录请求的处理状态
if (requestProcessor.getStatusCode() == StatusCode.STATUS_SUCCESS) {
……
} else {
……
}
}