精华内容
参与话题
问答
  • url

    千次阅读 2016-10-21 17:45:28
    It will be read and overwritten.  DO NOT EDIT! --> Bookmarks 书签菜单  最近使用的标签  Mozilla Firefox    帮助和教程  自定义 Firefox  加入进来  关于我们 ... 
    <!DOCTYPE NETSCAPE-Bookmark-file-1>
    <!-- This is an automatically generated file.
         It will be read and overwritten.
         DO NOT EDIT! -->
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
    <TITLE>Bookmarks</TITLE>
    <H1>书签菜单</H1>

    <DL><p>
        <DT><A HREF="place:type=6&sort=14&maxResults=10" ADD_DATE="1476925894" LAST_MODIFIED="1476925894">最近使用的标签</A>
        <HR>    <DT><H3 ADD_DATE="1476925888" LAST_MODIFIED="1476925888">Mozilla Firefox</H3>
        <DL><p>
            <DT><A HREF="https://www.mozilla.org/zh-CN/firefox/help/" ADD_DATE="1476925888" LAST_MODIFIED="1476925888" ICON_URI="http://www.mozilla.org/2005/made-up-favicon/6-1476925888378" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gwMDAsTBZbkNwAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAABNElEQVQ4y8WSsU0DURBE3yyWIaAJaqAAN4DPSL6AlIACKIEOyJEgRsIgOOkiInJqgAKowNg7BHdn7MOksNl+zZ//dvbDf5cAiklp22BdVtXdeTEpDYDB9m1VzU6OJuVp2NdEQCaI96fH2YHG4+mDduKYNMYINTcjcGbXzQVDEAphG0k48zUsajIbnAiMIXThpW8EICE0RAK4dvoKg9NIcTiQ589otyHOZLnwqK5nLwBFUZ4igc3iM0d1ff8CMC6mZ6Ihiaqq3gi1aUAnArD00SW1fq5OLBg0ymYmSZsR2/t4e/rGyCLW0sbp3oq+yTYqVgytQWui2FS7XYF7GFprY921T4CNQt8zr47dNzCkIX7y/jBtH+v+RGMQrc828W8pApnZbmEVQp/Ae7BlOy2ttib81/UFc+WRWEbjckIAAAAASUVORK5CYII=">帮助和教程</A>
            <DT><A HREF="https://www.mozilla.org/zh-CN/firefox/customize/" ADD_DATE="1476925888" LAST_MODIFIED="1476925888" ICON_URI="http://www.mozilla.org/2005/made-up-favicon/7-1476925888379" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gwMDAsTBZbkNwAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAABNElEQVQ4y8WSsU0DURBE3yyWIaAJaqAAN4DPSL6AlIACKIEOyJEgRsIgOOkiInJqgAKowNg7BHdn7MOksNl+zZ//dvbDf5cAiklp22BdVtXdeTEpDYDB9m1VzU6OJuVp2NdEQCaI96fH2YHG4+mDduKYNMYINTcjcGbXzQVDEAphG0k48zUsajIbnAiMIXThpW8EICE0RAK4dvoKg9NIcTiQ589otyHOZLnwqK5nLwBFUZ4igc3iM0d1ff8CMC6mZ6Ihiaqq3gi1aUAnArD00SW1fq5OLBg0ymYmSZsR2/t4e/rGyCLW0sbp3oq+yTYqVgytQWui2FS7XYF7GFprY921T4CNQt8zr47dNzCkIX7y/jBtH+v+RGMQrc828W8pApnZbmEVQp/Ae7BlOy2ttib81/UFc+WRWEbjckIAAAAASUVORK5CYII=">自定义 Firefox</A>
            <DT><A HREF="https://www.mozilla.org/zh-CN/contribute/" ADD_DATE="1476925888" LAST_MODIFIED="1476925888" ICON_URI="http://www.mozilla.org/2005/made-up-favicon/8-1476925888380" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gwMDAsTBZbkNwAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAABNElEQVQ4y8WSsU0DURBE3yyWIaAJaqAAN4DPSL6AlIACKIEOyJEgRsIgOOkiInJqgAKowNg7BHdn7MOksNl+zZ//dvbDf5cAiklp22BdVtXdeTEpDYDB9m1VzU6OJuVp2NdEQCaI96fH2YHG4+mDduKYNMYINTcjcGbXzQVDEAphG0k48zUsajIbnAiMIXThpW8EICE0RAK4dvoKg9NIcTiQ589otyHOZLnwqK5nLwBFUZ4igc3iM0d1ff8CMC6mZ6Ihiaqq3gi1aUAnArD00SW1fq5OLBg0ymYmSZsR2/t4e/rGyCLW0sbp3oq+yTYqVgytQWui2FS7XYF7GFprY921T4CNQt8zr47dNzCkIX7y/jBtH+v+RGMQrc828W8pApnZbmEVQp/Ae7BlOy2ttib81/UFc+WRWEbjckIAAAAASUVORK5CYII=">加入进来</A>
            <DT><A HREF="https://www.mozilla.org/zh-CN/about/" ADD_DATE="1476925888" LAST_MODIFIED="1476925888" ICON_URI="http://www.mozilla.org/2005/made-up-favicon/9-1476925888381" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gwMDAsTBZbkNwAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAABNElEQVQ4y8WSsU0DURBE3yyWIaAJaqAAN4DPSL6AlIACKIEOyJEgRsIgOOkiInJqgAKowNg7BHdn7MOksNl+zZ//dvbDf5cAiklp22BdVtXdeTEpDYDB9m1VzU6OJuVp2NdEQCaI96fH2YHG4+mDduKYNMYINTcjcGbXzQVDEAphG0k48zUsajIbnAiMIXThpW8EICE0RAK4dvoKg9NIcTiQ589otyHOZLnwqK5nLwBFUZ4igc3iM0d1ff8CMC6mZ6Ihiaqq3gi1aUAnArD00SW1fq5OLBg0ymYmSZsR2/t4e/rGyCLW0sbp3oq+yTYqVgytQWui2FS7XYF7GFprY921T4CNQt8zr47dNzCkIX7y/jBtH+v+RGMQrc828W8pApnZbmEVQp/Ae7BlOy2ttib81/UFc+WRWEbjckIAAAAASUVORK5CYII=">关于我们</A>
        </DL><p>
        <DT><H3 ADD_DATE="1476925890" LAST_MODIFIED="1476925897">20161019</H3>
        <DL><p>
            <DT><A HREF="http://docs.sencha.com/touch/2.4/" ADD_DATE="1476925890" LAST_MODIFIED="1476925890" ICON_URI="http://docs.sencha.com/favicon.ico" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB3ElEQVQ4jaWQz0sUcRjGH6LDFhRjOj++s0s7NWVEKhskmezQngoCa0AwhQ6rERlFeWgliWKoUPqxegqigqW9iBBMgaLl4qy6s6MQLQS7+2fMn/B0yQ6itksPvKeH58PzPsA2lWuWXa4lXa+SkLZ7/1RQt3JB3aJf7U00HS7XLDuoW/wPQLIS1C36NYvvF85WnJzR3Atb4W8/e/na7WK2GAuzvu44ntQYyK9ZXK9anCt1c+q7wVfrgtmyzjcbejgVNAD68OsY81WT05sxPilofL4qOFkSnCwLvggEn/oizPjy7ts4G63usx8aH61pfLCkcrygcaIo+HhNcKIk+LAkeHtVhIOeZuwIyHhS4n6xlSPLMgddmel5lbcWNY4uC95ZEbzpCQ6tCF4pKLldW6QXpHSf2xJeyB/hxdk2Xv6s8NoXlf3zKu1FjZeWVJ77qnLPLXpyknH87eGc+U6h+bGN3XmZyVmFyU9Rdk0bjI6d3Bvwt82MId2Y6XCuvuwMU84Zdo6fpn6vnQdGzMYAW0qNGVJH5lRF3G1nZNgkrse9pgAAII2eSEWGTWIgTtixVNMADBk2BuJEXzS9k70PwH4AEQCHALQAkAFoAAR61POwj87BUvoB6H9OBSABOPgbmCTP5mdj0QcAAAAASUVORK5CYII=">Docs  Sencha Touch 2.4</A>
            <DT><A HREF="https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&wd=eclipse%20%E5%8F%91%E5%B8%83%E9%A1%B9%E7%9B%AE%E5%88%B0tomcat&oq=eclipse%20%E5%AF%BC%E5%87%BAwar%E5%8C%85&rsv_pq=8aeefbb700003015&rsv_t=9b59RXyEfgveeQt43sapHFVKnqvHl2jCIxvLosmaha5zhSixfRcbRuG5Txg&rqlang=cn&rsv_enter=1&rsv_sug2=0&prefixsug=eclipse%20fabu&rsp=1&inputT=26457&rsv_sug4=57405" ADD_DATE="1476925890" LAST_MODIFIED="1476925890">eclipse 发布项目到tomcat_百度搜索</A>
            <DT><A HREF="http://blog.csdn.net/lucklq/article/details/7621807" ADD_DATE="1476925890" LAST_MODIFIED="1476925890">Eclipse中web项目部署至Tomcat步骤 - Sailqi的专栏 - 博客频道 - CSDN.NET (2)</A>
            <DT><A HREF="http://blog.csdn.net/lucklq/article/details/7621807" ADD_DATE="1476925891" LAST_MODIFIED="1476925891">Eclipse中web项目部署至Tomcat步骤 - Sailqi的专栏 - 博客频道 - CSDN.NET</A>
            <DT><A HREF="http://www.cnblogs.com/ywl925/p/3815173.html" ADD_DATE="1476925891" LAST_MODIFIED="1476925891">Eclipse中的Web项目自动部署到Tomcat - ywl925 - 博客园</A>
            <DT><A HREF="http://blog.csdn.net/u011521890/article/details/51297253" ADD_DATE="1476925891" LAST_MODIFIED="1476925891">eclipse将工程发布到tomcat上详细步骤 - u011521890的专栏 - 博客频道 - CSDN.NET</A>
            <DT><A HREF="http://jingyan.baidu.com/article/466506582f2f4af548e5f868.html" ADD_DATE="1476925891" LAST_MODIFIED="1476925891">Eclipse的web工程发布到tomcat_百度经验</A>
            <DT><A HREF="http://blog.sina.com.cn/s/blog_7a0d9dca010151il.html" ADD_DATE="1476925892" LAST_MODIFIED="1476925892">Eclipse自动部署项目到Tomcat的webapps下的有效方法_yvonne_新浪博客</A>
            <DT><A HREF="http://www.cnblogs.com/kable/p/4210918.html" ADD_DATE="1476925892" LAST_MODIFIED="1476925892">editplus中html的自动补全功能 - 脑残宝 - 博客园</A>
            <DT><A HREF="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=78040160_23_pg&wd=extjs%20sql&oq=%E5%A4%8D%E6%97%A6%E5%A4%A7%E5%AD%A6&rsv_pq=94ab12520001eb81&rsv_t=d73by7SNVfa%2B7d92Z7J%2BkDDNPmIeUWWJYlykuWHP%2B91ajXQFCtvCJLwWnfrrXTSeIRe%2BLCY&rqlang=cn&rsv_enter=1&inputT=5120&rsv_sug3=112&rsv_sug1=63&rsv_sug7=100&sug=extjs%20%E6%95%99%E7%A8%8B&rsv_n=1&bs=%E5%A4%8D%E6%97%A6%E5%A4%A7%E5%AD%A6" ADD_DATE="1476925892" LAST_MODIFIED="1476925892">extjs sql_百度搜索</A>
            <DT><A HREF="http://extjs.org.cn/node/323" ADD_DATE="1476925893" LAST_MODIFIED="1476925893">ExtJS 开发调试工具大全  全球最大的Sencha中文资料,ExtJS中文教程,Ext中文教程</A>
            <DT><A HREF="http://wenku.baidu.com/link?url=pAL0iIRoMiYwZaD5C4INT0GhmEBkkGVAaDkx6xnVdur1hw4jj64tJUELtB2MFHLttNAFzehvFSiB_n5D5mbsvcK4bLtcMTjB7_0dQUxss_y" ADD_DATE="1476925893" LAST_MODIFIED="1476925893">Extjs+java+sql数据库_百度文库</A>
            <DT><A HREF="http://wenku.baidu.com/view/f015b9868762caaedd33d49b.html" ADD_DATE="1476925893" LAST_MODIFIED="1476925893">Extjs如何与数据库交互_百度文库</A>
            <DT><A HREF="http://blog.csdn.net/heyehuang/article/details/6761113" ADD_DATE="1476925894" LAST_MODIFIED="1476925894">EXTJS项目sql脚本 - Friday-起点还是终点 - 博客频道 - CSDN.NET</A>
            <DT><A HREF="http://docs.sencha.com/extjs/6.2.0/classic/Function.html" ADD_DATE="1476925894" LAST_MODIFIED="1476925894">Function  Ext JS 6.2.0 - Classic Toolkit</A>
            <DT><A HREF="http://docs.sencha.com/touch/2.4/guides/getting_started/getting_started.html" ADD_DATE="1476925894" LAST_MODIFIED="1476925894">Getting Started with Sencha Touch  Sencha Touch 2.4</A>
            <DT><A HREF="http://zhidao.baidu.com/link?url=0PLPF41xRs0vo5BtbkBz7VaE_9ry-Y2QIFQkfeqc_6EgmZ83SraEpFcntvnO3bjG0DWxQMf_ol1KoFyHTfuZbiVv8PbCW4EwA1tK6bq2mXi" ADD_DATE="1476925895" LAST_MODIFIED="1476925895">jQuery Mobile和Sencha Touch哪个好_百度知道</A>
            <DT><A HREF="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=oracle10g%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B&oq=Sencha%20Touch&rsv_pq=b0496b900001a4c6&rsv_t=e486d%2BQ%2Fqv43SyZ0vmY4MfaN3bDg4GAHnGtLuVZJMtZgRywvmW7zuvZwuS4&rqlang=cn&rsv_enter=1&rsv_sug3=16&rsv_sug1=15&rsv_sug7=100&bs=Sencha%20Touch" ADD_DATE="1476925895" LAST_MODIFIED="1476925895">oracle10g使用教程_百度搜索</A>
            <DT><A HREF="http://wenku.baidu.com/link?url=aA1uFJs21Vcctk3A-akprdHLuon9tOaf767mabocmlpuqR9ohWZlz29efJy2QCBpamg__gRT8utH4SOVw1c8Y9NH9kWXkeI-4VTylNM9HFy" ADD_DATE="1476925895" LAST_MODIFIED="1476925895">oracle10g实用经典教程_百度文库</A>
            <DT><A HREF="http://extjs.org.cn/node/749" ADD_DATE="1476925895" LAST_MODIFIED="1476925895">Sencah Touch英文书籍 《Sencha Touch in Action》  全球最大的Sencha中文资料,ExtJS中文教程,Ext中文教程</A>
            <DT><A HREF="http://extjs.org.cn/node/493" ADD_DATE="1476925896" LAST_MODIFIED="1476925896">Sencha Touch 快速入门2.0 - 第一章 开发Sencha Touch App  全球最大的Sencha中文资料,ExtJS中文教程,Ext中文教程</A>
            <DT><A HREF="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=Sencha&oq=Sencha%20Touch&rsv_pq=95c2d93d000315c3&rsv_t=b7ded3jxCcq9S92vu66ISBOEoDQFNxHaB3nVOB46FHFsyOHxIrVAZTVUGdY&rqlang=cn&rsv_enter=1&inputT=1907&rsv_sug3=8&rsv_sug1=8&rsv_sug7=100&rsv_sug2=0&rsv_sug4=2644&rsv_sug=1" ADD_DATE="1476925896" LAST_MODIFIED="1476925896">Sencha_百度搜索</A>
            <DT><A HREF="http://wenku.baidu.com/view/b98d101dbcd126fff7050b44.html?re=view" ADD_DATE="1476925896" LAST_MODIFIED="1476925896">SSH+Extjs开发视频教程-基于SSH+Maven+Extjs4+MySQL技术实战开发CRM客户关系管理系统_百度文库</A>
            <DT><A HREF="http://wenku.baidu.com/view/b44d492f453610661ed9f474.html?re=view" ADD_DATE="1476925896" LAST_MODIFIED="1476925896">win7 x64 安装oracle10g x64 和 PLSQL Developer_百度文库</A>
            <DT><A HREF="http://jingyan.baidu.com/article/363872ecec1b496e4ba16fff.html" ADD_DATE="1476925896" LAST_MODIFIED="1476925896">Windows 7系统的默认开机共享,你取消了吗_百度经验</A>
            <DT><A HREF="http://wenku.baidu.com/view/adeabb7e27284b73f24250c2.html" ADD_DATE="1476925896" LAST_MODIFIED="1476925896">【图文】oracle10g经典实战第5章_PLSQL介绍_百度文库</A>
            <DT><A HREF="http://zhidao.baidu.com/link?url=mmFFrfBZgTtps4O-gK8h7uHYKWIVa0ZxrTwY8wU_Y-lRJUsqAgKZJ-2wVdNHae0Sj6o9Fl4IKbIy8WRUIEmuPq" ADD_DATE="1476925896" LAST_MODIFIED="1476925896">什么是ext_百度知道</A>
            <DT><A HREF="http://win8e.com/jiqiao/14789.html" ADD_DATE="1476925897" LAST_MODIFIED="1476925897">彻底关闭WINDOWS默认共享的4种方法_Win8-Win10-Win8.1-Win7技巧分享_八亿电脑网</A>
            <DT><A HREF="http://extjs.org.cn/node/293" ADD_DATE="1476925897" LAST_MODIFIED="1476925897" ICON_URI="http://extjs.org.cn/themes/acquia_marina/favicon.ico" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB3ElEQVQ4jaWQz0sUcRjGH6LDFhRjOj++s0s7NWVEKhskmezQngoCa0AwhQ6rERlFeWgliWKoUPqxegqigqW9iBBMgaLl4qy6s6MQLQS7+2fMn/B0yQ6itksPvKeH58PzPsA2lWuWXa4lXa+SkLZ7/1RQt3JB3aJf7U00HS7XLDuoW/wPQLIS1C36NYvvF85WnJzR3Atb4W8/e/na7WK2GAuzvu44ntQYyK9ZXK9anCt1c+q7wVfrgtmyzjcbejgVNAD68OsY81WT05sxPilofL4qOFkSnCwLvggEn/oizPjy7ts4G63usx8aH61pfLCkcrygcaIo+HhNcKIk+LAkeHtVhIOeZuwIyHhS4n6xlSPLMgddmel5lbcWNY4uC95ZEbzpCQ6tCF4pKLldW6QXpHSf2xJeyB/hxdk2Xv6s8NoXlf3zKu1FjZeWVJ77qnLPLXpyknH87eGc+U6h+bGN3XmZyVmFyU9Rdk0bjI6d3Bvwt82MId2Y6XCuvuwMU84Zdo6fpn6vnQdGzMYAW0qNGVJH5lRF3G1nZNgkrse9pgAAII2eSEWGTWIgTtixVNMADBk2BuJEXzS9k70PwH4AEQCHALQAkAFoAAR61POwj87BUvoB6H9OBSABOPgbmCTP5mdj0QcAAAAASUVORK5CYII=">新书推荐 《ExtJS Web应用开发指南》  全球最大的Sencha中文资料,ExtJS中文教程,Ext中文教程</A>
            <DT><A HREF="http://extjs.org.cn/node/321" ADD_DATE="1476925897" LAST_MODIFIED="1476925897">调试ExtJs利器 - Microsoft Script Debug(官方IE插件)  全球最大的Sencha中文资料,ExtJS中文教程,Ext中文教程</A>
        </DL><p>
        <DT><H3 ADD_DATE="1476925897" LAST_MODIFIED="1477034791">Editplus</H3>
        <DL><p>
            <DT><A HREF="http://blog.sina.com.cn/s/blog_66439a3e0101dng5.html" ADD_DATE="1476925897" LAST_MODIFIED="1476925897">EditPlus 使用技巧以及快捷键_super_新浪博客</A>
            <DT><A HREF="http://www.cnblogs.com/kable/p/4210918.html" ADD_DATE="1476925897" LAST_MODIFIED="1476925897">editplus中html的自动补全功能 - 脑残宝 - 博客园</A>
            <DT><A HREF="http://blog.sina.com.cn/s/blog_70ffb5c501012km3.html" ADD_DATE="1476925897" LAST_MODIFIED="1476925897">[转载]editplus的自动补全功能-提高写代码效率[原创]_皮皮蔡_新浪博客</A>
        </DL><p>
        <DT><H3 ADD_DATE="1476925897" LAST_MODIFIED="1477021053">Ext</H3>
        <DL><p>
            <DT><A HREF="https://www.sencha.com/blog/announcing-sencha-touch-2-3-html5-for-ios7-touch-grid-cordova-support-more/" ADD_DATE="1476925898" LAST_MODIFIED="1476925898">Announcing Sencha Touch 2.3 – Touch Grid, Cordova Support, and New Themes  Sencha</A>
            <DT><A HREF="http://docs.sencha.com/" ADD_DATE="1476925898" LAST_MODIFIED="1476925898">Docs  Sencha Documentation</A>
            <DT><A HREF="http://docs.sencha.com/touch/2.4/" ADD_DATE="1476925898" LAST_MODIFIED="1476925898" ICON_URI="http://docs.sencha.com/favicon.ico" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB3ElEQVQ4jaWQz0sUcRjGH6LDFhRjOj++s0s7NWVEKhskmezQngoCa0AwhQ6rERlFeWgliWKoUPqxegqigqW9iBBMgaLl4qy6s6MQLQS7+2fMn/B0yQ6itksPvKeH58PzPsA2lWuWXa4lXa+SkLZ7/1RQt3JB3aJf7U00HS7XLDuoW/wPQLIS1C36NYvvF85WnJzR3Atb4W8/e/na7WK2GAuzvu44ntQYyK9ZXK9anCt1c+q7wVfrgtmyzjcbejgVNAD68OsY81WT05sxPilofL4qOFkSnCwLvggEn/oizPjy7ts4G63usx8aH61pfLCkcrygcaIo+HhNcKIk+LAkeHtVhIOeZuwIyHhS4n6xlSPLMgddmel5lbcWNY4uC95ZEbzpCQ6tCF4pKLldW6QXpHSf2xJeyB/hxdk2Xv6s8NoXlf3zKu1FjZeWVJ77qnLPLXpyknH87eGc+U6h+bGN3XmZyVmFyU9Rdk0bjI6d3Bvwt82MId2Y6XCuvuwMU84Zdo6fpn6vnQdGzMYAW0qNGVJH5lRF3G1nZNgkrse9pgAAII2eSEWGTWIgTtixVNMADBk2BuJEXzS9k70PwH4AEQCHALQAkAFoAAR61POwj87BUvoB6H9OBSABOPgbmCTP5mdj0QcAAAAASUVORK5CYII=">Docs  Sencha Touch 2.4</A>
            <DT><A HREF="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=78040160_23_pg&wd=ext%20%E7%BD%91%E7%AB%99%E6%B5%8B%E8%AF%95&rsv_pq=acceb8ea00012305&rsv_t=b33coRbwVi82xySUGuweDMDQBQvaHEQYQx%2BjsSYnrRRy%2BU0lsRxiHzsZ9oFvSZnz%2FotRk7U&rqlang=cn&rsv_enter=1&rsv_sug3=6&rsv_sug1=3&rsv_sug7=100&rsv_sug2=0&inputT=12069&rsv_sug4=25999" ADD_DATE="1476925898" LAST_MODIFIED="1476925898">ext 网站测试_百度搜索</A>
            <DT><A HREF="http://extjs.org.cn/node/323" ADD_DATE="1476925898" LAST_MODIFIED="1476925898">ExtJS 开发调试工具大全  全球最大的Sencha中文资料,ExtJS中文教程,Ext中文教程</A>
            <DT><A HREF="http://blog.csdn.net/tianxiaode/article/details/6799105" ADD_DATE="1476925898" LAST_MODIFIED="1476925898">ExtJS应用架构设计(三) - 黄灯桥的专栏 - 博客频道 - CSDN.NET</A>
            <DT><A HREF="http://blog.csdn.net/heyehuang/article/details/6761113" ADD_DATE="1476925898" LAST_MODIFIED="1476925898">EXTJS项目sql脚本 - Friday-起点还是终点 - 博客频道 - CSDN.NET</A>
            <DT><A HREF="http://blog.csdn.net/woshixuye/article/details/7466930" ADD_DATE="1476925898" LAST_MODIFIED="1476925898">Ext的简单的测试程序——Hello World - IT徐胖子的专栏 - 博客频道 - CSDN.NET</A>
            <DT><A HREF="http://www.cnblogs.com/mcgrady/archive/2013/06/08/3127781.html" ADD_DATE="1476925899" LAST_MODIFIED="1476925899">JSON详解 - 永远的麦子 - 博客园</A>
            <DT><A HREF="http://baike.baidu.com/link?url=_bCvcNdEZraGiDjZ6WZ7CanD9vWnugtin2RSt-JgE9wBzVF4H_hvZyD7lxlxdswY6tlVSUFX-_T9fTpJ6mvJhK" ADD_DATE="1476925899" LAST_MODIFIED="1476925899">Sencha Touch_百度百科</A>
            <DT><A HREF="http://blog.csdn.net/johnstrive/article/details/7104113" ADD_DATE="1476925900" LAST_MODIFIED="1476925900">如何架构EXTJS项目 - 在路上 - 博客频道 - CSDN.NET</A>
            <DT><A HREF="http://www.iteye.com/problems/90143" ADD_DATE="1476925900" LAST_MODIFIED="1476925900">用Extjs 做一个前台,数据从数据库里取出来 - ITeye问答</A>
        </DL><p>
        <DT><H3 ADD_DATE="1476925900" LAST_MODIFIED="1477042182">extjs</H3>
        <DL><p>
            <DT><A HREF="http://zhidao.baidu.com/link?url=r3zf3znj0pLtENgzQ4QqlHQ2dPCs9U2XCC5m5FVBB_pSDqjQEahYlUODehvCOFcrxw41xJogIqc9u0aJ6Fk4wXQb08-QbetwiayoRtIRnWi" ADD_DATE="1476925900" LAST_MODIFIED="1476925900">extjs 读取数据库数据_百度知道</A>
            <DT><A HREF="http://baike.baidu.com/link?url=_bCvcNdEZraGiDjZ6WZ7CanD9vWnugtin2RSt-JgE9wBzVF4H_hvZyD7lxlxdswY6tlVSUFX-_T9fTpJ6mvJhK" ADD_DATE="1476925900" LAST_MODIFIED="1476925900">Sencha Touch_百度百科</A>
            <DT><A HREF="http://extjs.org.cn/node/262" ADD_DATE="1476925900" LAST_MODIFIED="1476925900">求高手发一个EXTJS与JSP连接把数据写入数据库的例子--  全球最大的Sencha中文资料,ExtJS中文教程,Ext中文教程</A>
            <DT><A HREF="http://blog.csdn.net/zhangzikui/article/details/7094371" ADD_DATE="1476926888" LAST_MODIFIED="1476926889">ExtJS示例 - zhangzikui的专栏 - 博客频道 - CSDN.NET</A>
            <DD>一般情况下,架构分两种来讨论的,一种是开发架构,一种是部署架构部署架构,就是开发完的程序在实际运行环境下,通过负载均衡,DNS轮询,SquID等等来减轻单台服务器负载,达到性能优化的目的这里大家估计更想了解的是开发上的架构我对这个的观点是,所有的架构都是死的,而性能优化策略是活的,我在开发中,所有的东西都不是一定要按照什么固定的模式,去死开发,更多的是针对需要优化的信息进行
            <DT><A HREF="http://www.cnblogs.com/willick/p/3168809.html" ADD_DATE="1476928425" LAST_MODIFIED="1476928425">ExtJS初探:在项目中使用ExtJS - Liam Wang - 博客园</A>
            <DD>
            <DT><A HREF="http://blog.csdn.net/primary_wind/article/details/25708511" ADD_DATE="1476953890" LAST_MODIFIED="1476953890" ICON_URI="http://c.csdnimg.cn/public/favicon.ico" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABUUlEQVQ4jcWTz0oCQRzHZ2GRlTrUVcRjsXXyUgeF8gXq4hN48dKfYx0Ejz6CoA9QF0+CJx9AdNQ0xYU2bKslcHEz0lKWnW8HdWBxCyWigS9zme+H73x/M4QSAb8R+QMAASUEldne8PnQ2duHcnCITiiEliyjKkk/A9rBIIxMBhNdB2NsQdar6QYgqHm96GWzYLbtapzKxke7vQioiiLeikXHYTOXgxqNorWzi2YggNutbSiRCO6OjhcBj2fnDrN2ejLrYckSR80mN3+qKqggrAawLYsDBoUCn8LSAMswpgAwjLtdUFFcLUEvnQZjDPPVv75Cw+/nSSrzSUmSA8wB9Y1NjG7qHMAYA7NtjNV7vJdKGFKKiaZhWC47rsYBFUJQW1vHSyoFy+x/+w4G+bx7AspLI6h6PFDCYTzE43hOJKAnk3i6uEQ3FkNLlt0T/Ntv/AJokFWQg4IX9AAAAABJRU5ErkJggg==">struts2 结合extjs实现的一个登录实例 - Primary_wind的专栏 - 博客频道 - CSDN.NET</A>
            <DD>ls -d #  -d或--directory   显示目录名称而非其内容。ls -i #    -i或--inode   显示文件和目录的inode编号如何在Ext3的文件系统中恢复被rm掉的文件。[root@Gw za]# debugfsdebugfs 1.39 (29-May-2006)debugfs: open /dev/sda3  #先使用df命令得到删除文件所在
            <DT><A HREF="http://blog.csdn.net/xing_sky/article/details/8685709" ADD_DATE="1476954627" LAST_MODIFIED="1476954627">Struts2 +Extjs结合例子 - xing_sky的专栏 - 博客频道 - CSDN.NET</A>
            <DD>前言本篇主要讲述Spring Boot与RabbitMQ的整合,内容非常简单,纯API的调用操作。 消息生产者不论是创建消息消费者或生产者都需要ConnectionFactoryConnectionFactory配置创建AmqpConfig文件AmqpConfig.java(后期的配置都在该文件中)@Configurationpublic
            <DT><A HREF="http://www.cnblogs.com/hoojo/archive/2011/01/07/1929577.html" ADD_DATE="1476954641" LAST_MODIFIED="1476954641">Struts2、Spring、Hibernate整合ExtJS - hoojo - 博客园</A>
            <DD>
            <DT><A HREF="http://extjs.org.cn/node/723" ADD_DATE="1477020974" LAST_MODIFIED="1477020974">Sencha Touch 2.4正式版下载 | 全球最大的Sencha中文资料,ExtJS中文教程,Ext中文教程</A>
            <DD>Sencha中文站为你提供最新,最全的ExtJS,Sencha Touch等相关资讯.
            <DT><A HREF="http://wenku.baidu.com/link?url=gdBJG79his3DKP5OWHzpEswfaLTcswaflm7LcM7dG5pAPHWOMgjYSuZjFWHLlkimMRvgmNrfiZxTWPsxj_dUSG9RqWVy5fS8xnmwPXc9IXW" ADD_DATE="1477033734" LAST_MODIFIED="1477033734" ICON_URI="http://wenku.baidu.com/favicon.ico" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABWUlEQVQ4jaWSy0sCURjF/XfuRugukha1CzeBCBKIFFFIBEGrCoRwE4EErlskoYW0EFy0iBAkCMFNBCGuKrqjNg6OgzOTjY+5nhbh3ehMrw/O8vud73E8hDL8Rx5CGf5ajoBCsQuvT0IubwIATk51xA/bsPkPAdFtBYQyLIXeUCpbYtybQtcd0Na+LHb2WiCUYTXaRC5vCsBdyXIG3D/0QCjD2qaCl9cB9g9UPFb66OgcuzEVmayBpmKjVLamAxJJTTg9PQ+mHm1+sQ5CGS4ujUlAJmuAUIaZOQkdnaNS7SMYlhGKyKjVh7B6I2EQi6uTAJsDV9fvqFT7YNIQsws10eAPNNDWODa2FHh9Eoq3H85faKk2/IHGRGCWV2RYvZH7Fzo6n9o8VmS9CcPkzoBUWv82umfnhjNgfEg3pdK6M8AwuUihP9DA0bGGRFJDMCyLYLmu8NsSgP/oExgMERjFwInkAAAAAElFTkSuQmCC">ExtJS4.2入门教程_百度文库</A>
            <DD>在线互动式文档分享平台,在这里,您可以和千万网友分享自己手中的文档,全文阅读其他用户的文档,同时,也可以利用分享文档获取的积分下载文档
            <DT><A HREF="http://blog.csdn.net/yuanzhihuipengyou/article/details/50775798" ADD_DATE="1477034380" LAST_MODIFIED="1477034380">[019]Sencha Ext JS 6.0使用教程1 - friendpengyou的专栏 - 博客频道 - CSDN.NET</A>
            <DD>概述          ORMlite是类似hibernate的对象映射框架,主要面向java语言,同时,是时下最流行的android面向数据库的的编程工具。官方网站:http://ormlite.com/ 如果需要开发android,只需要下载core和android两个jar包:ORMlite的使用1,建立映射关系
            <DT><A HREF="https://www.sencha.com/products/extjs/#overview" ADD_DATE="1477034424" LAST_MODIFIED="1477034425">Ext JS - JavaScript framework for cross-platform web apps | Sencha</A>
            <DD>Ext JS is the best JavaScript framework for building data-intensive web apps for desktop,  tablets, and smartphones,  with the largest set of UI components.
            <DT><A HREF="https://www.oschina.net/p/sencha-touch" ADD_DATE="1477034456" LAST_MODIFIED="1477034457">Sencha Touch首页、文档和下载 - 手机上的HTML5框架 - 开源中国社区</A>
            <DD>Sencha Touch是专门为移动设备开发应用的Javascript框架。通过Sencha Touch你可以创建非常像native app的web app,用户界面组件和数据管理全部基于HTML5和CSS3的web标准,全面兼容Android和Apple iOS。
            <DT><A HREF="https://www.oschina.net/p/oschina-html5-app" ADD_DATE="1477034545" LAST_MODIFIED="1477034545">oschina-html5-app首页、文档和下载 - 手机相关软件 - 开源中国社区</A>
            <DD>oschina-html5-app 是开源中国网站基于 变色龙 项目实现的 HTML5 的手机客户端。 可下载已编译好的 APK
            <DT><A HREF="http://www.oschina.net/translate/20-useful-jquery-google-maps-plugins?cmp" ADD_DATE="1477034622" LAST_MODIFIED="1477034622">20+ 个很有用的 jQuery 的 Google 地图插件 - 开源中国社区</A>
            <DD>20+ 个很有用的 jQuery 的 Google 地图插件- 开源中国社区
            <DT><A HREF="http://extjs-doc-cn.github.io/ext4api/" ADD_DATE="1477034823" LAST_MODIFIED="1477034823">API Documentation - Sencha Docs - Ext JS - 脚本娃娃 (Ext4.1.0 Doc中文版 V1.0.0 Beta)</A>
            <DD>
            <DT><A HREF="http://blog.csdn.net/luckypeng/article/details/42710313" ADD_DATE="1477034968" LAST_MODIFIED="1477034969">Eclipse与VS2012 实现ExtJs智能提示 - luckypeng的专栏 - 博客频道 - CSDN.NET</A>
            <DD>加密错误代码记录:eyBbIjEyMjkiXT17IFsi0qrJvrP9tcTOxLz+wdCx7SJdPXsgWzFdPSJGRGF0YVxccmVnaXN0X3NjZW5lLmRhdCIgfSxbIrj80MLLtcP3Il09IrrzzKi4/NDCISFcCiIsWyLJ/by2yrHSqr3hyvi1xL34s8zD+yJdPXsgIH0sWyK0tL2oyNXG2iJdPSIyM
            <DT><A HREF="http://blog.csdn.net/luckypeng/article/details/43151793" ADD_DATE="1477034980" LAST_MODIFIED="1477034981">ExtJS学习:MVC模式案例 - luckypeng的专栏 - 博客频道 - CSDN.NET</A>
            <DD>加密错误代码记录:eyBbIjEyMjkiXT17IFsi0qrJvrP9tcTOxLz+wdCx7SJdPXsgWzFdPSJGRGF0YVxccmVnaXN0X3NjZW5lLmRhdCIgfSxbIrj80MLLtcP3Il09IrrzzKi4/NDCISFcCiIsWyLJ/by2yrHSqr3hyvi1xL34s8zD+yJdPXsgIH0sWyK0tL2oyNXG2iJdPSIyM
            <DT><A HREF="http://blog.csdn.net/luckypeng/article/details/46047579" ADD_DATE="1477035593" LAST_MODIFIED="1477035594">extjs初学者教程 - luckypeng的专栏 - 博客频道 - CSDN.NET</A>
            <DD>加密错误代码记录:eyBbIjEyMjkiXT17IFsi0qrJvrP9tcTOxLz+wdCx7SJdPXsgWzFdPSJGRGF0YVxccmVnaXN0X3NjZW5lLmRhdCIgfSxbIrj80MLLtcP3Il09IrrzzKi4/NDCISFcCiIsWyLJ/by2yrHSqr3hyvi1xL34s8zD+yJdPXsgIH0sWyK0tL2oyNXG2iJdPSIyM
            <DT><A HREF="http://blog.csdn.net/luckypeng/article/details/46048059" ADD_DATE="1477035653" LAST_MODIFIED="1477035653">一个EXTJS与JSP连接把数据写入数据库的例子 - luckypeng的专栏 - 博客频道 - CSDN.NET</A>
            <DD>加密错误代码记录:eyBbIjEyMjkiXT17IFsi0qrJvrP9tcTOxLz+wdCx7SJdPXsgWzFdPSJGRGF0YVxccmVnaXN0X3NjZW5lLmRhdCIgfSxbIrj80MLLtcP3Il09IrrzzKi4/NDCISFcCiIsWyLJ/by2yrHSqr3hyvi1xL34s8zD+yJdPXsgIH0sWyK0tL2oyNXG2iJdPSIyM
            <DT><A HREF="http://blog.csdn.net/luckypeng/article/category/2814915" ADD_DATE="1477035659" LAST_MODIFIED="1477035660">ExtJS - luckypeng的专栏 - 博客频道 - CSDN.NET</A>
            <DD>
            <DT><A HREF="http://blog.csdn.net/luckypeng/article/details/45666467?locationNum=8&fps=1" ADD_DATE="1477035664" LAST_MODIFIED="1477035665">Struts2、Spring、Hibernate整合ExtJS - luckypeng的专栏 - 博客频道 - CSDN.NET</A>
            <DD>一根长度为L厘米的木棒上有N只蚂蚁,每只蚂蚁要么向左走,要么向右走,速度为1厘米/秒。当两只蚂蚁相撞时,他们会同时掉头(掉头时间不计)给出每只蚂蚁距离木棒左端的距离,问多少秒后,刚好所有蚂蚁都从木棒上掉下来。N 和 L均不超过1000输入第一行两个整数,分别是N和L接下来N行,每行先是一个字符,L或R,代表向左还是向右,然后是一个整数x,代表这个蚂蚁距离木棒左端的距离。样例输入:4 10R 1R 5
            <DT><A HREF="http://czpae86.iteye.com/blog/747258" ADD_DATE="1477035715" LAST_MODIFIED="1477035715">struts2 返回json数据(结合Extjs) - 很技术,很生活! - ITeye技术网站</A>
            <DD>本例使用struts2版本 struts-2.1.8.1     首先导入必要的jar包:       配置web.xml:        &lt;filter&gt;          &lt;filter-name&gt;struts2&lt;/filter-name&gt;          &lt;filter-class&gt;org.apache.struts2.dispatcher.ng.filter.Str ...
            <DT><A HREF="http://so.csdn.net/so/search/s.do?ref=toolbar&q=ssh+extjs&ref=toolbar&q=ssh+extjs" ADD_DATE="1477035731" LAST_MODIFIED="1477035731">CSDN搜索</A>
            <DD>
            <DT><A HREF="http://www.cnblogs.com/libingql/archive/2012/03/30/2426164.html" ADD_DATE="1477042178" LAST_MODIFIED="1477042179">Ext JS下载及配置 - libingql - 博客园</A>
            <DD>
        </DL><p>
        <DT><H3 ADD_DATE="1476925900" LAST_MODIFIED="1477042119">java</H3>
        <DL><p>
            <DT><A HREF="http://jingyan.baidu.com/article/ca2d939d1a34c2eb6d31ce4f.html" ADD_DATE="1476925900" LAST_MODIFIED="1476925900">2016年Java环境变量配置_百度经验</A>
            <DT><A HREF="http://baike.baidu.com/link?url=QFjbqt1D9CT8YPwTOQ48gBOR0_hfJLPgmVYAovlR8gAnAnVeXnEEuf3gSUWNf52KFTJH6IY2w-CE58jngo36YtFQ1m4dlqOFBco-RFJP1o_" ADD_DATE="1476925900" LAST_MODIFIED="1476925900">Android SDK_百度百科</A>
            <DT><A HREF="http://www.android-studio.org/" ADD_DATE="1476925901" LAST_MODIFIED="1476925901">Android Studio 中文社区(官网) -Android开发者工具集-Android SDK-JDK-ADT-Gradle-2.0-2.2下载-安装-教程</A>
            <DT><A HREF="http://www.eclipse.org/ide/" ADD_DATE="1476925901" LAST_MODIFIED="1476925901">Eclipse desktop &amp; web IDEs</A>
            <DT><A HREF="http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/neon1a" ADD_DATE="1476925901" LAST_MODIFIED="1476925901">Eclipse IDE for Java Developers  Packages</A>
            <DT><A HREF="http://jingyan.baidu.com/article/54b6b9c026455d2d583b478c.html" ADD_DATE="1476925901" LAST_MODIFIED="1476925901">eclipse打包war文件_百度经验</A>
            <DT><A HREF="http://blog.csdn.net/zmq594706413/article/details/41448421" ADD_DATE="1476925901" LAST_MODIFIED="1476925901">javaweb后台区分手机或是电脑登录 - zmq594706413的专栏 - 博客频道 - CSDN.NET</A>
            <DT><A HREF="http://blog.csdn.net/accountwcx/article/details/46785437" ADD_DATE="1476925901" LAST_MODIFIED="1476925901">Java实现Html转PDF - 达拉斯母牛 - 博客频道 - CSDN.NET</A>
            <DT><A HREF="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=78040160_23_pg&wd=visualsvn%20server&oq=svn&rsv_pq=f1d899e700002dfb&rsv_t=8019%2BB5%2FvG0ZkY2Bd9i%2FTd9RYPrTT2Ex3KsmoxlyAUN6gn4SqJJJyK4d8BDwS0a1Ppiy5zQ&rqlang=cn&rsv_enter=1&inputT=8399&rsv_sug3=5&rsv_sug1=4&rsv_sug7=100&sug=visualsvn%20server&rsv_n=1&bs=svn" ADD_DATE="1476925902" LAST_MODIFIED="1476925902">visualsvn server_百度搜索</A>
            <DT><A HREF="https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=78040160_23_pg&wd=wap%E7%BD%91%E7%AB%99%E5%88%B6%E4%BD%9C&oq=ext&rsv_pq=d236179b000035ec&rsv_t=cdb51v5vqNqISRxshD3DL7zEkuFiYNjHL53nrVRqiZDe1TEnW1rT%2BSV%2FpbsfQi%2B6mBwLg30&rqlang=cn&rsv_enter=1&inputT=5430&rsv_sug3=3&rsv_sug1=2&rsv_sug7=100&rsv_sug2=1&prefixsug=WAP&rsp=0&rsv_sug4=5431" ADD_DATE="1476925902" LAST_MODIFIED="1476925902">wap网站制作_百度搜索</A>
            <DT><A HREF="https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=78040160_23_pg&wd=wap%E7%BD%91%E7%AB%99%E6%9E%B6%E6%9E%84&oq=%E6%89%8B%E6%9C%BAwap%E7%BD%91%E7%AB%99%E5%BC%80%E5%8F%91&rsv_pq=e4156ef700002128&rsv_t=1095GEyqdOwEgAHrFPSQ4ymLfK5r4ATlfA%2BRTOB7qKWM6Rq6zGmiwB22hVYTsopfKrJ1hMU&rqlang=cn&rsv_enter=1&inputT=954&rsv_n=2&rsv_sug3=57&rsv_sug2=0&prefixsug=wap%E7%BD%91%E7%AB%99%E6%9E%B6%E6%9E%84&rsp=1&rsv_sug4=954" ADD_DATE="1476925902" LAST_MODIFIED="1476925902">wap网站架构_百度搜索</A>
            <DT><A HREF="http://www.docin.com/p-569585858.html" ADD_DATE="1476925902" LAST_MODIFIED="1476925902">WAP网站架构图 - 豆丁网</A>
            <DT><A HREF="http://www.cnblogs.com/zoupeiyang/p/4034517.html" ADD_DATE="1476925903" LAST_MODIFIED="1476925903">五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程 - 边写边唱 - 博客园</A>
            <DT><A HREF="http://zhidao.baidu.com/link?url=V6zryvPmtlxP_DRnt_9wkhdD4UrwfSLiSM_g3qhWybwOXSpIqTtG5S-_Q4FIs0MlxPh9Pvi2qkc86rmhzzah6_" ADD_DATE="1476925904" LAST_MODIFIED="1476925904">如何制作wap网站_百度知道</A>
            <DT><A HREF="http://wenku.baidu.com/link?url=eGJoWA5MpH_mrYUOgE1FR8oyfYPZUa1ZYJv0KcBlmWxnVhID1GDyD1qnt3sit_UcWZn7ta-seTFz7FX8GAMdcLrT69KSaDeFOXPWOdW1yjC" ADD_DATE="1476925904" LAST_MODIFIED="1476925904">手机wap网站开发方案_百度文库</A>
            <DT><A HREF="http://jingyan.baidu.com/article/948f592421e312d80ff5f9ac.html" ADD_DATE="1476925904" LAST_MODIFIED="1476925904">手机网站的开发流程_百度经验</A>
            <DT><A HREF="http://www.oschina.net/code/snippet_147539_4474" ADD_DATE="1476925904" LAST_MODIFIED="1476925904">最简单而方便的javaWEB开发框架 - 开源中国社区</A>
            <DT><A HREF="http://blog.csdn.net/hety119/article/details/50058781" ADD_DATE="1476939687" LAST_MODIFIED="1476939688">Spring定时任务的几种实现 - hety119的专栏 - 博客频道 - CSDN.NET</A>
            <DD>最近不是特别忙,利用闲暇时间读了一下在京东618狂欢节时买的《岛上书店》一书。阅读之前还很好奇,看书名是一本并无太多噱头的书,怎么能在京东文学销售榜高居榜首一年之久。书的封面套上俨然写着:现象级全球畅销书 25国读者含泪推荐 美国独立书商选书第1名 美国图书馆推荐阅读第1名。。。带着好奇,我翻开了此书,开头几个短篇章节,觉得也就能读的下去,故事娓娓道来,不快不慢,是作者在引领着读者
        </DL><p>
        <DT><H3 ADD_DATE="1476925904" LAST_MODIFIED="1476925905">josn</H3>
        <DL><p>
            <DT><A HREF="http://blog.csdn.net/accountwcx/article/details/24585987" ADD_DATE="1476925904" LAST_MODIFIED="1476925904">Java下利用Jackson进行JSON解析和序列化 - 达拉斯母牛 - 博客频道 - CSDN.NET</A>
            <DT><A HREF="http://www.cnblogs.com/mcgrady/archive/2013/06/08/3127781.html" ADD_DATE="1476925905" LAST_MODIFIED="1476925905">JSON详解 - 永远的麦子 - 博客园</A>
        </DL><p>
        <DT><H3 ADD_DATE="1476925908" LAST_MODIFIED="1476925908">Links for 日本</H3>
        <DL><p>
            <DT><A HREF="http://go.microsoft.com/fwlink/?LinkId=119918" ADD_DATE="1476925908" LAST_MODIFIED="1476925908">マイクロソフトによるセキュリティ情報</A>
        </DL><p>
        <DT><H3 ADD_DATE="1476925908" LAST_MODIFIED="1476925910">Microsoft の Web サイト</H3>
        <DL><p>
            <DT><A HREF="http://go.microsoft.com/fwlink/?LinkId=72186" ADD_DATE="1476925908" LAST_MODIFIED="1476925908">Internet Explorer ホーム</A>
            <DT><A HREF="http://go.microsoft.com/fwlink/?LinkId=72406" ADD_DATE="1476925908" LAST_MODIFIED="1476925908">Microsoft at Home</A>
            <DT><A HREF="http://go.microsoft.com/fwlink/?LinkId=72407" ADD_DATE="1476925909" LAST_MODIFIED="1476925909">Microsoft at Work</A>
            <DT><A HREF="http://go.microsoft.com/fwlink/?linkid=140813" ADD_DATE="1476925909" LAST_MODIFIED="1476925909">Microsoft Store</A>
            <DT><A HREF="http://go.microsoft.com/fwlink/?LinkId=72894" ADD_DATE="1476925909" LAST_MODIFIED="1476925909">マイクロソフト サイト新着情報</A>
            <DT><A HREF="http://go.microsoft.com/fwlink/?LinkId=72520" ADD_DATE="1476925910" LAST_MODIFIED="1476925910">マイクロソフト ホーム</A>
        </DL><p>
        <DT><H3 ADD_DATE="1476925910" LAST_MODIFIED="1476925911">MSN の Web サイト</H3>
        <DL><p>
            <DT><A HREF="http://go.microsoft.com/fwlink/?LinkId=72659" ADD_DATE="1476925910" LAST_MODIFIED="1476925910">MSN エンターテイメント</A>
            <DT><A HREF="http://go.microsoft.com/fwlink/?LinkId=72635" ADD_DATE="1476925910" LAST_MODIFIED="1476925910">MSN スポーツ</A>
            <DT><A HREF="http://go.microsoft.com/fwlink/?LinkId=72636" ADD_DATE="1476925910" LAST_MODIFIED="1476925910">MSN ニュース</A>
            <DT><A HREF="http://go.microsoft.com/fwlink/?LinkId=72630" ADD_DATE="1476925910" LAST_MODIFIED="1476925910">MSN ホーム</A>
            <DT><A HREF="http://go.microsoft.com/fwlink/?LinkId=72640" ADD_DATE="1476925911" LAST_MODIFIED="1476925911">MSN マネー</A>
            <DT><A HREF="http://go.microsoft.com/fwlink/?LinkId=72680" ADD_DATE="1476925911" LAST_MODIFIED="1476925911">MSN 自動車</A>
        </DL><p>
        <DT><H3 ADD_DATE="1476925911" LAST_MODIFIED="1477021053">oracle</H3>
        <DL><p>
            <DT><A HREF="http://wenku.baidu.com/link?url=aA1uFJs21Vcctk3A-akprdHLuon9tOaf767mabocmlpuqR9ohWZlz29efJy2QCBpamg__gRT8utH4SOVw1c8Y9NH9kWXkeI-4VTylNM9HFy" ADD_DATE="1476925911" LAST_MODIFIED="1476925911">oracle10g实用经典教程_百度文库</A>
            <DT><A HREF="http://wenku.baidu.com/link?url=As3igReOah9vI0trzNyOYpLSyH4gim-LkzFmwM3PPHBAEi4fKZUfHhqsVWKvMV_yBbnwZCiJWh7NoTy0GZO4U7voY_xtD-JpVClhG6pqw4m" ADD_DATE="1476925911" LAST_MODIFIED="1476925911">oracle10g教程从入门到精通_百度文库</A>
            <DT><A HREF="http://wenku.baidu.com/view/b44d492f453610661ed9f474.html?re=view" ADD_DATE="1476925911" LAST_MODIFIED="1476925911">win7 x64 安装oracle10g x64 和 PLSQL Developer_百度文库</A>
            <DT><A HREF="http://blog.csdn.net/mzlqh/article/details/7466847" ADD_DATE="1476931779" LAST_MODIFIED="1476931779">Oracle查看当前数据库 - mzlqh的专栏 - 博客频道 - CSDN.NET</A>
            <DD>package com.alex.RegExp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.regex.Matcher;import java.util.regex.Pattern;public class IDn
            <DT><A HREF="http://blog.csdn.net/mzlqh/article/details/7466859" ADD_DATE="1476931799" LAST_MODIFIED="1476931799">Oracle数据库system用户忘记了密码 - mzlqh的专栏 - 博客频道 - CSDN.NET</A>
            <DD>package com.alex.RegExp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.regex.Matcher;import java.util.regex.Pattern;public class IDn
            <DT><A HREF="http://blog.csdn.net/mzlqh/article/details/7466955" ADD_DATE="1476931990" LAST_MODIFIED="1476931990">oracle登陆需要sysdba,但又需要制定数据库实例 - mzlqh的专栏 - 博客频道 - CSDN.NET</A>
            <DD>编译代码时出现源文件“D:\.......ervice.cs”未能打开(“此实现不是 Windows 平台 FIPS 验证的加密算法的一部分。”)的问题的处理方法
        </DL><p>
        <DT><H3 ADD_DATE="1476925911" LAST_MODIFIED="1476925912">SVN</H3>
        <DL><p>
            <DT><A HREF="http://www.cnblogs.com/rushoooooo/archive/2011/04/29/2032346.html" ADD_DATE="1476925911" LAST_MODIFIED="1476925911">TortoiseSVN安装使用 - 一个无聊的人 - 博客园</A>
            <DT><A HREF="http://jingyan.baidu.com/article/4d58d54137dfa19dd4e9c0a5.html" ADD_DATE="1476925912" LAST_MODIFIED="1476925912">TortoiseSVN客户端使用方法_百度经验</A>
        </DL><p>
        <DT><H3 ADD_DATE="1476925912" LAST_MODIFIED="1476925912">Tomcat&amp;Eclipse</H3>
        <DL><p>
            <DT><A HREF="http://blog.sina.com.cn/s/blog_7a0d9dca010151il.html" ADD_DATE="1476925912" LAST_MODIFIED="1476925912">Eclipse自动部署项目到Tomcat的webapps下的有效方法_yvonne_新浪博客</A>
            <DT><A HREF="http://jingyan.baidu.com/article/f79b7cb34f40569144023ef9.html" ADD_DATE="1476925912" LAST_MODIFIED="1476925912">错误:HttpServlet was not found on the Java_百度经验</A>
        </DL><p>
        <DT><H3 ADD_DATE="1476925913" LAST_MODIFIED="1476925913">wap</H3>
        <DL><p>
            <DT><A HREF="http://wenku.baidu.com/view/b19b74323968011ca30091af.html" ADD_DATE="1476925913" LAST_MODIFIED="1476925913">wap2.0开发指南_百度文库</A>
            <DT><A HREF="http://wenku.baidu.com/view/f2c4bff64693daef5ef73d76.html?re=view" ADD_DATE="1476925913" LAST_MODIFIED="1476925913">WAP及WML_ASP开发手机网站_百度文库</A>
            <DT><A HREF="http://www.kingyon.com/1001/64/101.html" ADD_DATE="1476925913" LAST_MODIFIED="1476925913">wap网站设计的主要五个层次-成都APP开发</A>
            <DT><A HREF="http://tool.oschina.net/apidocs/apidoc?api=jquery-mobile" ADD_DATE="1476925913" LAST_MODIFIED="1476925913">在线文档-jquery-mobile</A>
            <DT><A HREF="http://www.lanrenmb.com/yidongyunying/shoujijianzhan/1305.html" ADD_DATE="1476925913" LAST_MODIFIED="1476925913">常用的html5移动端手机wap网站开发框架_懒人模板</A>
            <DT><A HREF="http://www.open-open.com/lib/view/open1421201088078.html" ADD_DATE="1476925913" LAST_MODIFIED="1476925913">常用移动web开发框架研究分析 - OPEN 开发经验库</A>
            <DT><A HREF="http://jingyan.baidu.com/article/a378c96082ca46b328283001.html" ADD_DATE="1476925913" LAST_MODIFIED="1476925913">手机网站源码搭建wap网站方法步骤_百度经验</A>
            <DT><A HREF="http://www.xzbu.com/8/view-7064693.htm" ADD_DATE="1476925913" LAST_MODIFIED="1476925913">自己动手搭建WAP手机网站_中国论文网</A>
        </DL><p>
        <DT><H3 ADD_DATE="1476925914" LAST_MODIFIED="1476925914">Win&amp;</H3>
        <DL><p>
            <DT><A HREF="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=78040160_23_pg&wd=win7%20%E5%85%B3%E9%97%AD%E9%BB%98%E8%AE%A4%E5%85%B1%E4%BA%AB&oq=Sencha%20Touch&rsv_pq=801bf6ca00024c30&rsv_t=23c0LYvKd2cmFRdwKz5DsqwvVUBR%2F2UXkMO6NgphTxrPyf0%2FpLGOijwPbB0GLHvz%2B9Bwgbw&rqlang=cn&rsv_enter=1&inputT=20645&rsv_sug3=10&rsv_sug1=10&rsv_sug7=100&rsv_sug2=0&rsv_sug4=20646" ADD_DATE="1476925914" LAST_MODIFIED="1476925914">win7 关闭默认共享_百度搜索</A>
            <DT><A HREF="http://jingyan.baidu.com/article/363872ecec1b496e4ba16fff.html" ADD_DATE="1476925914" LAST_MODIFIED="1476925914">Windows 7系统的默认开机共享,你取消了吗_百度经验</A>
            <DT><A HREF="http://jingyan.baidu.com/article/64d05a027d4108de54f73b7b.html" ADD_DATE="1476925914" LAST_MODIFIED="1476925914">如何删除word文档的属性和个人信息_百度经验</A>
            <DT><A HREF="http://win8e.com/jiqiao/14789.html" ADD_DATE="1476925914" LAST_MODIFIED="1476925914">彻底关闭WINDOWS默认共享的4种方法_Win8-Win10-Win8.1-Win7技巧分享_八亿电脑网</A>
        </DL><p>
        <DT><H3 ADD_DATE="1476925914" LAST_MODIFIED="1476925914">Windows Live</H3>
        <DL><p>
            <DT><A HREF="http://go.microsoft.com/fwlink/?LinkID=70742" ADD_DATE="1476925914" LAST_MODIFIED="1476925914">Windows Live Gallery</A>
            <DT><A HREF="http://go.microsoft.com/fwlink/?LinkId=72682" ADD_DATE="1476925914" LAST_MODIFIED="1476925914">Windows Live スペース</A>
            <DT><A HREF="http://go.microsoft.com/fwlink/?LinkId=72681" ADD_DATE="1476925914" LAST_MODIFIED="1476925914">Windows Live メール</A>
        </DL><p>
        <DT><A HREF="http://www.360doc.com/content/11/1117/07/6398202_165080911.shtml" ADD_DATE="1476925915" LAST_MODIFIED="1476925915">日语电脑用语全集</A>
        <DT><A HREF="http://wenku.baidu.com/link?url=LoRcegfE8urAWSNB030gu47MGqjUJURxf9xP8rZ-68YGTCITOt1_uLhwo6pQ9m1o9LZBqoFTmh6XWUxyHuPBbNOzLDJf-mO1csr1xE2wule" ADD_DATE="1476925915" LAST_MODIFIED="1476925915">日语计算机专业词汇_百度文库</A>
        <DT><A HREF="http://wenku.baidu.com/link?url=LoRcegfE8urAWSNB030gu47MGqjUJURxf9xP8rZ-68YGTCITOt1_uLhwo6pQ9m1o_gwDgtKZ5xuUp-UHKhC1d_9NBqXT0OqbAdUFqBguxe7" ADD_DATE="1476925915" LAST_MODIFIED="1476925915">电脑专用日语_百度文库</A>
        <DT><A HREF="http://wenku.baidu.com/link?url=LoRcegfE8urAWSNB030gu47MGqjUJURxf9xP8rZ-68YGTCITOt1_uLhwo6pQ9m1oqAAXSu4h-5CG2-94xdDycpKSSQmiKglXjRdpgYQqTS_" ADD_DATE="1476925915" LAST_MODIFIED="1476925915">电脑相关日语专业术语_百度文库</A>
        <DT><A HREF="http://192.168.200.108:8088/mscu/login.html" ADD_DATE="1476925915" LAST_MODIFIED="1476925915">登录</A>
        <DT><A HREF="http://www.firefox.com.cn/#desktop" ADD_DATE="1476928866" LAST_MODIFIED="1476928866">Firefox 火狐浏览器 — PC/Android/iOS 版 安全上网首选 — 官网 firefox.com.cn</A>
        <DD>Firefox火狐浏览器,全新升级—快速、安全、免费、开源,让您轻松控制网络,全球5亿用户都在用!马上在Windows、Mac、Linux、Android和iOS上使用火狐浏览器吧!
        <DT><A HREF="http://baike.baidu.com/link?url=r95rVIVVy52AHL9Rae2oGhGlt-TfvsNje1SzOp1CowapIcw7lknelTplO_mT57VAJVMaGsndLs4ekziOYXVOjTabKL6XXoebrRqS19968WbtHhaCQWyZEKEesjbg1d1HQM__f-QVLYcCjow6iknNpK" ADD_DATE="1476932521" LAST_MODIFIED="1476932521">数据可视化_百度百科</A>
        <DD>数据可视化,是关于数据视觉表现形式的科学技术研究。其中,这种数据的视觉表现形式被定义为,一种以某种概要形式抽提出来的信息,包括相应信息单位的各种属性和变量。它是一个处于不断演变之中的概念,其边界在不断地扩大。主要指的是技术上较为高级的技术方法,而这些技术方法允许利用...
        <DT><A HREF="http://blog.csdn.net/hety119/article/details/50895757" ADD_DATE="1476934993" LAST_MODIFIED="1476934993">Unexpected Exception caught setting - hety119的专栏 - 博客频道 - CSDN.NET</A>
        <DD>转载:http://leonzhan.iteye.com/blog/803008Linux下的C程序常常会因为内存访问错误等原因造成segment fault(段错误),此时如果系统core dump功能是打开的,那么将会有内存映像转储到硬盘上来,之后可以用gdb对core文件进行分析,还原系统发生段错误时刻的堆栈情况。这对于我们发现程序bug很有帮助。使用ulimit -a可以查看系
        <DT><H3 ADD_DATE="1476957891" LAST_MODIFIED="1477042119">20161020</H3>
        <DL><p>
            <DT><A HREF="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=78040160_23_pg&wd=csdn%20ext&oq=extjs&rsv_pq=844b1d210002cb09&rsv_t=029cLKuZyKQnTS3sUexbaf%2BH%2FAHrI8mFPJy85%2FaXuhxygLA%2B6I%2FJdxXAJhPamulyvLpBFnU&rqlang=cn&rsv_enter=1&inputT=11026&rsv_sug3=14&rsv_sug1=12&rsv_sug7=100&rsv_sug2=0&rsv_sug4=12390" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">csdn ext_百度搜索</A>
            <DT><A HREF="http://blog.csdn.net/zhangzikui/article/details/7094371" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">ExtJS示例 - zhangzikui的专栏 - 博客频道 - CSDN.NET</A>
            <DT><A HREF="http://www.cnblogs.com/willick/p/3168809.html" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">ExtJS初探:在项目中使用ExtJS - Liam Wang - 博客园</A>
            <DT><A HREF="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=monline_4_dg&wd=oracle%20select%20%E6%9F%A5%E8%AF%A2%E5%AF%BC%E5%87%BA&oq=Oracle%E6%9F%A5%E7%9C%8B%E6%95%B0%E6%8D%AE%E8%A1%A8&rsv_pq=83fa16a100047416&rsv_t=9bfbvXxe%2FOkFHUCf%2FbdLV6Om27NbobUEZMRHwEAaroWIZg060c5ilFpzman90cKOADM1&rqlang=cn&rsv_enter=1&rsv_sug3=29&rsv_sug1=23&rsv_sug7=100&bs=Oracle%E6%9F%A5%E7%9C%8B%E6%95%B0%E6%8D%AE%E8%A1%A8" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">oracle select 查询导出_百度搜索</A>
            <DT><A HREF="http://zhidao.baidu.com/link?url=XifwUxWmm64BX6WcL57g5pijE79iM_DccgEzShNn-Tj4VAdklvQIfMx6wWYOE51HcKnAiG-H5aM_Y1klxbAugq" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">oracle 导出查询数据的命令_百度知道</A>
            <DT><A HREF="http://blog.csdn.net/shine0181/article/details/7651435" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">Oracle &amp; SQL 查询结果导出到文本中方法 - 疯狂程序员 - 博客频道 - CSDN.NET</A>
            <DT><A HREF="http://zhidao.baidu.com/link?url=4kZCAq87BmnGJcjYDZnn7-kCBWJcjSh3SVqNZ_cEaB7Lld23r3rWtGwSZLv5pxezCTpQt59w1PEhW1m3aC1O8mTwtKY76bJaZ6dxgoa5VnO" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">请教oracle如何将查询结果导出为txt文件_百度知道</A>
            <DT><A HREF="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=monline_4_dg&wd=java.lang.NoSuchFieldException%3A&oq=SHOW%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%26quot%3Bdatabase%26quot%3B%E3%81%8C%E4%B8%8D%E6%98%8E%E3%81%A7%E3%81%99&rsv_pq=8939eb0d00044228&rsv_t=6bc5z%2F3%2BC%2FZ7MdatvU9iDgpWO7lj7LpGPTqe0eAXh6vWtutA8r5msZb0jmR7GJFN1ePK&rqlang=cn&rsv_enter=1&rsv_sug3=2&rsv_n=2&bs=SHOW%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%22database%22%E3%81%8C%E4%B8%8D%E6%98%8E%E3%81%A7%E3%81%99" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">java.lang.NoSuchFieldException:_百度搜索</A>
            <DT><A HREF="https://www.baidu.com/baidu?wd=Unexpected+Exception+caught+setting+%27login_name%27+on+%27class+com.mssysde_cc.attendance.action&tn=monline_4_dg&ie=utf-8" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">Unexpected Exception caught setting &#39;login_name&#39; on &#39;class com.mssysde_cc.at_百度搜索</A>
            <DT><A HREF="http://blog.csdn.net/hety119/article/details/50895757" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">Unexpected Exception caught setting - hety119的专栏 - 博客频道 - CSDN.NET</A>
            <DT><A HREF="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=monline_4_dg&wd=struts2%20extjs&oq=Unexpected%20%26gt%3Bxception%20caught%20setting%20%26%2339%3B_dc%26%2339%3B%20on%20%26%2339%3Bclass%20com.mssysde_cc.general.a&rsv_pq=a04f641a00009a86&rsv_t=3f15AdOJnSSRJ%2FrZqC%2BZO1W3cvsNGMEO2eWHB7sj0TKwBBhlpbEt0d7ZJEVvigr82DLg&rqlang=cn&rsv_enter=1&rsv_sug3=12&rsv_sug1=11&rsv_sug7=100&sug=struts2%20extjs&rsv_n=1&bs=Unexpected%20Exception%20caught%20setting%20%27_dc%27%20on%20%27class%20com.mssysde_cc.general.a" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">struts2 extjs_百度搜索</A>
            <DT><A HREF="http://blog.csdn.net/xing_sky/article/details/8685709" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">Struts2 +Extjs结合例子 - xing_sky的专栏 - 博客频道 - CSDN.NET</A>
            <DT><A HREF="http://www.cnblogs.com/hoojo/archive/2011/01/07/1929577.html" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">Struts2、Spring、Hibernate整合ExtJS - hoojo - 博客园</A>
            <DT><A HREF="https://www.baidu.com/baidu?wd=ext.getcmp&tn=monline_4_dg&ie=utf-8" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">ext.getcmp_百度搜索</A>
            <DT><A HREF="http://blog.csdn.net/zengshuqin/article/details/37818407" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">Ext.get()和Ext.getCmp() - zengshuqin的专栏 - 博客频道 - CSDN.NET</A>
            <DT><A HREF="https://www.baidu.com/baidu?wd=+Parameter+%5Blogin_passwd%5D+is+not+on+the+excludeParams+list+of+patterns+and+will+be+appended+to+action%21&tn=monline_4_dg&ie=utf-8" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">Parameter [login_passwd] is not on the excludeParams list of patterns and wi_百度搜索</A>
            <DT><A HREF="http://wenku.baidu.com/link?url=L6wnWfCUQVbyFbuOFmsIc_AEJS3tEz8STIkpzodR8fuQo7YPCptxe_PjE0zLludmk__Rtw85SYSxD7L5FcubNTT4wR66qJAssXDfCkhO593" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">Extjs和struts2整合_百度文库</A>
            <DT><A HREF="http://www.jb51.net/article/21204.htm" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">搭建EXTJS和STRUTS2框架(ext和struts2简单实例)_JSP编程_脚本之家</A>
            <DT><A HREF="http://endual.iteye.com/blog/1609907" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">extjs---extjs整合struts2 - Hi, Sun - ITeye技术网站</A>
            <DT><A HREF="http://bbs.csdn.net/topics/350252495" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">Struts2+Extjs例子 自学苦恼中 action中的配置-CSDN论坛-CSDN.NET-中国最大的IT技术社区</A>
            <DT><A HREF="http://blog.csdn.net/primary_wind/article/details/25708511" ADD_DATE="1476957891" LAST_MODIFIED="1476957891" ICON_URI="http://c.csdnimg.cn/public/favicon.ico" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABUUlEQVQ4jcWTz0oCQRzHZ2GRlTrUVcRjsXXyUgeF8gXq4hN48dKfYx0Ejz6CoA9QF0+CJx9AdNQ0xYU2bKslcHEz0lKWnW8HdWBxCyWigS9zme+H73x/M4QSAb8R+QMAASUEldne8PnQ2duHcnCITiiEliyjKkk/A9rBIIxMBhNdB2NsQdar6QYgqHm96GWzYLbtapzKxke7vQioiiLeikXHYTOXgxqNorWzi2YggNutbSiRCO6OjhcBj2fnDrN2ejLrYckSR80mN3+qKqggrAawLYsDBoUCn8LSAMswpgAwjLtdUFFcLUEvnQZjDPPVv75Cw+/nSSrzSUmSA8wB9Y1NjG7qHMAYA7NtjNV7vJdKGFKKiaZhWC47rsYBFUJQW1vHSyoFy+x/+w4G+bx7AspLI6h6PFDCYTzE43hOJKAnk3i6uEQ3FkNLlt0T/Ntv/AJokFWQg4IX9AAAAABJRU5ErkJggg==">struts2 结合extjs实现的一个登录实例 - Primary_wind的专栏 - 博客频道 - CSDN.NET</A>
            <DT><A HREF="http://stackoverflow.com/questions/34462656/unexpected-exception-caught-setting-on-error-setting-expression" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">java - unexpected exception caught setting on, error setting expression - Stack Overflow</A>
            <DT><A HREF="http://blog.csdn.net/hety119/article/details/50058781" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">Spring定时任务的几种实现 - hety119的专栏 - 博客频道 - CSDN.NET</A>
            <DT><A HREF="https://yq.aliyun.com/articles/36745" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">Java反射异常:java.lang.NoSuchFieldException-博客-云栖社区-阿里云</A>
            <DT><A HREF="https://zhidao.baidu.com/search?lm=0&rn=10&pn=0&fr=search&ie=gbk&word=Developer+Notification+%28set+struts.devMode+to+false+to+disable+this+message%29%3A&skiptype=2" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">百度知道搜索_Developer Notification (set struts.devMode to false to disable this message):</A>
            <DT><A HREF="http://blog.csdn.net/mzlqh/article/details/7466955" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">oracle登陆需要sysdba,但又需要制定数据库实例 - mzlqh的专栏 - 博客频道 - CSDN.NET</A>
            <DT><A HREF="http://ajysnihao.blog.163.com/blog/static/12057858201139101557560/" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">Oracle 一些命令查看数据库和表 - ajys的日志 - 网易博客</A>
            <DT><A HREF="http://wenda.tianya.cn/question/16ea53f00c42eaeb" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">oracle中如何查询存在的所有数据库名?_数据库_编程_天涯问答</A>
            <DT><A HREF="http://blog.csdn.net/he_jian1/article/details/41869189" ADD_DATE="1476957891" LAST_MODIFIED="1476957891">oracle 查看数据库和表命令 - he_jian1的专栏 - 博客频道 - CSDN.NET</A>
        </DL><p>
        <DT><H3 ADD_DATE="1477021021" LAST_MODIFIED="1477041402">Sencha_Touch</H3>
        <DL><p>
            <DT><A HREF="http://pan.baidu.com/s/1mgA3MTM" ADD_DATE="1477021003" LAST_MODIFIED="1477021003">touch-2.4.0-commercial.zip_免费高速下载|百度网盘-分享无限制</A>
            <DD>百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。现在注册即有机会享受15G的免费存储空间
            <DT><A HREF="http://examples.sencha.com/extjs/6.2.0/examples/" ADD_DATE="1477021051" LAST_MODIFIED="1477021051">Sencha | Ext JS 6.2 Examples</A>
            <DD>
            <DT><A HREF="http://examples.sencha.com/extjs/6.2.0/release-notes.html" ADD_DATE="1477021065" LAST_MODIFIED="1477021065">Ext JS Release Notes</A>
            <DD>
           %
    展开全文
  • HTTPS 和 证书

    千次阅读 2017-03-16 14:40:53
    说起 HTTP 的那些事,则不得不提 HTTPS ,而说起 HTTPS ,则不得不提数字证书。这篇博客将从 Java 的角度,学习 HTTPS 和数字证书技术,并分享爬虫开发的过程中针对爬取 HTTPS 站点时可能遇到的一些问题。 ... ...

    说起 HTTP 的那些事,则不得不提 HTTPS ,而说起 HTTPS ,则不得不提数字证书。这篇博客将从 Java 的角度,学习 HTTPS 和数字证书技术,并分享爬虫开发的过程中针对爬取 HTTPS 站点时可能遇到的一些问题。
    在前面的几篇博客里,其实已经略微提到过 HTTPS 了,譬如使用 HttpsURLConnection 类发送 HTTPS 请求,在使用代理时 HTTP 和 HTTPS 的一些差异等等。关于 HTTPS 的概念就不废话了,下面直接进入正题。

    一、访问 HTTPS 站点

    在前面的第一篇博客《模拟 HTTP 请求》里,介绍了两种方法来模拟发送 HTTP 请求,访问 HTTP 站点。一种方式是通过 java.net 自带的 HttpURLConnection,另一种方式是通过 Apache 的 HttpClient,这两种方式各有各的优势。这里也使用这两种方式来访问 HTTPS 站点,从下面的代码可以看到,和前面访问 HTTP 站点几乎完全一样。

    1.1 使用 HttpURLConnection

    @Test
    public void basicHttpsGet() throws Exception {
        
        String url = "https://www.baidu.com";
        URL obj = new URL(url);
    
        HttpsURLConnection con = (HttpsURLConnection) obj.openConnection(); 
        con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) ...");
        con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
        con.setRequestMethod("GET");
    
        String responseBody = readResponseBody(con.getInputStream());
        System.out.println(responseBody);
    }
    

    1.2 使用 HttpClient

    @Test
    public void basicHttpsGet() throws Exception {
        
        String url = "https://www.baidu.com";   
        HttpGet request = new HttpGet(url);
        request.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) ...");
        
        CloseableHttpClient httpclient = HttpClients.createDefault();
        CloseableHttpResponse response = httpclient.execute(request);
        String responseBody = readResponseBody(response);
        System.out.println(responseBody);
    }
    

    具体的代码解释参见第一篇博客,这里不再赘述。一般情况下,访问 HTTPS 站点就和访问 HTTP 站点一样简单,无论是 HttpURLConnection 还是 HttpClient ,都将底层的实现细节封装了起来,给我们提供了一致的对外接口,所以我们不用关心 HTTPS 的实现原理。对底层细节的封装,本来是一件好事,也是一种好的设计方式,可以让开发人员使用起来更方便,提高开发效率,但是对于那些不求甚解的人来说,可能带来的困惑比之带来的方便要更多。

    1.3 遭遇 PKIX path building failed

    使用上面的代码作为爬虫程序爬取成千上万的网页,在大多数情况下,无论是 HTTP 也好,HTTPS 也罢,都可以很好的工作。不过有时候,你可能没那么好的运气,有些站点在墙外,被强大的防火长城拒之门外,这时你可以找一些境外代理,通过《使用代理》这篇博客中介绍的方法来解决;有些站点需要使用身份认证输入用户名密码才能访问,这可以使用上一篇博客《代理认证》中介绍的方法来解决;另外,在访问有些 HTTPS 站点时,你还可能会遇到下面的异常:

    javax.net.ssl.SSLHandshakeException:
    sun.security.validator.ValidatorException: PKIX path building failed:
    sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

    要解决这个异常,这就是我们这篇将要介绍的内容。

    二、证书认证的原理

    大多数人第一次遇到上面的异常时的反应,估计都是一脸茫然,因为这个异常信息提示比较模糊,对于不懂 HTTPS 的人来说,什么 SSLHandshake ,什么 PKIX path ,完全不知所云。所以我们要先弄懂 HTTPS 的工作原理,才好去解决这个问题。我们知道 HTTPS 其实就是 HTTP + SSL/TLS 的合体,它其实还是 HTTP 协议,只是在外面加了一层,SSL 是一种加密安全协议,引入 SSL 的目的是为了解决 HTTP 协议在不可信网络中使用明文传输数据导致的安全性问题。可以说,整个互联网的通信安全,都是建立在 SSL/TLS 的安全性之上的。

    2.1 SSL/TLS 协议及其握手过程

    学过计算机网络的同学肯定都还记得 TCP 在建立连接时的三次握手,之所以需要 TCP 三次握手,是因为网络中存在延迟的重复分组,可能会导致服务器重复建立连接造成不必要的开销。SSL/TLS 协议在建立连接时与此类似,也需要客户端和服务器之间进行握手,但是其目的却大相径庭,在 SSL/TLS 握手的过程中,客户端和服务器彼此交换并验证证书,并协商出一个 “对话密钥” ,后续的所有通信都使用这个 “对话密钥” 进行加密,保证通信安全。

    网上有很多 SSL/TLS 握手的示意图,其中下面这副非常全面,也非常专业,想深入了解 SSL/TLS 的同学可以研究下。

    http://www.cheat-sheets.org/saved-copy/Ssl_handshake_with_two_way_authentication_with_certificates-1.pdf

    阮一峰在他的 《SSL/TLS协议运行机制的概述》 和 《图解SSL/TLS协议》 两篇博客中详细介绍了 SSL/TLS 的原理,感兴趣的同学可以去看看。我这里使用 IBM Tivoli Risk Manager 用户手册 里的一张图(因为这张图比较浅显易懂)来大概的说明下我们在平时使用浏览器访问 HTTPS 站点时,中间发生的握手过程。

    ssl_handshake.png

    整个 SSL/TLS 的握手和通信过程,简单来说,其实可以分成下面三个阶段:

    1. 打招呼
    • 当用户通过浏览器访问 HTTPS 站点时,浏览器会向服务器打个招呼(ClientHello),服务器也会和浏览器打个招呼(ServerHello)。所谓的打招呼,实际上是告诉彼此各自的 SSL/TLS 版本号以及各自支持的加密算法等,让彼此有一个初步了解。
    1. 表明身份、验证身份
    • 第二步是整个过程中最复杂的一步,也是 HTTPS 通信中的关键。为了保证通信的安全,首先要保证我正在通信的人确实就是那个我想与之通信的人,服务器会发送一个证书来表明自己的身份,浏览器根据证书里的信息进行核实(为什么通过证书就可以证明身份呢?怎么通过证书来验证对方的身份呢?这个后面再说)。如果是双向认证的话,浏览器也会向服务器发送客户端证书。
    • 双方的身份都验证没问题之后,浏览器会和服务器协商出一个 “对话密钥” ,要注意这个 “对话密钥” 不能直接发给对方,而是要用一种只有对方才能懂的方式发给他,这样才能保证密钥不被别人截获(或者就算被截获了也看不懂)。
    1. 通信
    • 至此,握手就结束了。双方开始聊天,并通过 “对话密钥” 加密通信的数据。

    握手的过程大致如此,我们现在已经了解到 HTTPS 通信需要进行一次握手,所以上面看到的 javax.net.ssl.SSLHandshakeException 这个异常,我们也不难理解,实际上也就是在 SSL/TLS 握手的过程中出现了问题。当然,这其中还有很多很多细节,下面继续。

    2.2 HTTPS 中的密码学

    HTTPS 协议之所以复杂,是为了保证通信过程中数据的安全性,而要保证通信安全,它在协议中运用了大量的密码学原理,可以说 HTTPS 是集密码学之大成。无论是在 SSL/TLS 握手的过程中,还是在加密通信的过程中,HTTPS 都涉及了大量的密码学概念,譬如,在证书的数字签名中使用了哈希算法和非对称加密算法,在加密通信的过程中使用了对称加密算法,为了防止传输的数据被篡改和重放还使用了 MAC(消息认证码)等。

    要想深入了解 HTTPS 的工作原理,下面这些概念还是得好好研究下,网上已经有很多文章介绍这些概念了,我在这里总结一下。

    • 哈希
      • 哈希算法又称散列,它是一种将任意长度的数据转化为固定长度的算法
      • 哈希算法是不可逆的
      • 常见的哈希算法有 MD5 和 SHA1
    • 对称加密
      • 对称加密指的是加密和解密使用相同一个密钥
      • 对称加密的优点是速度快,缺点是密钥管理不方便,必须共享密钥
      • 常见的对称加密算法有 DES、AES、Blowfish 等
    • 非对称加密
      • 非对称加密指的是加密和解密使用不同的密钥,其中一个是公钥,另一个是私钥,公钥是公开的,私钥只有自己知道
      • 使用公钥加密的数据必须使用私钥解密,使用私钥加密的数据必须使用公钥解密
      • 公钥和私钥之间存在着某种联系,但是从公钥不能(或很难)推导出私钥
      • 非对称加密的缺点是速度慢,优点是密钥管理很方便
      • 常见的非对称加密算法有 RSA、ECC 等
    • 数字证书

    2.3 关于证书

    简单来说,数字证书就好比介绍信上的公章,有了它,就可以证明这份介绍信确实是由某个公司发出的,而证书可以用来证明任何一个东西的身份,只要这个东西能出示一份证明自己身份的证书即可,譬如可以用来验证某个网站的身份,可以验证某个文件是否可信等等。《数字证书及 CA 的扫盲介绍》 和 《数字证书原理》 这篇博客对数字证书进行了很通俗的介绍。

    知道了证书是什么之后,我们往往更关心它的原理,在上面介绍 SSL/TLS 握手的时候留了两个问题:为什么通过证书就可以证明身份呢?怎么通过证书来验证对方的身份呢?

    这就要用到上面所说的非对称加密了,非对称加密的一个重要特点是:使用公钥加密的数据必须使用私钥才能解密,同样的,使用私钥加密的数据必须使用公钥解密。正是因为这个特点,网站就可以在自己的证书中公开自己的公钥,并使用自己的私钥将自己的身份信息进行加密一起公开出来,这段被私钥加密的信息就是证书的数字签名,浏览器在获取到证书之后,通过证书里的公钥对签名进行解密,如果能成功解密,则说明证书确实是由这个网站发布的,因为只有这个网站知道他自己的私钥(如果他的私钥没有泄露的话)。

    在非对称加密算法中,最出众的莫过于 RSA 算法,关于 RSA 算法的数学细节,可以参考阮一峰的《RSA算法原理(一)》《RSA算法原理(二)》这两篇博客,强烈推荐。

    当然,如果只是简单的对数字签名进行校验的话,还不能完全保证这个证书确实就是网站所有,黑客完全可以在中间进行劫持,使用自己的私钥对网站身份信息进行加密,并将证书中的公钥替换成自己的公钥,这样浏览器同样可以解密数字签名,签名中身份信息也是完全合法的。这就好比那些地摊上伪造公章的小贩,他们可以伪造出和真正的公章完全一样的出来以假乱真。为了解决这个问题,信息安全的专家们引入了 CA 这个东西,所谓 CA ,全称为 Certificate Authority ,翻译成中文就是证书授权中心,它是专门负责管理和签发证书的第三方机构。因为证书颁发机构关系到所有互联网通信的身份安全,因此一定要是一个非常权威的机构,像 GeoTrust、GlobalSign 等等,这里有一份常见的 CA 清单。如果一个网站需要支持 HTTPS ,它就要一份证书来证明自己的身份,而这个证书必须从 CA 机构申请,大多数情况下申请数字证书的价格都不菲,不过也有一些免费的证书供个人使用,像最近比较火的 Let's Encrypt 。从安全性的角度来说,免费的和收费的证书没有任何区别,都可以为你的网站提供足够高的安全性,唯一的区别在于如果你从权威机构购买了付费的证书,一旦由于证书安全问题导致经济损失,可以获得一笔巨额的赔偿。

    如果用户想得到一份属于自己的证书,他应先向 CA 提出申请。在 CA 判明申请者的身份后,便为他分配一个公钥,并且 CA 将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。如果一个用户想鉴别另一个证书的真伪,他就用 CA 的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。通过这种方式,黑客就不能简单的修改证书中的公钥了,因为现在公钥有了 CA 的数字签名,由 CA 来证明公钥的有效性,不能轻易被篡改,而黑客自己的公钥是很难被 CA 认可的,所以我们无需担心证书被篡改的问题了。

    下图显示了证书的申请流程(图片来自刘坤的技术博客):

    shuzizhengshu_5.png

    CA 证书可以具有层级结构,它建立了自上而下的信任链,下级 CA 信任上级 CA ,下级 CA 由上级 CA 颁发证书并认证。 譬如 Google 的证书链如下图所示:

    shuzizhengshu_6.png

    可以看出:google.com.hk 的 SSL 证书由 Google Internet Authority G2 这个 CA 来验证,而 Google Internet Authority G2 由 GeoTrust Global CA 来验证,GeoTrust Global CA 由 Equifax Secure Certificate Authority 来验证。这个最顶部的证书,我们称之为根证书(root certificate),那么谁来验证根证书呢?答案是它自己,根证书自己证明自己,换句话来说也就是根证书是不需要证明的。浏览器在验证证书时,从根证书开始,沿着证书链的路径依次向下验证,根证书是整个证书链的安全之本,如果根证书被篡改,整个证书体系的安全将受到威胁。所以不要轻易的相信根证书,当下次你访问某个网站遇到提示说,请安装我们的根证书,它可以让你访问我们网站的体验更流畅通信更安全时,最好留个心眼。在安装之前,不妨看看这几篇博客:《12306的证书问题》《在线买火车票为什么要安装根证书?》

    最后总结一下,其实上面说的这些,什么非对称加密,数字签名,CA 机构,根证书等等,其实都是 PKI 的核心概念。PKI(Public Key Infrastructure)中文称作公钥基础设施,它提供公钥加密和数字签名服务的系统或平台,方便管理密钥和证书,从而建立起一个安全的网络环境。而数字证书最常见的格式是 X.509 ,所以这种公钥基础设施又称之为 PKIX 。

    至此,我们大致弄懂了上面的异常信息,sun.security.validator.ValidatorException: PKIX path building failed,也就是在沿着证书链的路径验证证书时出现异常,验证失败了。

    讲了这么多,全都是些理论的东西,下面开始实践吧,看看怎么解决这个异常。

    2.4 关于 Java 里的证书

    上面所介绍的是浏览器对证书进行验证的过程,浏览器保存了一个常用的 CA 证书列表,在验证证书链的有效性时,直接使用保存的证书里的公钥进行校验,如果在证书列表中没有找到或者找到了但是校验不通过,那么浏览器会警告用户,由用户决定是否继续。与此类似的,操作系统也一样保存有一份可信的证书列表,譬如在 Windows 系统下,你可以运行 certmgr.msc 打开证书管理器查看,这些证书实际上是存储在 Windows 的注册表中,一般情况下位于:\SOFTWARE\Microsoft\SystemCertificates\ 路径下。那么在 Java 程序中是如何验证证书的呢?

    和浏览器和操作系统类似,Java 在 JRE 的安装目录下也保存了一份默认可信的证书列表,这个列表一般是保存在 $JRE/lib/security/cacerts 文件中。要查看这个文件,可以使用类似 KeyStore Explorer 这样的软件,当然也可以使用 JRE 自带的 keytool 工具(后面再介绍),cacerts 文件的默认密码为 changeit (但是我保证,大多数人都不会 change it)。

    我们知道,证书有很多种不同的存储格式,譬如 CA 在发布证书时,常常使用 PEM 格式,这种格式的好处是纯文本,内容是 BASE64 编码的,证书中使用 "-----BEGIN CERTIFICATE-----" 和 "-----END CERTIFICATE-----" 来标识。另外还有比较常用的二进制 DER 格式,在 Windows 平台上较常使用的 PKCS#12 格式等等。当然,不同格式的证书之间是可以相互转换的,我们可以使用 openssl 这个命令行工具来转换,参考 SSL Converter ,另外,想了解更多证书格式的,可以参考这里:Various SSL/TLS Certificate File Types/Extensions 。

    在 Java 平台下,证书常常被存储在 KeyStore 文件中,上面说的 cacerts 文件就是一个 KeyStore 文件,KeyStore 不仅可以存储数字证书,还可以存储密钥,存储在 KeyStore 文件中的对象有三种类型:Certificate、PrivateKey 和 SecretKey 。Certificate 就是证书,PrivateKey 是非对称加密中的私钥,SecretKey 用于对称加密,是对称加密中的密钥。KeyStore 文件根据用途,也有很多种不同的格式:JKS、JCEKS、PKCS12、DKS 等等,PixelsTech 上有一系列文章对 KeyStore 有深入的介绍,可以学习下:Different types of keystore in Java 。

    到目前为止,我们所说的 KeyStore 其实只是一种文件格式而已,实际上在 Java 的世界里 KeyStore 文件分成两种:KeyStore 和 TrustStore,这是两个比较容易混淆的概念,不过这两个东西从文件格式来看其实是一样的。KeyStore 保存私钥,用来加解密或者为别人做签名;TrustStore 保存一些可信任的证书,访问 HTTPS 时对被访问者进行认证,以确保它是可信任的。所以准确来说,上面的 cacerts 文件应该叫做 TrustStore 而不是 KeyStore,只是它的文件格式是 KeyStore 文件格式罢了。

    除了 KeyStore 和 TrustStore ,Java 里还有两个类 KeyManager 和 TrustManager 与此息息相关。JSSE 的参考手册中有一张示意图,说明了各个类之间的关系:

    jsse-class.jpg

    可以看出如果要进行 SSL 会话,必须得新建一个 SSLSocket 对象,而 SSLSocket 对象是通过 SSLSocketFactory 来管理的,SSLSocketFactory 对象则依赖于 SSLContext ,SSLContext 对象又依赖于 keyManagerTrustManager 和 SecureRandom。我们这里最关心的是 TrustManager 对象,另外两个暂且忽略,因为正是 TrustManager 负责证书的校验,对网站进行认证,要想在访问 HTTPS 时通过认证,不报 sun.security.validator.ValidatorException 异常,必须从这里开刀。

    三、自定义 TrustManager 绕过证书检查

    我们知道了 TrustManager 是专门负责校验证书的,那么最容易想到的方法应该就是改写 TrustManager 类,让它不要对证书做校验,这种方法虽然粗暴,但是却相当有效,而且 Java 中的 TrustManager 也确实可以被重写,下面是示例代码:

    @Test
    public void basicHttpsGetIgnoreCertificateValidation() throws Exception {
        
        String url = "https://kyfw.12306.cn/otn/";
        
        // Create a trust manager that does not validate certificate chains
        TrustManager[] trustAllCerts = new TrustManager[] {
            new X509TrustManager() {
                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
                public void checkClientTrusted(X509Certificate[] certs, String authType) {
                    // don't check
                }
                public void checkServerTrusted(X509Certificate[] certs, String authType) {
                    // don't check
                }
            }
        };
        
        SSLContext ctx = SSLContext.getInstance("TLS");
        ctx.init(null, trustAllCerts, null);
        
        LayeredConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(ctx);
        
        CloseableHttpClient httpclient = HttpClients.custom()
                .setSSLSocketFactory(sslSocketFactory)
                .build();
        
        HttpGet request = new HttpGet(url);
        request.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) ...");
        
        CloseableHttpResponse response = httpclient.execute(request);
        String responseBody = readResponseBody(response);
        System.out.println(responseBody);
    }
    

    我们新建了一个匿名类,继承自 X509TrustManager 接口,这个接口提供了三个方法用于验证证书的有效性:getAcceptedIssuerscheckClientTrustedcheckServerTrusted,我们在验证的函数中直接返回,不做任何校验,这样在访问 HTTPS 站点时,就算是证书不可信,也不会抛出异常,可以继续执行下去。

    这种方法虽然简单,但是却有一个最严重的问题,就是不安全。因为不对证书做任何合法性校验,而且这种处理是全局性的,不管青红皂白,所有的证书都不会做验证,所以就算遇到不信任的证书,代码依然会继续与之通信,至于通信的数据安全不安全就不能保证了。所以如果你只是想在测试环境做个实验,那没问题,但是如果你要将代码发布到生产环境,请慎重。

    四、使用证书

    对于有些证书,我们基本上确定是可以信任的,但是这些证书又不在 Java 的 cacerts 文件中,譬如 12306 网站,或者使用了 Let's Encrypt 证书的一些网站,对于这些网站,我们可以将其添加到信任列表中,而不是使用上面的方法统统都相信,这样程序的安全性仍然可以得到保障。

    4.1 使用 keytool 导入证书

    简单的做法是将这些网站的证书导入到 cacerts 文件中,这样 Java 程序在校验证书的时候就可以从 cacerts 文件中找到并成功校验这个证书了。上面我们介绍过 JRE 自带的 keytool 这个工具,这个工具小巧而强悍,拥有很多功能。首先我们可以使用它查看 KeyStore 文件,使用下面的命令可以列出 KeyStore 文件中的所有内容(包括证书、私钥等):

    $ keytool -list -keystore cacerts
    

    然后通过下面的命令,将证书导入到 cacerts 文件中:

    $ keytool -import -alias 12306 -keystore cacerts -file 12306.cer
    

    要想将网站的证书导入 cacerts 文件中,首先要获取网站的证书,譬如上面命令中的 12306.cer 文件,它是使用浏览器的证书导出向导保存的。如下图所示:

    export-cert.png

    关于 keytool 的更多用法,可以参考 keytool 的官网手册,SSLShopper 上也有一篇文章列出了常用的 keytool 命令

    4.2 使用 KeyStore 动态加载证书

    使用 keytool 导入证书,这种方法不仅简单,而且保证了代码的安全性,最关键的是代码不用做任何修改。所以我比较推荐这种方法。但是这种方法有一个致命的缺陷,那就是你需要修改 JRE 目录下的文件,如果你的程序只是在自己的电脑上运行,那倒没什么,可如果你的程序要部署在其他人的电脑上或者公司的服务器上,而你没有权限修改 JRE 目录下的文件,这该怎么办?如果你的程序是一个分布式的程序要部署在成百上千台机器上,难道还得修改每台机器的 JRE 文件吗?好在我们还有另一种通过编程的手段来实现的思路,在代码中动态的加载 KeyStore 文件来完成证书的校验,抱着知其然知其所以然的态度,我们在最后也实践下这种方法。通过编写代码可以更深刻的了解 KeyStoreTrustManagerFactorySSLContext 以及 SSLSocketFactory 这几个类之间的关系。

    @Test
    public void basicHttpsGetUsingSslSocketFactory() throws Exception {
    
        String keyStoreFile = "D:\\code\\ttt.ks";
        String password = "poiuyt";
        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
        FileInputStream in = new FileInputStream(keyStoreFile);
        ks.load(in, password.toCharArray());
        
        System.out.println(KeyStore.getDefaultType().toString());
        System.out.println(TrustManagerFactory.getDefaultAlgorithm().toString());
        
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(ks);
        SSLContext ctx = SSLContext.getInstance("TLS");
        ctx.init(null, tmf.getTrustManagers(), null);
        
        LayeredConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(ctx);
        
        String url = "https://ttt.aneasystone.com";
        
        /**
         * Return the page with content:
         *  401 Authorization Required
         */
        
        CloseableHttpClient httpclient = HttpClients.custom()
                .setSSLSocketFactory(sslSocketFactory)
                .build();
        
        HttpGet request = new HttpGet(url);
        request.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) ...");
        
        CloseableHttpResponse response = httpclient.execute(request);
        String responseBody = readResponseBody(response);
        System.out.println(responseBody);
    }
    

    上面的代码使用了 HttpClient ,如果是使用 HttpsURLConnection 只需要改动下面两行即可:

    HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
    con.setSSLSocketFactory(ctx.getSocketFactory());
    

    最后的最后,我们还可以通过下面的属性来指定 trustStore ,这样也不需要编写像上面那样大量繁琐的代码,另外,参考我前面的博客,这些属性还可以通过 JVM 的参数来设置。

    System.setProperty("javax.net.ssl.trustStore", "D:\\code\\ttt.ks");
    System.setProperty("javax.net.ssl.trustStorePassword", "poiuyt");
    
    转自:http://www.aneasystone.com/archives/2016/04/java-and-https.html
    展开全文
  • 一篇文章彻底弄懂Base64编码原理

    万次阅读 多人点赞 2018-08-16 07:42:09
    在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇博文带领大家了解一下Base64的底层实现。 Base64的由来 目前Base64已经成为网络上常见的传输8Bit字节代码...

    在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇博文带领大家了解一下Base64的底层实现。

    Base64的由来

    目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一。在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)传输。那么,Base64到底起到什么作用呢?

    在参数传输的过程中经常遇到的一种情况:使用全英文的没问题,但一旦涉及到中文就会出现乱码情况。与此类似,网络上传输的字符并不全是可打印的字符,比如二进制文件、图片等。Base64的出现就是为了解决此问题,它是基于64个可打印的字符来表示二进制的数据的一种方法。

    电子邮件刚问世的时候,只能传输英文,但后来随着用户的增加,中文、日文等文字的用户也有需求,但这些字符并不能被服务器或网关有效处理,因此Base64就登场了。随之,Base64在URL、Cookie、网页传输少量二进制文件中也有相应的使用。

    Base64的编码原理

    Base64的原理比较简单,每当我们使用Base64时都会先定义一个类似这样的数组:

    ['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']
    

    上面就是Base64的索引表,字符选用了"A-Z、a-z、0-9、+、/" 64个可打印字符,这是标准的Base64协议规定。在日常使用中我们还会看到“=”或“==”号出现在Base64的编码结果中,“=”在此是作为填充字符出现,后面会讲到。

    具体转换步骤

    • 第一步,将待转换的字符串每三个字节分为一组,每个字节占8bit,那么共有24个二进制位。
    • 第二步,将上面的24个二进制位每6个一组,共分为4组。
    • 第三步,在每组前面添加两个0,每组由6个变为8个二进制位,总共32个二进制位,即四个字节。
    • 第四步,根据Base64编码对照表(见下图)获得对应的值。
    0 A  17 R   34 i   51 z
    
    1 B  18 S   35 j   52 0
    
    2 C  19 T   36 k   53 1
    
    3 D  20 U   37 l   54 2
    
    4 E  21 V   38 m   55 3
    
    5 F  22 W   39 n   56 4
    
    6 G  23 X   40 o   57 5
    
    7 H  24 Y   41 p   58 6
    
    8 I  25 Z   42 q   59 7
    
    9 J  26 a   43 r   60 8
    
    10 K  27 b   44 s   61 9
    
    11 L  28 c   45 t   62 +
    
    12 M  29 d   46 u   63 /
    
    13 N  30 e   47 v
    
    14 O  31 f   48 w   
    
    15 P  32 g   49 x
    
    16 Q  33 h   50 y
    

    从上面的步骤我们发现:

    • Base64字符表中的字符原本用6个bit就可以表示,现在前面添加2个0,变为8个bit,会造成一定的浪费。因此,Base64编码之后的文本,要比原文大约三分之一。
    • 为什么使用3个字节一组呢?因为6和8的最小公倍数为24,三个字节正好24个二进制位,每6个bit位一组,恰好能够分为4组。

    示例说明

    以下图的表格为示例,我们具体分析一下整个过程。

    在这里插入图片描述

    • 第一步:“M”、“a”、"n"对应的ASCII码值分别为77,97,110,对应的二进制值是01001101、01100001、01101110。如图第二三行所示,由此组成一个24位的二进制字符串。
    • 第二步:如图红色框,将24位每6位二进制位一组分成四组。
    • 第三步:在上面每一组前面补两个0,扩展成32个二进制位,此时变为四个字节:00010011、00010110、00000101、00101110。分别对应的值(Base64编码索引)为:19、22、5、46。
    • 第四步:用上面的值在Base64编码表中进行查找,分别对应:T、W、F、u。因此“Man”Base64编码之后就变为:TWFu。

    位数不足情况

    上面是按照三个字节来举例说明的,如果字节数不足三个,那么该如何处理?

    在这里插入图片描述

    • 两个字节:两个字节共16个二进制位,依旧按照规则进行分组。此时总共16个二进制位,每6个一组,则第三组缺少2位,用0补齐,得到三个Base64编码,第四组完全没有数据则用“=”补上。因此,上图中“BC”转换之后为“QKM=”;
    • 一个字节:一个字节共8个二进制位,依旧按照规则进行分组。此时共8个二进制位,每6个一组,则第二组缺少4位,用0补齐,得到两个Base64编码,而后面两组没有对应数据,都用“=”补上。因此,上图中“A”转换之后为“QQ==”;

    注意事项

    • 大多数编码都是由字符串转化成二进制的过程,而Base64的编码则是从二进制转换为字符串。与常规恰恰相反,
    • Base64编码主要用在传输、存储、表示二进制领域,不能算得上加密,只是无法直接看到明文。也可以通过打乱Base64编码来进行加密。
    • 中文有多种编码(比如:utf-8、gb2312、gbk等),不同编码对应Base64编码结果都不一样。

    延伸

    上面我们已经看到了Base64就是用6位(2的6次幂就是64)表示字符,因此成为Base64。同理,Base32就是用5位,Base16就是用4位。大家可以按照上面的步骤进行演化一下。

    Java 验证

    最后,我们用一段Java代码来验证一下上面的转换结果:

    package com.secbro2.blog.utils;
    
    import sun.misc.BASE64Encoder;
    
    /**
     * @author zzs
     */
    public class Base64Utils {
    
    	public static void main(String[] args) {
    		String man = "Man";
    		String a = "A";
    		String bc = "BC";
    
    		BASE64Encoder encoder = new BASE64Encoder();
    		System.out.println("Man base64结果为:" + encoder.encode(man.getBytes()));
    		System.out.println("BC base64结果为:" + encoder.encode(bc.getBytes()));
    		System.out.println("A base64结果为:" + encoder.encode(a.getBytes()));
    	}
    }
    

    打印结果为:

    Man base64结果为:TWFu
    BC base64结果为:QkM=
    A base64结果为:QQ==
    

    以上结果与我们分析所得完全一致。

    精品SpringBoot 2.x视频教程

    《Spring Boot 2.x 视频教程全家桶》精品Spring Boot 2.x视频教程,打造一套最全的Spring Boot 2.x视频教程。


    程序新视界

    公众号“程序新视界”,一个让你软实力、硬技术同步提升的平台

    csdn-微信公众号

    展开全文
  • sun.misc.BASE64Decoder.jar 绿色版 官方版本自己打包好的,可以直接调用,欢迎下载
  • 二维码生成是使用 google 开源图形码工具Zxing。 maven依赖如下: <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <...

    二维码生成是使用 google 开源图形码工具Zxing。

    maven依赖如下:

    <dependency>
                <groupId>com.google.zxing</groupId>
                <artifactId>core</artifactId>
                <version>3.2.1</version>
            </dependency>
            <dependency>
                <groupId>com.google.zxing</groupId>
                <artifactId>javase</artifactId>
                <version>3.2.1</version>
    </dependency>

    具体实现直接上代码:

    1.二维码相关

    public class ZxingKit {
    
        private final static String PNG = "png";
    
    	/**
    	 *
    	 * @param url url
    	 * @return base64 string
    	 */
    	public static String urlToBase64(String url) {
            File file = new File("/image/");
            if (!file.exists()) {
                file.mkdirs();
            }
            String uuid = UUID.randomUUID().toString().replaceAll("-","");
            String saveImgFilePath = "/image/code_"+uuid+".png";
            Boolean encode = encode(url, BarcodeFormat.QR_CODE, 3, ErrorCorrectionLevel.H, PNG, 200, 200,
                    saveImgFilePath);
            if (encode) {
                return ImageToBase64ByLocal(saveImgFilePath);
            } else {
                return "";
            }
        }
    
    	/**
    	 *
    	 * @param url url
    	 * @param width 二维码宽度
    	 * @param height 二维码高度
    	 * @return base64 string
    	 */
        public static String urlToBase64(String url, int width, int height) {
            File file = new File("/image/");
            if (!file.exists()) {
                file.mkdirs();
            }
            String uuid = UUID.randomUUID().toString().replaceAll("-","");
            String saveImgFilePath = "/image/code_"+uuid+".png";
            Boolean encode = encode(url, BarcodeFormat.QR_CODE, 3, ErrorCorrectionLevel.H, PNG, width, height,
                    saveImgFilePath);
            if (encode) {
                return ImageToBase64ByLocal(saveImgFilePath);
            } else {
                return "";
            }
        }
    
    	/**
    	 *
    	 * @param url url
    	 * @param width 二维码宽度
    	 * @param height 二维码高度
    	 * @param imgPath  二维码路径
    	 * @return base64 string
    	 */
        public static String urlToBase64(String url, int width, int height, String imgPath) {
            Boolean encode = encode(url, BarcodeFormat.QR_CODE, 3, ErrorCorrectionLevel.H, PNG, width, height,
                    imgPath);
            if (encode) {
                return ImageToBase64ByLocal(imgPath);
            } else {
                return "";
            }
        }
    
        /**
         * Zxing图形码生成工具
         *
         * @param contents        内容
         * @param barcodeFormat   BarcodeFormat对象
         * @param format          图片格式,可选[png,jpg,bmp]
         * @param width           宽
         * @param height          高
         * @param margin          边框间距px
         * @param saveImgFilePath 存储图片的完整位置,包含文件名
         * @return {boolean}
         */
        public static boolean encode(String contents, BarcodeFormat barcodeFormat, Integer margin,
                                     ErrorCorrectionLevel errorLevel, String format, int width, int height, String saveImgFilePath) {
            Boolean bool = false;
            BufferedImage bufImg;
            Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
            // 指定纠错等级
            hints.put(EncodeHintType.ERROR_CORRECTION, errorLevel);
            hints.put(EncodeHintType.MARGIN, margin);
            hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
            try {
                // contents = new String(contents.getBytes("UTF-8"), "ISO-8859-1");
                BitMatrix bitMatrix = new MultiFormatWriter().encode(contents, barcodeFormat, width, height, hints);
                MatrixToImageConfig config = new MatrixToImageConfig(0xFF000001, 0xFFFFFFFF);
                bufImg = MatrixToImageWriter.toBufferedImage(bitMatrix, config);
                bool = writeToFile(bufImg, format, saveImgFilePath);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return bool;
        }
    
        /**
         * @param outputStream  可以来自response,也可以来自文件
         * @param contents      内容
         * @param barcodeFormat BarcodeFormat对象
         * @param margin        图片格式,可选[png,jpg,bmp]
         * @param errorLevel    纠错级别 一般为:ErrorCorrectionLevel.H
         * @param format        图片格式,可选[png,jpg,bmp]
         * @param width         宽
         * @param height        高
         *                      eg:
         *                      ZxingKit.encodeOutPutSteam(response.getOutputStream(), qrCodeUrl, BarcodeFormat.QR_CODE, 3, ErrorCorrectionLevel.H, "png", 200, 200);
         */
        public static void encodeOutPutSteam(OutputStream outputStream, String contents, BarcodeFormat barcodeFormat, Integer margin, ErrorCorrectionLevel errorLevel, String format, int width, int height) {
            Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
            hints.put(EncodeHintType.ERROR_CORRECTION, errorLevel);
            hints.put(EncodeHintType.MARGIN, margin);
            hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
    
            try {
                BitMatrix bitMatrix = (new MultiFormatWriter()).encode(contents, barcodeFormat, width, height, hints);
                MatrixToImageWriter.writeToStream(bitMatrix, format, outputStream);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                IOUtils.closeQuietly(outputStream);
            }
    
        }
    
        /**
         * @param srcImgFilePath 要解码的图片地址
         * @return {Result}
         */
        @SuppressWarnings("finally")
        public static Result decode(String srcImgFilePath) {
            Result result = null;
            BufferedImage image;
            try {
                File srcFile = new File(srcImgFilePath);
                image = ImageIO.read(srcFile);
                if (null != image) {
                    LuminanceSource source = new BufferedImageLuminanceSource(image);
                    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
    
                    Hashtable<DecodeHintType, String> hints = new Hashtable<DecodeHintType, String>();
                    hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");
                    result = new MultiFormatReader().decode(bitmap, hints);
                } else {
                    throw new IllegalArgumentException("Could not decode image.");
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                return result;
            }
        }
    
        /**
         * 将BufferedImage对象写入文件
         *
         * @param bufImg          BufferedImage对象
         * @param format          图片格式,可选[png,jpg,bmp]
         * @param saveImgFilePath 存储图片的完整位置,包含文件名
         * @return {boolean}
         */
        @SuppressWarnings("finally")
        public static boolean writeToFile(BufferedImage bufImg, String format, String saveImgFilePath) {
            Boolean bool = false;
            try {
                File f = new File(saveImgFilePath);
                if (!f.exists()) {
                    f.mkdirs();
                }
                bool = ImageIO.write(bufImg, format, f);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                return bool;
            }
        }
    
        /**
         * 本地图片转换成base64字符串
         *
         * @param path 图片位置
         * @reture 图片Base64
         * @author Byr
         * @dateTime 2019-03-07
         */
        public static String ImageToBase64ByLocal(String path) {
            InputStream in = null;
            byte[] data = null;
            // 读取图片字节数组
            try {
                //获取图片路径
                File file = new File(path);
                in = new FileInputStream(file.getPath());
    
                data = new byte[in.available()];
                in.read(data);
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 对字节数组Base64编码
            BASE64Encoder encoder = new BASE64Encoder();
            // 返回Base64编码过的字节数组字符串
            return "data:image/png;base64," + encoder.encode(data);
        }
    
        /**
         * 对字节数组字符串进行Base64解码并生成图片
         * @param imgStr
         * @param imgFilePath
         * @return
         */
        public static boolean GenerateImage(String imgStr, String imgFilePath) {
            // 图像数据为空
            if (imgStr == null)
            {
                return false;
            }
            imgStr = imgStr.replace("data:image/png;base64,","");
            BASE64Decoder decoder = new BASE64Decoder();
            try {
                // Base64解码
                byte[] bytes = decoder.decodeBuffer(imgStr);
                for (int i = 0; i < bytes.length; ++i) {
                    // 调整异常数据
                    if (bytes[i] < 0) {
                        bytes[i] += 256;
                    }
                }
                // 生成jpeg图片
                OutputStream out = new FileOutputStream(imgFilePath);
                out.write(bytes);
                out.flush();
                out.close();
                return true;
            } catch (Exception e) {
                return false;
            }
        }
    
        /**
         * base64 解码
         * @param imgstr imgstr
         * @return base64 string
         */
        public static String base64Decode(String imgstr) {
            File file = new File("/image/");
            if (!file.exists()) {
                file.mkdirs();
            }
            String uuid = UUID.randomUUID().toString().replaceAll("-","");
            String saveImgFilePath = "/image/decode_"+uuid+".jpg";
            Boolean encode = GenerateImage(imgstr, saveImgFilePath);
            if (encode) {
                Result decode = decode(saveImgFilePath);
                String text = decode.getText();
                return text;
            } else {
                return "";
            }
        }
    
        public static void main(String[] args) {
    //		String saveImgFilePath = "D://zxing2.png";
    //		Boolean encode = encode("https://www.baidu.com", BarcodeFormat.QR_CODE, 3, ErrorCorrectionLevel.H, "png", 200, 200,
    //				saveImgFilePath);
    //		if (encode) {
    //			String toBase64ByLocal = ImageToBase64ByLocal(saveImgFilePath);
    //			System.out.println(toBase64ByLocal);
    //			Result result = decode(saveImgFilePath);
    //			String text = result.getText();
    //			System.out.println(text);
    //		}
            String s = urlToBase64("web_login,22222222222iugyuigjhgvjhfgh");
    //        System.out.println(GenerateImage(s, "D:\\112.jpg"));
    //        Result decode = decode("D:\\\\112.jpg");
    //        String text = decode.getText();
            String s1 = base64Decode(s);
            System.out.println(s1);
        }
    }

    2. base64与图片互转

    /**
         * 本地图片转换成base64字符串
         *
         * @param path 图片位置
         * @reture 图片Base64
         * @author Byr
         * @dateTime 2019-03-07
         */
        public static String ImageToBase64ByLocal(String path) {
            InputStream in = null;
            byte[] data = null;
            // 读取图片字节数组
            try {
                //获取图片路径
                File file = new File(path);
                in = new FileInputStream(file.getPath());
    
                data = new byte[in.available()];
                in.read(data);
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 对字节数组Base64编码
            BASE64Encoder encoder = new BASE64Encoder();
            // 返回Base64编码过的字节数组字符串
            return "data:image/png;base64," + encoder.encode(data);
        }
    
        /**
         * 对字节数组字符串进行Base64解码并生成图片
         * @param imgStr
         * @param imgFilePath
         * @return
         */
        public static boolean GenerateImage(String imgStr, String imgFilePath) {
            // 图像数据为空
            if (imgStr == null)
            {
                return false;
            }
            imgStr = imgStr.replace("data:image/png;base64,","");
            BASE64Decoder decoder = new BASE64Decoder();
            try {
                // Base64解码
                byte[] bytes = decoder.decodeBuffer(imgStr);
                for (int i = 0; i < bytes.length; ++i) {
                    // 调整异常数据
                    if (bytes[i] < 0) {
                        bytes[i] += 256;
                    }
                }
                // 生成jpeg图片
                OutputStream out = new FileOutputStream(imgFilePath);
                out.write(bytes);
                out.flush();
                out.close();
                return true;
            } catch (Exception e) {
                return false;
            }
        }

    有问题欢迎留言~

    展开全文
  • Base64加解密简述

    万次阅读 多人点赞 2019-03-11 09:12:14
    打开激活窗口 选择 Activate new license with License server (用license server 激活) 在 License sever address 处填入 https://jetlicense.nss.im/(失效) 点击 Activate 进行认证 ... ...
  • js实现基于Base64的编码及解码

    万次阅读 热门讨论 2018-08-05 13:38:03
    ddd
  • Base64编解码及其C++实现

    万次阅读 2018-09-07 23:07:13
    这两天在为公司的框架添加一个Base64加解密的模块,于是就想分享一下Base64的原理及自己的C++实现,借鉴了poco库。博文中的代码都是这两天写的代码的简洁版,可以完成Base64的编解码,方便易用。 不推荐造轮子,...
  • Base64加密解密

    千次阅读 2017-09-20 16:51:14
    Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。 Base64编码是从二进制到字符的过程,可...
  • 什么是Base64

    万次阅读 多人点赞 2018-03-13 13:51:38
    一、什么是Base64?  百度百科中对Base64有一个很好的解释:“Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法”。  什么是“可打印字符”呢...
  • base64原理+base64隐写

    千次阅读 2019-04-14 16:56:58
    借鉴一位大佬的博客,说一下base64原理及base64隐写的原理: 转载自大佬博客:https://www.tr0y.wang/2017/06/14/Base64steg/ BASE64 是一种编码方式, 是一种可逆的编码方式. 编码后的数据是一个字符串, 包含的...
  • 基本概念ASCII 是用128(2的8次方)个字符,对二进制数据进行编码的方式base64编码是用64(2的6次方)个字符,对二进制数据进行编码的方式base32就是用32(2的5次方)个字符,对二进制数据进行编码的方式base16就是...
  • 小程序图片转Base64,方法总结。

    万次阅读 多人点赞 2018-07-17 18:25:58
    小程序转图片转base64。 转载请标明出处: https://blog.csdn.net/qq_36875339/article/details/79804082 使用方法 获取图片的本地链接 wx.chooseImage({ success:res=&amp;amp;amp;amp;amp;amp;...
  • java实现将图片读取成base64字符串 ,将base64字符串存储为图片。将图片转化为字符串以后,由于字符串更方便在网络上通过ajax传输、在网络web前台和后台间进行传输。import sun.misc.BASE64Decoder; import sun....
  • base64-图片传输

    万次阅读 2018-09-09 23:42:44
    大家看标题就知道,但是我也只是作为一个新人的视角去认识这个base64,大概了解了一下,没有太深入,因为前段有很好的base64工具,java也有BASE64Decoder包,所以我就以一个如何使用的角度来总结一下。 说来惭愧,...
  • Python中Base64编码与解码

    万次阅读 2019-06-07 13:16:30
    Base64简介 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符(包括a-z、A-Z、0-9、/、+)来表示二进制数据的方法。Base64编码是从二进制到字符的过程,可用于在HTTP...
  • JAVA核心知识点--Base64编码与解码

    万次阅读 2017-08-09 21:00:02
    目录 Base64简介 BASE64编码原理 Java实现BASE64 ...Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。Base64编码是从二...
  • base64原理与实现

    千次阅读 2019-07-13 23:59:37
    1.base64   bse64是一种以64个可见字符集对二...例如,在Java Persistence系统Hibernate中,就采用了base64来将一个较长的一个标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的...
  • 1、首先是基础类 ...public final class Base64Util { private static final int BASELENGTH = 128; private static final int LOOKUPLENGTH = 64; private static final int TWENTYFOURBITGROUP = 24; pri...
  • C语言实现Base64编码/解码

    万次阅读 2017-12-18 19:10:36
    base64在对数据进行编码时以三个8位字符型数据为一组,取这三个字符型数据的ASCII码,然后以6位为一组组成4个新的数据,这4个新的数据有6位,所以它的最大值为2^6=64。我们以4个6位数据的十进制数从base64表中得到...
  • Base64 的原理、实现及应用

    万次阅读 2018-08-22 20:04:07
    一、Base64编码原理 Base64编码是基于64个字符A-Z,a-z,0-9,+,/的编码方式,因为2的6次方正好为64,所以就用6bit就可以表示出64个字符,eg:000000对应A,000001对应B。 BASE64 的编码原理:都是按字符串长度,以...
  • 首先,file文件转换为base64,得到base64格式图片 var reader = new FileReader(); reader.readAsDataURL(this.files[0]); reader.onload = function(){ console.log(reader.result); //获取到base64格式图片 }; ...
  • 这里要再次感谢一下原创,本人也找到了解决问题的办法,只是没搞明白原因是什么,学习上面的文章才得以明白。 是生产的上线后发现的问题: ...java.lang.IllegalArgumentException: Illegal base64 character d ...
  • VB实现Base64 编解码

    万次阅读 2014-07-28 15:06:25
    Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。以3个字节为一组。按顺序排列24 位数据,再把这24位数据分成4组,即每组6位。再在每组的的最高位前补两个0凑...
  • js base64和图片 相互转换

    万次阅读 2018-03-30 10:10:18
    图片转base64(此转换需借助canvas)&lt;video id="video" src="src" controls="controls" x5-playsinline="" playsinline="" webkit-playsinline preload=&...
  • jquery.base64.js

    千次下载 热门讨论 2014-05-22 14:06:04
    jquery.base64.js
  • Base64Base64URL

    万次阅读 2018-08-25 18:09:44
    转自:...Base64是一种用64个字符来表示任意二进制数据的方法。 用记事本打开exe、jpg、pdf这些文件时,我们都会看到一...
  • Base64 Base32 Base16全家桶

    万次阅读 2015-06-05 23:03:27
    1、base64: 它是用包括大小写字母各26个,加上10个数字,和加号“+”,斜杠“/”,一共64个字符来表示所有的ascii字符。 原理: 3个字符为一组(三组),将字符ascii编码以二进制表示出来(就有24比特),由于2的6次方...
  • 网页上的base64码太长?科普base64到底是啥

    千次阅读 热门讨论 2019-06-13 20:46:00
    书接上回,上次是通过返回base64码给前端页面,实现了我们访问项目外图片的目的。只是代码实在是太长了,不好看啊,得想办法优化下。顺带了解下base64到底是啥,用着好不好,会不会影响速度呢? php上传图片到非...
  • Base16,Base32,Base64编码的介绍

    千次阅读 2018-08-30 10:42:18
    简介 在网络传入字符串过程中,如果编码...为了防止这种情况的出现,出现了Base16,Base32,Base64编码方式.我们知道计算机传输的单位是字节,也就是8个比特位,按照一个字节编码的方式结果就有256种状态(每个比特位0或...

空空如也

1 2 3 4 5 ... 20
收藏数 1,736,160
精华内容 694,464
关键字:

url连接支持base64吗