思维导图(***)

?
解决子控制器初始化问题 缺陷:需要频繁改动init中代码;
解决方案:
? ? ? ? 1.必须有配置文件 config.xml ? ? ? ? 2.配置文件config.xml中要包含处理业务的子控制器 ? ? ? ? 3.读取到配置文件config.xml中的对应的处理浏览器请求的子控制器
代码:
DispatchServlet
package com.djj.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.djj.web.BookAction;
import com.djj.web.GoodsAction;
@WebServlet("*.action")
public class DispatchServlet extends HttpServlet {
// private Map<String, ActionSupport> actions = new HashMap<String, ActionSupport>();
private ConfigModel configModel = null;
@Override
public void init() throws ServletException {
try {
configModel = ConfigModelFactory.build();
} catch (Exception e) {
e.printStackTrace();
}
// actions.put("/book", new BookAction());
// actions.put("/goods", new GoodsAction());
// actions.put("/order", new BookAction());
// actions.put("/OrderItem", new BookAction());
}
@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();
uri = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf("."));
// action=BookAction
// ActionSupport action = actions.get(uri);
ActionModel actionModel = configModel.pop(uri);
String type = actionModel.getType();
ActionSupport action;
try {
action = (ActionSupport) Class.forName(type).newInstance();
// ActionSupport action = new BookAction()
if(action instanceof ModelDriver) {
ModelDriver m = (ModelDriver) action;
Object obj = m.getModel();
//
Map<String, String[]> parameterMap = req.getParameterMap();
// PropertyUtils.getProperty(obj, "")
BeanUtils.populate(obj, parameterMap);
}
// execute->delete
String res = action.execute(req, resp);
ForwardModel forwardModel = actionModel.pop(res);
if(forwardModel.isRedirect()) {
resp.sendRedirect(req.getContextPath()+forwardModel.getPath());
}else {
req.getRequestDispatcher(forwardModel.getPath()).forward(req, resp);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
GoodsAction
package com.djj.web;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.djj.framework.ActionSupport;
public class GoodsAction extends ActionSupport {
public void add(HttpServletRequest req, HttpServletResponse resp) {
System.out.println("goodsDao.add()...");
}
public void edit(HttpServletRequest req, HttpServletResponse resp) {
System.out.println("goodsDao.edit()...");
}
public void delete(HttpServletRequest req, HttpServletResponse resp) {
System.out.println("goodsDao.delete()...");
}
public void list(HttpServletRequest req, HttpServletResponse resp) {
System.out.println("goodsDao.list()...");
}
}
运行结果:

?解决参数实体类分装问题:
对于前端传参,实体类属性封装req.getparameter("")代码 是重复的;
解决方案:泛型+反射;
代码:
BookAction
package com.djj.web;
import java.io.IOException;
import java.lang.reflect.Field;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.djj.entity.Book;
import com.djj.framework.ActionSupport;
import com.djj.framework.ModelDriver;
public class BookAction extends ActionSupport implements ModelDriver<Book>{
private Book book = new Book();
// execute
private String delete(HttpServletRequest req, HttpServletResponse resp) {
System.out.println("BookAction调用bookDao.delete()...");
// try {
// req.getRequestDispatcher("/bookList.jsp").forward(req, resp);
resp.sendRedirect("/bookList.jsp");
// this.list(req, resp);
// } catch (Exception e) {
// e.printStackTrace();
// }
return "toList";
}
private void add(HttpServletRequest req, HttpServletResponse resp) {
System.out.println("BookAction调用bookDao.add()...");
}
private String list(HttpServletRequest req, HttpServletResponse resp) {
System.out.println("BookAction调用bookDao.list()...");
// try {
// req.getRequestDispatcher("/bookList.jsp").forward(req, resp);
// } catch (Exception e) {
// e.printStackTrace();
// }
return "list";
}
private void ref(HttpServletRequest req, HttpServletResponse resp) {
// Book book = new Book();
// book.setBid(req.getParameter("bid"));
// book.setBname(req.getParameter("bname"));
// book.setPrice(req.getParameter("price"));
// book.setAuthor(req.getParameter("author"));
// book.setPublish(req.getParameter("publish"));
System.out.println(book);
System.out.println("BookAction调用bookDao.ref(book)...");
}
@Override
public Book getModel() {
return book;
}
}
运行结果:

?
|