从零写一个Java WEB框架的演进.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《从零写一个Java WEB框架的演进.pdf》由会员分享,可在线阅读,更多相关《从零写一个Java WEB框架的演进.pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、从零写一个JavaWEB框架的演进从一个简单的Servlet项目开始起步,对每一层进行优化,然后形成一个轻撼级的框架。每一篇,都是针对项目的不足点进行优化的。项目已放上github。项H现在也跑起来了,而且Server和Dao层都已经封装好了,都可以专心处理各自的业务逻辑,耦合度也低了很多。但是项目还是有很多需要改进的地方。例如:Controller层的耦合度还是非常高。首先谓求由doGet()和doPost()获取,然后从消息头里面获取url或者参数,然后进行逻辑判断是需要进行哪些业务。当业务多的时候,Controller层就会变得很脯肿,而且耦合度很高。,、(,、一;,飞protected
2、 void doGet(HttpServletRequest req,HttpServletResponse resp)fuing method=req.getParameter(method);if(rnethod!=null)if(getlist.equals(method)Lis t cu st orne r List=customerService.getCustomerlist();v.riter=resp.getWriter();m.t._gm.println(customerli.st);wri.ter.write(custornerlist.to5tring();wri.t e
3、r.flush();wri.tcr.close();层与层之间的调用还需要手动New对象,这里也可以实现“控制反转”的思想。框架实现项目结构我还是决定在原来的项目上进行开发。所以前期框架的封装代码会与业务代码放在同一个包下,等开发完成,再抽取出来,我觉得这样会更加容易理解。项目结构:Y java.口com.smart.mysimpleframewor口annotation口Configta controller ta Helper ta model 口serviceta Util annotation:元注解。自定义的一些注解。config:配置,主要存放定义了框架配置的Key.(根据key来
4、获取properties文件的values)llelper 对工具类,配置类的封装。Util:工具类。ClassUtil类一个类的加载器,该类主要根据类名,或者包名来加载类。lpublic class ClassUtil 2 3 private static final Logger log=4LoggerFactory.getlogger(ClassUtil.class);5 6 7/*8*获取类加载器9*/10 public static Classloader getClassLoader()11 return Thread.currentThread().getContextClass
5、Loader();12 13 14/*15*加载类16*/17 18 public static Class loadClass(String className,boolean 19isinitialized)20 Class cls=null;21 try 22 els=Class.forName(className,isinitialized,23getClassLoader();24 catch(ClassNotFoundException e)25 e.printStackTrace();26 27 return els;28 29 30/*31*获取指定包名下的所有类32*/33
6、34 public static Setclass getClassSet(String packageName)35 36 Setclass classSet=new HashSet();37 38 try 39/获取到包名下所有类的URL40 Enumeration urls=41 getClassLoader().getResources(packageName.replace 42(.,/);43 44 45 开始遍)力while(urls.hasMoreElements()46 URL url=urls.next Element();47 if(url!=null)48 String
7、 protocol=url.getProtocol();49 if(protocol.equals(file)50 String packagePath=Slur 1.get Path().replaceAll(%20,);52 addClass(classSet,packagePath,packageName);53 else if(protocol.equals(jar)54 JarURLConnection jarURLConnection=55(JarURLConnection)url.openConnection();56 57 if(jarURLConnection!=null)5
8、8 JarFile jarFile=59jarURLConnection.getJarFile();60 if(jarFile!=null)61 62jarFile.entries();63 64 65jarEntries.nextElement();66 67 Enumeration jarEntries=while(jarEntries.hasMoreElements()JarEntry jarEntry=String name=jarEntry.getName();if(name.endsWith(.class)68 String className=69name.substring(0
9、,name.lastindexOf(.).replaceAll(/,);70 doAddClass(classSet,className 71);72 73 74 75 76 77 78 79 80 81 82 83 84 catch(IOException e)85 log.error(”获取类失败”,e);86 e.printStackTrace();87 88 return classSet;89 90 91 private static void addClass(S classSet,92String packagePath,String packageName)93/在该路径下获取
10、所有文件94/FileFil ter过滤器,只婓class义件和文档。95 File files=new File(packagePath).listFiles(new FileFilter()96 97Override 98 public boolean accept(File file)99 return(file.isFile()&10file.getName().endsWith(.class)11 file.isDirectory();0 10);1 10/遍历每个文件2 for(File file:files)10 String fileName=file.getName();3
11、if(于ile.isFile()10/去掉class后缀4 String className=fileName.substring(0,10fileName.lastindexOf(.);5/如果包名不是空的则加上包名 06070809101112131415 1111111111 if(StringUtils.isNotEmpty(packageName)className=packageName+.+className;加载类doAddClass(classSet,className);else 这里是对file是文件夹进行的操作String subPackagePath=fileName
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 从零写一个Java WEB框架的演进 一个 Java WEB 框架 演进
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内