记录开发过程以及抄录改写的有意义原生代码(能记录多少是多少,以及当前认知范围内认为正确的东西)
登陆模块
设想:原生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); } }
今天先记录这么一点
来源:oschina
链接:https://my.oschina.net/u/3702441/blog/3198325