自定义MVC框架实现分页与数据显示

显示效果

在这里插入图片描述
注:这是用的自己打包好的框架进行实现。
在这里插入图片描述

工具类

1.工具类
在这里插入图片描述
2.反射用到的配置文件:
在这里插入图片描述

3.封装好的通用分页的助手类
在这里插入图片描述

项目的生命周期和流程

在这里插入图片描述
细述效果图运行流程:


1.客户端发送请求
在这里插入图片描述


2.经过xml进行字符编码的过滤
在这里插入图片描述


3.进入中央控制器
在这里插入图片描述
4.在servlet初始化时进行对映射配置文件的读取通过工厂模式生产java对象并放入内存中的静态块中。
在这里插入图片描述


5.获取请求路径并进行截取
在这里插入图片描述


6.根据*获取子控制器。
在这里插入图片描述
6.1可以理解为:拿到了config.xml中的/Action
在这里插入图片描述


7.得到完整类名
在这里插入图片描述
注:拿到完整类名就可以反射实例化。


8.拿到完整类名之后就进行实例化,之后进行强制转换为Action(抽象类)
里面有一个抽象的execute(请求,响应)方法。

在这里插入图片描述
在这里插入图片描述
可以这么理解action就相当于StudentServlet类了,它同时继承了DispatcherAction类(方法分发类)并且实现了ModelDriver类
在这里插入图片描述

public class DispatcherAction extends  Action{
	//做一个方法分发   分发到一个具体的方法里
	@Override
	public final String execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		try {
			//反射调用方法
			String methodName = this.getMehtodName(req);
			//拿到类对象
			Class c=this.getClass();
			//获取方法对象
			Method method= c.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
			String code=(String)method.invoke(this,req,resp);
			return code;
		} catch (Exception e) {
			// TODO: handle exception
			throw  new RuntimeException(e);
		}
	}
	//把获取方法名做一个封装
	public String getMehtodName(HttpServletRequest req) {
		//前台传一个方法名
		String methodName =req.getParameter("methodName");
		//做一个if判断这样可以兼容两种情况
		if(null==methodName) {
			//获取请求的所有数据
			Map<String, String[]> parameterMap = req.getParameterMap();
			//取键
			Set<String> keySet = parameterMap.keySet();
		    for (String key : keySet) {
		    	//符合条件截取
				if(key.contains("method:")) {
					//替换成空格(method:add   替换后--->add)
					methodName= key.replace("mehtod:", "");
				}
			}
		}
		return methodName;
	}
}

9.通过jar包中提供的反射赋值方法进行赋值
在这里插入图片描述
在这里插入图片描述
10.把请求委托给子控制器执行并且返回结果码
在这里插入图片描述
在这里插入图片描述
11.根据结果码进行流程的转发和从定项
在这里插入图片描述
在这里插入图片描述
12.流程已经走完。

总结

框架省了很多代码下来

在框架的基础上进行的开发被称为二次开发

类似于我们去购买房子

我们不需要重新开始建,只需要在他的基础上进行装修就可以了

虽然房子的模板是一样的,但是每个人的装修风格是不一样的

转移到我们程序来说就是一个oop思想

好了,今天的分享到这里了。

猜你喜欢

转载自blog.csdn.net/qq_45384482/article/details/106212144