文章目录
显示效果
注:这是用的自己打包好的框架进行实现。
工具类
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思想
好了,今天的分享到这里了。