目录
1.初版的增删改查改进
2.反射优化
3.mvc工作原理及对应打码
1.初版的增删改查改进
上述问题
1.关于单个实体类/表操做场越多,需要新建的类也就越多,造成了项目中类的数量过于庞大
目前增删该查的方法
增加
删除
修改
查看
实际操作
2.反射优化
类数量过多问题的优化
增加
删除
修改
查看
回显
servlet展示
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 为了区分当前请求的目的,增删改查的目的,就从前台要调用的方法名传递到后台
String methodName=request.getParameter("methodName");
// methodNamek可能是add/del/edit
// 前台传递什么方法就调用当前类的对应方法
try {
Method m = this.getClass()//BookSerlvet
.getDeclaredMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
m.setAccessible(true);
// 调用当前类实例的methodName方法
m.invoke(this,request,response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// if("add".equals(methodName)) {
如果前台传递到后台是一个增加的请求,那么后台就调用增加的方法
// add(request,response);
// }
// else if("del".equals(methodName)) {
// del(request,response);
// }
// else if("edit".equals(methodName)) {
// edit(request,response);
// }
// else if("list".equals(methodName)) {
// list(request,response);
// }
}
// 方法
private void list(HttpServletRequest request, HttpServletResponse response) {
System.out.println("在同一个orderservlet调用查看方法");
}
private void edit(HttpServletRequest request, HttpServletResponse response) {
System.out.println("在同一个orderservlet调用修改方法");
}
private void del(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
System.out.println("在同一个orderservlet调用删除方法");
}
private void add(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
System.out.println("在同一个orderservlet调用增加方法");
}
private void load(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
System.out.println("在同一个orderservlet调用回显方法");
}
代码执行
3.mvc工作原理及对应打码
package com.hz.framework;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public interface Action {
void execute(HttpServletRequest request, HttpServletResponse response);
}
--------------------------------------------------------------------------------
package com.hz.framework;
import java.lang.reflect.Method;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ActionSupport implements Action{
@Override
public void execute(HttpServletRequest request, HttpServletResponse response) {
String methodName=request.getParameter("methodName");
// methodNamek可能是add/del/edit
// 前台传递什么方法就调用当前类的对应方法
try {
Method m = this.getClass()//BookSerlvet
.getDeclaredMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
m.setAccessible(true);
// 调用当前类实例的methodName方法
m.invoke(this,request,response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
-----------------------------------------------------------------------------------
package com.hz.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 com.hz.web.BookAction;
@WebServlet("*.action")
public class DispatcherServlet extends HttpServlet{
private Map action=new HashMap();
// 程序启动时只会加载一次
@Override
public void init() throws ServletException {
action.put("/book", 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 {
//http//localhost:8080/mvc/book.action?methodName=list
String uri = req.getRequestURI();
// 要拿到/book. 接收最后一个/到最后一个点的位置
uri=uri.substring(uri.lastIndexOf("/"),uri.lastIndexOf("."));
Action action2 = action.get(uri);
action2.execute(req, resp);
}
}
--------------------------------------------------------------------------------------
package com.hz.web;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.hz.framework.Action;
import com.hz.framework.ActionSupport;
public class BookAction extends ActionSupport{
private void list(HttpServletRequest request, HttpServletResponse response) {
System.out.println("在同一个servlet调用查看方法");
}
private void edit(HttpServletRequest request, HttpServletResponse response) {
System.out.println("在同一个servlet调用修改方法");
}
private void del(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
System.out.println("在同一个servlet调用删除方法");
}
private void add(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
System.out.println("在同一个servlet调用增加方法");
}
private void load(HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
System.out.println("在同一个servlet调用回显方法");
}
}