目录
一:让中央控制器动态加载存储子控制器
package com.zhoujuan.framework;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;
import com.zhoujuan.web.BookAction;
/**
* 中央控制器
* 主要职能:接受浏览器请求,找到对应的处理人
* @author zjjt
*
*/
//@WebServlet("*.action")
public class DispatcherServlet extends HttpServlet{
// private Map<String, Action> actions=new HashMap<String, Action>();
/**
* 通过建模我们可以知道,最终configModel对象会包含config.xml中的所有子控制器
* 同时为了解决中央控制器能够动态加载保存子控制器的信息,那么我们只需要引入configModel对象即可
*
*/
private ConfigModel configModel;
// 程序启动,只会加载一次
@Override
public void init() throws ServletException {
// actions.put("/book", new BookAction());
// actions.put("/order", new BookAction());
try {
// 配置地址
// getInitParameter的作用是拿到web.xml中的servlet信息配置
String configLocation = this.getInitParameter("configLocation");
if(configLocation==null||"".equals(configLocation))
configModel =ConfigModelFactory.bulid();
else
configModel=ConfigModelFactory.bulid(configLocation);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String uri = req.getRequestURI();
// 拿到/book,就是最后一个/到最后欢迎.为止
uri=uri.su