抄写原生项目_day01

左心房为你撑大大i 提交于 2020-03-19 19:12:09

3 月,跳不动了?>>>

记录开发过程以及抄录改写的有意义原生代码(能记录多少是多少,以及当前认知范围内认为正确的东西)

登陆模块

设想:原生servlet编写相关接口,项目会模仿spring的扫描注入,原生JDBC,使用redis存储token

首先idea创建项目maven web project,项目名door,jdk1.8 ,应用服务器tomcat 9

复习一下web项目的流程:

1.应用服务器加载web.xml的context-param 以及 listener 

模仿spring容器,先写一个conetxt-param ,context : application-context.xml

接下来实现ServletContextListener,该listener会在应用启动以及死亡的时候调用对应需要的实现方法

在初始化阶段把类似于spring 容器的我命为CONTEXT的一个单例对象进行实例化

@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
    //获取容器配置并初始化
    ServletContext servletContext = servletContextEvent.getServletContext();
    String initParameter = servletContext.getInitParameter("context");
    Context.setContextPath(initParameter);
    Context context = Context.getContext();
    /*
    List list = AnnotationScanner.getAnnotationScanner().scanByAnnotation((String) context.getElement("controller-scan"), Controller.class);
    list.forEach(l->{
        System.out.println(l);
    });
    */
}
/**
 * @author RiceMan
 * @date 2020/3/19 0019 上午 9:31
 */
public class Context {
    //单例模式
    private static Context CONTEXT = null;

    private static String PATH = null ;

    private static Map<String ,Object> ELEMENTS = null ;

    //禁止被其他实例化
    private Context(){};

    //
    public static void setContextPath(String path){
        PATH = path ;
    }

    //创建单例CONTEXT
    public static Context getContext()  {
        try{
        if (null==PATH){
            throw  new Exception("context-paramcontext不能为空");
        }
        }catch (Exception e){
            e.printStackTrace();
        }
        return null==CONTEXT?init():CONTEXT ;
    }

    private static Context init(){
        CONTEXT = new Context();
        ELEMENTS = new HashMap<String ,Object>();
        initContextElements();
        return CONTEXT ;
    }
    private static void initContextElements()  {
        try {
            InputStream ins = Context.class.getClassLoader().getResourceAsStream(PATH);
            SAXReader saxReader = new SAXReader();
            Document doc = saxReader.read(ins);
            Element rootElement = doc.getRootElement();
            rootElement.elements().forEach(e->{
                System.out.println(e.getName()+e.attributeValue("value"));
                Context.ELEMENTS.put(e.getName(),e.attributeValue("value"));
            });
            ins.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    public  Object getElement(String name ){
        return ELEMENTS.get(name);
    }
}

今天先记录这么一点

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!