Model
value包负责将数据库对象转为POJO
entity则是业务中于数据库交互的部分
form包负责将表单数据进行打包
Control
control包核心控制器,只有一个ActionServlit 负责转发调用action
action 处理业务
View
jsp
control类,暂时封装到这里,再往写应该读写xml配置文件了
package control;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.InvocationTargetException;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import action.IAction;
import action.LoginAction;
import form.AbstractForm;
import form.IActionForm;
import form.LoginForm;
public class ActionServlet extends HttpServlet {
private AbstractForm form;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 某个form,填充字段数据
// 不同form的字段不同
// 相同的是reset,set字段validate()
String path = request.getRequestURI();
Logger log = Logger.getLogger("control");
log.info(path);
if (path.endsWith("login.do")) {
String msg = fillForm(request, new LoginForm());
beforeAction(request, response, msg, "login.jsp");
if (msg != null) {
return;
}
doAction(request, response, new LoginAction(), "index.jsp",
"login.jsp", "用户名或密码不存在");
}
if (path.endsWith("logout.do")) {
}
if (path.endsWith("showProducts.do")) {
}
if (path.endsWith("addProduct.do")) {
}
if (path.endsWith("deleteProducts.do")) {
}
}
private String fillForm(HttpServletRequest request, AbstractForm form) {
// this.form = form;
form.reset();
form.setParamaters(request, form);
return form.validate();
}
private void beforeAction(HttpServletRequest request,
HttpServletResponse response, String msg, String msgForwardURI)
throws ServletException, IOException {
if (msg != null) {
request.setAttribute("msg", msg);
request.getRequestDispatcher(msgForwardURI).forward(request,
response);
}
}
private void doAction(HttpServletRequest request,
HttpServletResponse response, IAction action,
String actionSuccessURI, String actionFailedURI,
String actionFailedMsg) throws ServletException, IOException {
String actionforward = action.execute();
if (actionforward.equals("success")) {
request.getRequestDispatcher(actionSuccessURI).forward(request,
response);
} else {
request.setAttribute("msg", actionFailedMsg);
request.getRequestDispatcher(actionFailedURI).forward(request,
response);
}
}
}
package form;
public interface IActionForm {
String validate();
void reset();
}
模版模式
package form;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.logging.Logger;
import javax.servlet.http.HttpServletRequest;
public abstract class AbstractForm implements IActionForm {
private Field[] fileds;
private Class cls;
protected final void setClass(Class cls) {
this.cls = cls;
}
protected final void fillFiledName() {
fileds = cls.getDeclaredFields();
}
/**
* field声明类型需要为string
* */
protected final void setParamaters1(HttpServletRequest request, Object obj) {
for (Field f : fileds) {
Class type = f.getType();
String fname = f.getName();
StringBuffer sbuffer = new StringBuffer("set");
sbuffer.append(fname.substring(0, 1).toUpperCase());
sbuffer.append(fname.substring(1));
Logger log = Logger.getLogger("form");
log.info("field:" + fname + " type:" + type + " method:" + sbuffer);
Method method;
try {
method = cls.getDeclaredMethod(sbuffer.toString(), type);
method.invoke(obj, request.getParameter(fname));
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
public final void setParamaters(HttpServletRequest request, Object obj) {
setClass(obj.getClass());
fillFiledName();
setParamaters1(request, obj);
}
}
package form;
public class LoginForm extends AbstractForm {
private String username;
private String passwrod;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPasswrod() {
return passwrod;
}
public void setPasswrod(String passwrod) {
this.passwrod = passwrod;
}
public void reset() {
username = "";
passwrod = "";
}
public String validate() {
if (username.equals("")) {
return "用户名不能为空";
}
if (passwrod.equals("")) {
return "密码不能为空";
}
return null;
}
}
package action;
public class LoginAction implements IAction {
public String execute() {
return "success";
}
}