如果你不能简单说清楚,就是你还没有完全明白。——爱因斯坦

 need things:
 1.操作xml文档 dom4j 等开源类库
 2. dtd的验证 等知识储备
 * n到n次     ? 0到1次        + 1到n次
 3. java 反射的相关知识
反射过程:
导入 java.lang.reflect.*
1.获得需要操作的类的 Java.lang.Class对象
2.调用Class的方法获取Field, Method等对象
使用 反射api 进行操作


反射的常用类
Class 类 : 反射的核心类,反射的所有操作都是围绕该类来生成的,通过它,可以获取类的属性,方法等信息
Field 类 : 类的属性, 可以获取和设置类中属性信息
Method 类: 类的方法,可以获取类中方法的信息,或者执行方法
Constructor类: 类的构造方法

1.
通过Class类的forName()静态方法也可以获取该类对应的Class对象,它会要求虚拟机查找并加载指定的类

Class cla = Class.forName("java.lang.String");    如果字符串有问题,会抛出ClassNotFoundException异常

2.从Class 对象获取信息
创建对象
使用Class对象的newInstance()方法创建对象
notice:实际上利用了它的无参构造方法来创建了该类的实例, 所以要求该Class对象的对应类有相应的无参构造方法

正文:构建开始
构建基于mvc模式的框架

实现方案1
所有请求发到一个统一的controller (用filter api 实现拦截请求) 这样控制器负责接收请求 ,(根据请求的路径指定由哪个action 来执行处理
然后定义Action接口,用来进行请求的处理, 比如登录action, 注册action 等
action 调用model,进行model的操作并返回相应的view

//controller类的定义
public class ActionFilter implements Filter{
    private FilterConfig config;
    public voic destroy(){

    }

    public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)
     throws IOException,ServletException {

         //类型转换
         HttpServletRequest hsr = (HttpServletRequest) request;
         HttpServeltResponse hsp = (HttpServletResponse) response;

         //获得action
         Action action = this.getAction(hsr);

         //调用action的excute 方法
         String resultView = null;
         try{
             resultView = action.execute(hsr,hsp);
         }
         catch(Exception e){
             e.printStackTrace();
         }

         //页面跳转
         if(null != resultView) {
             request.getRequestDispatcher(resultView).forward(request, response);
         }         
    }

    public void init(FilterConfig conf) throws ServletException {
        this.config = config;
    }
    public Action getAction(HttpServletRequest request) {
        
        String uri = request.getRequestURI(); //获取请求的url

        String contextPath = request.getContextPath(); //获取上下文路径

        String actionPath = uri.substring(contextPath.length()); //截取上下文路径以后的部分

        String actionName = actionPath.substring(1,actionPath.lastIndexOf('.')).trim();

        Action action = null;

        // 以后每个定义的Action在这里添加一项用于实例化一个需要的action 类的对象
        if("login".equals(actionName)) {
            action = new LoginAction();
        }

        return action;

    }
}
View Code

相关文章:

  • 2022-12-23
  • 2021-12-08
  • 2021-12-20
  • 2021-08-06
  • 2021-07-08
  • 2022-01-05
  • 2021-12-09
  • 2021-11-12
猜你喜欢
  • 2021-07-31
  • 2021-07-16
  • 2022-01-06
  • 2021-10-11
  • 2021-12-30
  • 2022-12-23
  • 2021-05-22
相关资源
相似解决方案