抄写原生项目_day01

个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 

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

登陆模块

设想:原生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-param:context不能为空");
        }
        }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);
    }
}

附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读/书籍书单大全:

(点击右侧 即可打开个人博客内有干货):技术干货小栈
=====>>①【Java大牛带你入门到进阶之路】<<====
=====>>②【算法数据结构+acm大牛带你入门到进阶之路】<<===
=====>>③【数据库大牛带你入门到进阶之路】<<=====
=====>>④【Web前端大牛带你入门到进阶之路】<<====
=====>>⑤【机器学习和python大牛带你入门到进阶之路】<<====
=====>>⑥【架构师大牛带你入门到进阶之路】<<=====
=====>>⑦【C++大牛带你入门到进阶之路】<<====
=====>>⑧【ios大牛带你入门到进阶之路】<<====
=====>>⑨【Web安全大牛带你入门到进阶之路】<<=====
=====>>⑩【Linux和操作系统大牛带你入门到进阶之路】<<=====

天下没有不劳而获的果实,望各位年轻的朋友,想学技术的朋友,在决心扎入技术道路的路上披荆斩棘,把书弄懂了,再去敲代码,把原理弄懂了,再去实践,将会带给你的人生,你的工作,你的未来一个美梦。

发布了121 篇原创文章 · 获赞 0 · 访问量 4374

猜你喜欢

转载自blog.csdn.net/jishulaozhuanjia/article/details/104973878
今日推荐