【JSP/Servlet-HTTP会话解析】


个人学习整理,如有不足之处,请不吝指教。转载请注明:@CSU-Max


Max之前的一篇关于Session 和 Cookie 的文章:cookie和session那些事

会话简介


web服务器跟踪客户状态的几种方式:
   1、在html表单中加入隐藏字段,它包含用于跟踪用户状态的数据;
   2、重写URL,及在URL中附带用户的状态信息;
   3、使用cookie来传递用于跟踪客户状态的数据;
   4、使用会话来跟踪用户状态的数据。

   会话能够把用户与同一用户发出的不同请求之间关联起来。不同用户的会话应当是相互独立的。在web开发领域,会话机制是用于跟踪用户状态的普遍解决方案。会话是指在一段时间内,单个用户与web应用的一系列交互过程。在一个会话过程中,用户可以多次请求该web应用的同一页面,也可以访问该web应用中的其他页面。

   在Servlet中有关于会话的 javax.servlet.http.HttpSession 接口,Servlet容器必须实现这一接口。当一个会话开始时,Servlet容器会创建一个HttpSession对象,将客户信息状态存储在该对象中,如购物车信息。Servlet容器为每个HttpSession对象分配一个唯一的标志符,称为SessionID。

会话的运作流程

   
   1、当一个浏览器进程第一次请求访问某个web应用中任意一个支持会话的网页(也可以设置页面不支持会话,下文有介绍),Servlet容器会试图寻找HTTP请求中表示SessionID的Cookie,由于还不存在这样的Cookie,故此时就会开启一个新的会话,Servlet容器会创建一个HttpSession对象,并为其分配一个唯一的SessionID,在返回HTTP响应结果时,Cookie会附带该SessionID。当浏览器接收到HTTP响应结果之后,会把Cookie(带有SessionID)保存在客户端。
   
   2、该浏览器进程继续访问该web应用中的任意支持会话的页面,在本次的HTTP请求中会包含带有SessionID的Cookie,Servlet容器会获取本次HTTP请求中的SessionID,该SessionID就是1中产生的,因此Servlet容器认为本次请求与上次请求处于同一个会话中,Servlet容器不会创建新的HttpSession对象,而是根据Cookie中的SessionID,找到内存中该SessionID对应的HttpSession对象。

   3、重复步骤2,在当前会话销毁之前(关于会话的销毁下文有介绍),仍是在同一个会话中进行访问,故不会产生新的HttpSession对象。

通过代码实例来了解会话机制


    在默认情况下,JSP页面都会支持会话,也可以通过代码显式控制支持会话:

<%@ page session = "true" %>


   若web组件支持会话,当客户请求访问该web组件时,Servlet容器会自动查找HTTP请求中表示SessionID的Cookie,并向HTTP响应结果中添加表示SessionID的Cookie。在此过程中,若有与SessionID对应的HttpSession对象,则Servlet容器使用该对象,若没有,则Servlet容器会创建一个新的HttpSession对象。
web组件可以访问代表当前会话的HttpSession对象。

   我们可以通过下面的实例代码来了解,新建一个web工程,在根目录下新建一个test.jsp,具体代码如下:
<%@ page language ="java" contentType="text/html; charset=utf-8"
      pageEncoding= "utf-8"%>




 Insert title here</ title>
</head>
<body>
     <%
          Cookie[] cookies = request.getCookies();
           if (cookies == null) {
              out.println( "no cookie");
               return;
          }
           for ( int i = 0; i < cookies.length; i++) {
     %>
     <b >Cookie Name </b>
     <%=cookies[i].getName() %>
     <br >
     <b >Cookie Value </b>
     <%=cookies[i].getValue() %>
     <br >
     <b >Cookie Maxage</ b>
     <%=cookies[i].getMaxAge() %>
     <%
          }
     %>
</body>
</html>
</code></pre> 
  <p></p> 
  <p><span style="font-family:'Courier New';font-size:18px;"><br></span></p> 
  <p></p> 
  <div> 
   <span><span style="font-family:'Courier New';font-size:18px;">   1、打开一个浏览器进程,第一次请求访问test.jsp页面,会返回“no cookie”。</span></span> 
  </div> 
  <span style="font-family:'Courier New';font-size:18px;">      <a href="http://img.e-com-net.com/image/info8/5a72f85336554aebb8d7fcbdf613471e.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/5a72f85336554aebb8d7fcbdf613471e.jpg" alt="" width="352" height="79"></a><br></span> 
  <p></p> 
  <p><span style="font-family:'Courier New';font-size:18px;"><br></span></p> 
  <p></p> 
  <div> 
   <span><span style="font-family:'Courier New';font-size:18px;">   2、利用1打开的浏览器进程,再次访问test.jsp页面(即再按一次回车即可)。由于在1中,Servlet容器会向客户端发送一个包含SessionID的Cookie(上面已经讲到),所以本次的HTTP请求中会包含该Cookie,故test.jsp页面上会显示该Cookie的数据,如下图:</span></span> 
  </div> 
  <p></p> 
  <p><span style="font-family:'Courier New';font-size:18px;">      <a href="http://img.e-com-net.com/image/info8/bf192b2f91be46c4a023f96d96d0a0e2.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/bf192b2f91be46c4a023f96d96d0a0e2.jpg" alt="" width="450" height="99"></a></span></p> 
  <p><span style="font-family:'Courier New';font-size:18px;"><br></span></p> 
  <p></p> 
  <div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">注:此处Cookie的maxage(有效期)属性值为 -1,表示该Cookie仅存在与当前的浏览器进程中,当浏览器关闭,该Cookie也就失效了,本次会话也结束了。</span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;"><br></span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">   3、利用1打开的浏览器进程再多次访问test.jsp页面,页面显示的数据仍如上图所示。</span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">      <a href="http://img.e-com-net.com/image/info8/43b712a98f0946b28d8aa6adbcf2de1b.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/43b712a98f0946b28d8aa6adbcf2de1b.jpg" alt="" width="450" height="99"></a></span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;"><br></span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">   4、重新打来一个浏览器进程,重复步骤1、2、3,会发现页面显示的Cookie Value不一样,即SessionID不一样,因为不同的浏览器进程对应不同的会话,每个会话都拥有一个唯一的SesionID。</span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;"><br></span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">   5、在test.jsp中加入如下代码,使test.jsp不支持会话,再重新打开一个浏览器进程,多次访问test.jsp页面,结果都是显示“no cookie”。因为test.jsp显式要求不支持会话,所以Servlet容器不会创建HttpSession对象,也不会向客户端发送表示SessionID的Cookie。</span> 
   </div> 
  </div> 
  <span style="font-family:'Courier New';font-size:18px;"><br></span> 
  <p></p> 
  <p></p> 
  <div> 
   <h1><span style="font-family:'Courier New';font-size:18px;">HttpSession 的会话范围</span></h1> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">   </span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">   会话的范围指的是浏览器端与一个web应用进行一次会话的过程。在具体实现时,会话范围与HttpSession对象的生命周期相对应,所以web组件只要共享同一个HttpSession对象,就能实现共享会话范围内的共享数据。</span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">在HttpSession接口中关于在会话范围内存取共享数据有如下方法:</span> 
   </div> 
  </div> 
  <span style="font-family:'Courier New';font-size:18px;"></span> 
  <pre><code class="language-java"> /**
      * 向会话范围内存放共享数据
      */
     public void setAttribute(String name, Object value) {

     }

     /**
      * 返回会话范围内与name对应的共享数据
      */
     public Object getAttribute(String name) {
           return null;
     }

     /**
      * 返回会话范围内所有共享数据的name
      */
     public Enumeration getAttributeNames() {
           return null;
     }

     /**
      * 删除会话范围内与name对应的共享数据
      */
     public void removeAttribute(String name) {

     }

</code></pre> 
  <p></p> 
  <p><span style="font-family:'Courier New';font-size:18px;"></span></p> 
  <div> 
   <span style="font-family:'微软雅黑';font-size:14px;">      </span> 
  </div> 
  <div> 
   <span style="font-family:'微软雅黑';font-size:14px;">      </span> 
   <span>利用以上的方法,我们就可以在会话范围内存取共享数据了:</span> 
  </div> 
  <pre><code class="language-java">  HttpSession session = request.getSession();
           //将username 存储到会话范围内的共享数据中
          session.setAttribute( "username", username);

           //从会话范围内读取username
          currentUser = (String) session.getAttribute("username" );
</code></pre> 
  <p></p> 
  <p><span style="font-family:'Courier New';font-size:18px;"><br></span></p> 
  <p></p> 
  <div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">   在HttpSession接口中还有一些其他的访问会话的方法,想了解的可以自行研究。</span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;"><br></span> 
   </div> 
   <h1><span style="font-family:'Courier New';font-size:18px;">HttpSession 的生命周期</span></h1> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;"><br></span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">   在以下情况下,会<strong><span style="color:#660000;">开启一个新的会话</span></strong>,即Servlet容器会创建一个新的HttpSession对象:</span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">   1、一个浏览器进程第一次访问某个web应用中支持会话的任意一个网页。</span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">   2、当浏览器与web应用的上一次会话被销毁后,浏览器进程再次访问web应用中支持会话的任意一个网页。</span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;"><br></span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">注:当浏览器进程与web应用的一次会话被销毁之后,web服务器端相应的HttpSession对象结束其生命周期。当浏览器进程再次访问该web应用时,在它的HTTP请求中的Cookie中包含了之前已被销毁的SessionID,但是此时Servlet容器无法找到次SessionID对应的HttpSession对象,故Servlet容器会创建新的HttpSession对象,开启新的会话。</span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;"><br></span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">   在以下情况下,会<strong><span style="color:#660000;">销毁一个会话</span></strong>,即Servlet容器会使HttpSession对象结束生命周期,并且存储在会话范围内的共享数据也会被销毁:</span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">   1、浏览器进程终止。</span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">   2、服务器端执行了HttpSession对象的invalidate()方法。</span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">   3、会话过期。</span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">   </span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">   会话过期是指在会话开启之后,若在一段规定的时间内,用户没用和web应用进行交互,则Servlet容器会自动的销毁这个会话。HttpSession中的 setMaxInactiveInterval(int interval) 方法用于设置允许会话保持不活动状态的时间(以秒为单位),如果超过这个规定的时间,会话就会被Servlet容器销毁。若把 interval 参数设为负数,则表示会话永远不会过期。在Tomcat中,默认的会话保持不活动状态的时间是1800秒。</span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;"><br></span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">   当一个会话开启后,如果浏览器进程突然关闭,Servlet容器无法立即知道浏览器进程已经关闭,因此Servlet容器中的HttpSession对象不会立即结束生命周期,会话会在浏览器进程关闭之后,进入不活动状态,等到超出上述规定的时间后,会话就会因为过期而被Servlet容器销毁。</span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;"><br></span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;"><strong>为什么要有会话过期的机制呢?</strong></span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">   </span> 
   </div> 
   <div> 
    <span style="font-family:'Courier New';font-size:18px;">   我们知道,过多无用的HttpSession对象会影响web服务器的性能,销毁长期不活动的会话,可以及时释放这些HttpSession对象占用的内存空间。同时,会话过期机制也提高了web应用的安全性,防止未授权的用户访问会话。如某个用户访问某个web应用,之后并没有关闭浏览器进程,此时另一个用户使用该浏览器进程访问同一web应用,此时看到的是前一个用户的信息,这就给安全带来了隐患。</span> 
   </div> 
  </div> 
  <p></p> 
  <p><br></p> 
  <p></p> 
  <p style="line-height:26px;"> <span style="font-family:'Courier New';font-size:14px;"> </span><span style="font-family:'Courier New';font-size:18px;">********************************************************************************<br></span></p> 
  <p style="line-height:26px;"> <span style="font-family:'Courier New';font-size:18px;"> **          转载请注明出处:  @CSU-Max    http://blog.csdn.net/csu_max          **</span><span style="font-family:'Courier New';font-size:18px;">     **********************************************************************</span><span style="font-family:'Courier New';font-size:18px;">**********</span></p> 
  <p><span style="font-family:'Courier New';font-size:18px;"><br></span></p> 
  <p><br></p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1278458811245412352"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(【-Java,Web-】)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1939342670052782080.htm"
                           title="探索高效缓存:CoroutinesCache 开源库深度解析" target="_blank">探索高效缓存:CoroutinesCache 开源库深度解析</a>
                        <span class="text-muted">龙香令Beatrice</span>

                        <div>探索高效缓存:CoroutinesCache开源库深度解析CoroutinesCacheInmobiledevelopmentexistssolutionforcachingwithRxJavausage,butthereisnosolutionsforKotlinCoroutines.Theprojectistoprovidethisfunctionalitytomobilecommunity.</div>
                    </li>
                    <li><a href="/article/1939338884370460672.htm"
                           title="Java IO流" target="_blank">Java IO流</a>
                        <span class="text-muted">码·蚁</span>
<a class="tag" taget="_blank" href="/search/Java%E5%AD%A6%E4%B9%A0/1.htm">Java学习</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/intellij-idea/1.htm">intellij-idea</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>IO流1.什么是IO流IO流是Java对文件进行操作,同时还可以对文件的内容读取和写入,在Java中,这些操作文件的类称之为流1.1IO流的分类—面试题根据流向:输入流:对文件的内容进行读取输出流:对文件的内容进行写入根据单位:字节流:每次读取或者写入一个字节字符流:每次读取或者写入一个字符根据功能:节点流:可以从数据的某个节点向某个节点写入数据,就是普通的输入输出流处理流:对已经存在的流做二次封</div>
                    </li>
                    <li><a href="/article/1939338885729415168.htm"
                           title="计算机基础和Java编程的练习题" target="_blank">计算机基础和Java编程的练习题</a>
                        <span class="text-muted">柳依依@</span>
<a class="tag" taget="_blank" href="/search/Java%E5%85%A5%E9%97%A8/1.htm">Java入门</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>1.计算机的核心硬件是什么?各自有什么用?中央处理器(CPU):负责执行程序中的指令,进行算术和逻辑运算,是计算机的“大脑”。内存(RAM):临时存储CPU正在处理的程序和数据,速度快但断电后数据丢失。硬盘(HDD/SSD):永久存储操作系统、应用程序和用户数据,断电后数据不丢失。主板:连接所有硬件组件,提供数据传输的通道。显卡(GPU):负责图形渲染,将数字信号转换为图像显示在屏幕上。电源:为计</div>
                    </li>
                    <li><a href="/article/1939332832878981120.htm"
                           title="企业级 Java 应用灰度发布设计方案与实践全解析" target="_blank">企业级 Java 应用灰度发布设计方案与实践全解析</a>
                        <span class="text-muted">大手你不懂</span>
<a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/Java%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/1.htm">Java项目实战</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1-%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">微服务-云原生</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1/1.htm">微服务</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/istio/1.htm">istio</a>
                        <div>引言在当今互联网产品快速迭代的背景下,如何在保证服务稳定性的同时,快速验证新功能的有效性,成为了技术团队面临的重要挑战。灰度发布(CanaryRelease)作为一种重要的发布策略,能够将新版本逐步推向部分用户,在控制风险的同时收集真实用户反馈,已成为企业级Java应用的标配能力。本文将深入探讨灰度发布的核心概念、主流设计方案,并结合行业最佳实践给出具体实现建议。一、灰度发布核心概念1.1灰度发布</div>
                    </li>
                    <li><a href="/article/1939332830538559488.htm"
                           title="Spring Cache+Redis缓存方案详解:从代码到实践" target="_blank">Spring Cache+Redis缓存方案详解:从代码到实践</a>
                        <span class="text-muted">大手你不懂</span>
<a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/Java%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/1.htm">Java项目实战</a><a class="tag" taget="_blank" href="/search/Redis/1.htm">Redis</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a>
                        <div>描述:在现代Java开发中,缓存是提升系统性能的核心手段之一。本文通过实际代码案例,深入解析SpringCache与Redis的集成原理,结合项目中的ModuleDatabaseInfoService接口和RedisConfig配置,探讨如何通过声明式缓存实现高效的数据库访问优化。一、核心代码解析1.服务接口设计(拿查询数据源配置信息举例)publicinterfaceModuleDatabase</div>
                    </li>
                    <li><a href="/article/1939330563047485440.htm"
                           title="sentinel 自定义 dashboard 用户名密码" target="_blank">sentinel 自定义 dashboard 用户名密码</a>
                        <span class="text-muted">运维阿峰</span>
<a class="tag" taget="_blank" href="/search/sentinel/1.htm">sentinel</a><a class="tag" taget="_blank" href="/search/sentinel/1.htm">sentinel</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>默认情况下,sentineldashboard用户名密码为sentinel/sentinel,这里我使用重写镜像的方式://定义Dockerfile$catDockerfile#基于现有SentinelDashboard镜像FROMbladex/sentinel-dashboard:1.8.4#重新定义ENTRYPOINT,确保参数顺序正确ENTRYPOINT["java","-Djava.sec</div>
                    </li>
                    <li><a href="/article/1939326905861861376.htm"
                           title="Java实现简易即时通讯系统" target="_blank">Java实现简易即时通讯系统</a>
                        <span class="text-muted">程序员皮皮林</span>
<a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>我们想要实现一个类似QQ的即时通讯程序。由于这是一个复杂的项目,我们将分步骤进行,并只实现核心功能。核心功能包括:1.用户注册与登录2.添加好友3.发送消息(点对点)4.接收消息我们将使用Socket编程来实现。为了简化,我们不使用数据库,而是使用文件存储用户信息和好友关系。我们将创建两个主要部分:服务器和客户端。服务器端:-处理用户注册、登录请求-管理用户连接(在线状态)-转发消息客户端:-提供</div>
                    </li>
                    <li><a href="/article/1939326146785112064.htm"
                           title="深入理解Jackson的@JsonValue注解及其应用实例" target="_blank">深入理解Jackson的@JsonValue注解及其应用实例</a>
                        <span class="text-muted">t0_54manong</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E4%B8%AA%E4%BA%BA%E5%BC%80%E5%8F%91/1.htm">个人开发</a>
                        <div>深入理解Jackson的@JsonValue注解及其应用实例在Java的JSON处理库中,Jackson无疑是最流行的库之一。它提供了强大的数据绑定功能,允许开发者轻松地将Java对象序列化成JSON格式,以及将JSON字符串反序列化成Java对象。在Jackson库中,@JsonValue注解是一个特别有用的特性,它允许开发者自定义对象的序列化值。本文将详细探讨@JsonValue注解的使用,并</div>
                    </li>
                    <li><a href="/article/1939326147363926016.htm"
                           title="Linux应用开发实验班——JSON-RPC" target="_blank">Linux应用开发实验班——JSON-RPC</a>
                        <span class="text-muted">JiaH求学嵌入式</span>
<a class="tag" taget="_blank" href="/search/Linux%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/1.htm">Linux应用开发</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91/1.htm">驱动开发</a>
                        <div>目录前言1.是什么JSON-RPC2.常用的JSON函数1.创建JSON2.根据名字获取JSON3.获取JSON的值4.删除JSON3.如何进行远程调用服务器客户端4.基于JSON-RPC进行硬件操作课程链接前言学习的课程是百问网韦东山老师的课程,对更详细步骤感兴趣的同学,可以去学习视频课程。代码里的led和dht11的驱动都是学习韦老师的课程写的。1.是什么JSON-RPCJSON(JavaSc</div>
                    </li>
                    <li><a href="/article/1939320087840354304.htm"
                           title="JSON简介及其应用" target="_blank">JSON简介及其应用</a>
                        <span class="text-muted">Jackson@ML</span>
<a class="tag" taget="_blank" href="/search/MongoDB/1.htm">MongoDB</a><a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/Node.js/1.htm">Node.js</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/Node.js/1.htm">Node.js</a>
                        <div>JSON简介及其应用ABriefIntroductionandApplicationsofJSONByJackson@ML1.JSON的概念JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,采用键值对(key-value)的方式组织数据,语法类似JavaScript对象,易于人阅读和机器解析。2.JSON的作用JSON有几方面的作用如下:•在前后端数据交互中传</div>
                    </li>
                    <li><a href="/article/1939312390466236416.htm"
                           title="驾驭代码之道:JS/TS SOLID面向对象设计的五大黄金法则" target="_blank">驾驭代码之道:JS/TS SOLID面向对象设计的五大黄金法则</a>
                        <span class="text-muted">领码科技</span>
<a class="tag" taget="_blank" href="/search/%E4%BD%8E%E4%BB%A3%E7%A0%81/1.htm">低代码</a><a class="tag" taget="_blank" href="/search/%E6%8A%80%E8%83%BD%E7%AF%87/1.htm">技能篇</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/SOLID%E5%8E%9F%E5%88%99/1.htm">SOLID原则</a><a class="tag" taget="_blank" href="/search/TypeScript/1.htm">TypeScript</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/1.htm">面向对象</a><a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81%E8%AE%BE%E8%AE%A1/1.htm">代码设计</a><a class="tag" taget="_blank" href="/search/AI%E8%BE%85%E5%8A%A9%E5%BC%80%E5%8F%91/1.htm">AI辅助开发</a>
                        <div>摘要在现代JavaScript和TypeScript开发中,代码质量与可维护性至关重要。SOLID原则作为面向对象设计的经典法则,为构建稳健、灵活的系统架构提供了科学指导。本文不仅系统阐释单一职责、开闭、里氏替换、接口隔离和依赖倒置五大原则的核心精髓,还结合当今流行的AI智能辅助、微前端、低代码开发等新技术与新思维,深入剖析它们在实际JS/TS项目中的应用场景和最佳实践。通俗易懂的理论讲解、丰富的</div>
                    </li>
                    <li><a href="/article/1939311947493208064.htm"
                           title="JavaScript 事件循环竟还能这样玩!" target="_blank">JavaScript 事件循环竟还能这样玩!</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AFjavascript/1.htm">前端javascript</a>
                        <div>JavaScript是一种单线程的编程语言,这意味着它一次只能执行一个任务。为了能够处理异步操作,JavaScript使用了一种称为事件循环(EventLoop)的机制。本文将深入探讨事件循环的工作原理,并展示如何基于这一原理实现一个更为准确的setTimeout、setInterval什么是事件循环?事件循环是JavaScript运行时环境中处理异步操作的核心机制。它允许JavaScript在执</div>
                    </li>
                    <li><a href="/article/1939310878100877312.htm"
                           title="关于 java:7. 多线程与并发编程" target="_blank">关于 java:7. 多线程与并发编程</a>
                        <span class="text-muted">shenyan~</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>一、Thread类作用:Thread类代表一个线程,用于创建和控制一个新的执行流(即“子线程”)。定义:java.lang.Thread类实现了Runnable接口。1.1使用方式方法一:继承Thread类步骤:自定义类继承Thread。重写run()方法。创建线程对象并调用start()方法。示例代码:classMyThreadextendsThread{@Overridepublicvoidr</div>
                    </li>
                    <li><a href="/article/1939304325352321024.htm"
                           title="python读取sas数据集_SASpy模块,利用Python操作SAS" target="_blank">python读取sas数据集_SASpy模块,利用Python操作SAS</a>
                        <span class="text-muted"></span>

                        <div>SASpy模块打通了Python与SAS之间的连接。有了SASpy模块,我们就能够在Python中操控SAS。本文将首先介绍SASpy模块的一些基本方法,最后通过一个聚类分析的例子,来展示如何在Python中调用SAS的机器学习过程,以及对聚类结果的可视化。SASpy模块特点1、需要Python3.X及以上,SAS9.4及以上,需要Java环境;2、无论是本地SAS还是远程服务器上的SAS,都可以</div>
                    </li>
                    <li><a href="/article/1939303063084920832.htm"
                           title="Java核心技术 卷I:基础知识" target="_blank">Java核心技术 卷I:基础知识</a>
                        <span class="text-muted">千灵域</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/1.htm">读书笔记</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>第一章Java程序设计概述太简单了,直接略过。1.2Java“白皮书”的关键术语简单性:指相对于C++简单(指针、多重继承等),但设计者也并没有试图清楚C++中所有不适当的特性面向对象:java与C++主要不同在于多重集成,以及接口概念网络技能健壮性安全性体系结构中立可移植性解释性:过去Java解释器可以在任何移植了解释器的机器上执行java字节码,现在使用即使编译器将字节码再翻译成机器码高性能多</div>
                    </li>
                    <li><a href="/article/1939297769520951296.htm"
                           title="SpringMVC 中的 RESTful 编码风格案例详解" target="_blank">SpringMVC 中的 RESTful 编码风格案例详解</a>
                        <span class="text-muted">dawn191228</span>
<a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/restful/1.htm">restful</a><a class="tag" taget="_blank" href="/search/pandas/1.htm">pandas</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                        <div>文章目录一、RESTful简介二、SpringMVC中实现RESTful的方法三、HiddenHttpMethodFilter四、RESTful代码实现案例在现代Web开发中,RESTful架构风格越来越受到开发者的青睐。SpringMVC作为一个强大的JavaWeb开发框架,对RESTful风格的支持非常出色。本文将详细介绍SpringMVC中RESTful编码风格的简介、实现方法、Hidden</div>
                    </li>
                    <li><a href="/article/1939291089030672384.htm"
                           title="模拟工作队列 - 华为OD机试真题(JavaScript卷)" target="_blank">模拟工作队列 - 华为OD机试真题(JavaScript卷)</a>
                        <span class="text-muted">什码情况</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAod/1.htm">华为od</a>
                        <div>华为OD机试题库《C++》限时优惠9.9华为OD机试题库《Python》限时优惠9.9华为OD机试题库《JavaScript》限时优惠9.9针对刷题难,效率慢,我们提供一对一算法辅导,针对个人情况定制化的提高计划(全称1V1效率更高)。看不懂有疑问需要答疑辅导欢迎私VX:code5bug题目描述让我们来模拟一个工作队列的运作,有一个任务提交者和若干任务执行者,执行者从1开始编号。提交者会在给定的时</div>
                    </li>
                    <li><a href="/article/1939291087747215360.htm"
                           title="数据分类 - 华为OD机试真题(JavaScript 题解)" target="_blank">数据分类 - 华为OD机试真题(JavaScript 题解)</a>
                        <span class="text-muted">什码情况</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAod/1.htm">华为od</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E8%AF%95/1.htm">机试</a>
                        <div>华为OD机试题库《C++》限时优惠9.9华为OD机试题库《Python》限时优惠9.9华为OD机试题库《JavaScript》限时优惠9.9针对刷题难,效率慢,我们提供一对一算法辅导,针对个人情况定制化的提高计划(全称1V1效率更高)。看不懂有疑问需要答疑辅导欢迎私VX:code5bug题目描述对一个数据a进行分类,分类方法为:此数据a(四个字节大小)的四个字节相加对一个给定的值b取模,如果得到的</div>
                    </li>
                    <li><a href="/article/1939288191689355264.htm"
                           title="Java设计模式之抽象工厂模式(Abstract Factory)笔记" target="_blank">Java设计模式之抽象工厂模式(Abstract Factory)笔记</a>
                        <span class="text-muted">ikwil</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E4%B8%93%E6%A0%8F/1.htm">设计模式专栏</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/%E6%8A%BD%E8%B1%A1%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F/1.htm">抽象工厂模式</a>
                        <div>目录什么叫做抽象工厂模式抽象工厂模式作用抽象工厂模式特征对比抽象工厂和工厂方法抽象工厂模应用场景抽象工厂模式的实现定义抽象工厂接口实现具体产品类定义抽象工厂接口实现具体工厂类进行测试总结参考文献什么叫做抽象工厂模式抽象工厂模式(AbstractFactoryPattern)是一种创建型设计模式,用于提供一个接口,使得客户端能够创建一系列相关或依赖的对象,而无需指定它们的具体类。这个模式有助于确保一</div>
                    </li>
                    <li><a href="/article/1939286550974099456.htm"
                           title="Spring框架中的过滤器、拦截器与Spring Security:深入比较与应用实践" target="_blank">Spring框架中的过滤器、拦截器与Spring Security:深入比较与应用实践</a>
                        <span class="text-muted">暮乘白帝过重山</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E4%BB%93%E5%BA%93/1.htm">数据仓库</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E6%8B%A6%E6%88%AA%E5%99%A8/1.htm">拦截器</a><a class="tag" taget="_blank" href="/search/%E8%BF%87%E6%BB%A4%E5%99%A8/1.htm">过滤器</a><a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</a><a class="tag" taget="_blank" href="/search/Security/1.htm">Security</a>
                        <div>一、引言在现代Java企业级应用开发中,Spring框架已经成为事实上的标准。随着应用安全性和复杂性的不断提高,开发者需要掌握多种请求处理和安全控制机制。本文将深入探讨Spring框架中的过滤器(Filter)、拦截器(Interceptor)和SpringSecurity这三种关键技术,分析它们的异同点、适用场景以及当前企业开发中的流行趋势。二、Spring框架概述Spring框架是一个轻量级的</div>
                    </li>
                    <li><a href="/article/1939285669088129024.htm"
                           title="SpringAI系列 - MCP篇(二) - MCP Server Boot Starter" target="_blank">SpringAI系列 - MCP篇(二) - MCP Server Boot Starter</a>
                        <span class="text-muted">罗小爬EX</span>
<a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/SpringAI/1.htm">SpringAI</a><a class="tag" taget="_blank" href="/search/MCP/1.htm">MCP</a>
                        <div>目录一、MCPJavaSDKMCPClientMCPServer二、SpringAIMcp集成三、SpringAIMCPBootStater四、spring-ai-starter-mcp-server-webmvc集成示例4.1集成Tools4.2集成Resources4.3集成Prompts4.4监听MCPClient端Roots变更通知五、通过SSE连接MCPServer六、通过STDIO连接</div>
                    </li>
                    <li><a href="/article/1939276846008954880.htm"
                           title="Java Web二手物品交易平台课程设计项目" target="_blank">Java Web二手物品交易平台课程设计项目</a>
                        <span class="text-muted">草莓味儿柠檬</span>

                        <div>本文还有配套的精品资源,点击获取简介:盐鱼二手物品交易网站是一个基于Servlet和JSP的JavaWeb开发课程设计项目,适合Java初学者进行实战演练。项目内容包括Servlet与JSP的基础知识、MVC架构、数据库交互、会话管理、安全与性能优化、部署与运行,以及测试与调试等各个方面。学生通过此项目可以全面理解JavaWeb开发技术,并提升实战能力。1.Servlet生命周期与HTTP请求处理</div>
                    </li>
                    <li><a href="/article/1939270291054194688.htm"
                           title="JSP学习" target="_blank">JSP学习</a>
                        <span class="text-muted">sakoba</span>
<a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>文章目录什么是JSP运行原理JSP基础语法JSP表达式JSP脚本片段JSP声明jsp指令九大内置对象&四大域对象内置对象四大域对象代码JSP标签、JSTL标签、EL表达式EL表达式JSP标签JSTL标签什么是JSPJSP(JavaServerPages)是由SUN公司在1996年6月发布的一种基于Java技术的服务器端编程技术,用于开发动态Web应用。从本质上讲,它是一个简化的Servlet设计。</div>
                    </li>
                    <li><a href="/article/1939267387769548800.htm"
                           title="从阻塞到异步:Java NIO与AIO的高性能网络编程实战全解析" target="_blank">从阻塞到异步:Java NIO与AIO的高性能网络编程实战全解析</a>
                        <span class="text-muted">小张在编程</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/nio/1.htm">nio</a>
                        <div>引言在高并发网络时代,传统BIO的“一个连接一个线程”模式早已力不从心——当万级连接涌来时,服务器线程池瞬间告急,资源耗尽的警报此起彼伏。JavaNIO与AIO的出现,如同为网络编程装上了“多线程调度器”和“异步引擎”:NIO用非阻塞机制化解并发瓶颈,让单线程管理千个连接成为可能;AIO则更进一步,通过事件回调实现真正异步,让程序在I/O等待时不再“干瞪眼”。本文将从原理到实战,带您揭开这两大高级</div>
                    </li>
                    <li><a href="/article/1939265370242215936.htm"
                           title="Java爬虫实战指南:按关键字搜索京东商品" target="_blank">Java爬虫实战指南:按关键字搜索京东商品</a>
                        <span class="text-muted">爬虫程序猿</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>在电商领域,快速获取商品信息对于市场分析、选品上架、库存管理和价格策略制定等方面至关重要。京东作为国内领先的电商平台之一,提供了丰富的商品数据。虽然京东开放平台提供了官方API来获取商品信息,但有时使用爬虫技术来抓取数据也是一种有效的手段。本文将介绍如何利用Java按关键字搜索京东商品,并提供详细的代码示例。一、准备工作(一)Java开发环境确保你的Java开发环境已经安装了以下必要的库:Jsou</div>
                    </li>
                    <li><a href="/article/1939262092766932992.htm"
                           title="Java 企业级 Jakarta EE 11 发布" target="_blank">Java 企业级 Jakarta EE 11 发布</a>
                        <span class="text-muted">ejinxian</span>
<a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/Jakarta/1.htm">Jakarta</a><a class="tag" taget="_blank" href="/search/EE/1.htm">EE</a><a class="tag" taget="_blank" href="/search/11/1.htm">11</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/EE/1.htm">EE</a><a class="tag" taget="_blank" href="/search/11/1.htm">11</a>
                        <div>标志着企业级Java在简化开发、提升开发人员生产力和整体性能方面的进步。主要亮点包括:现代化的测试兼容性工具包(TCK)、全新JakartaData规范的引入、对现有规范的重大更新以及对最新JavaLTS版本的支持,使开发人员能够充分利用Java21中的增强功能,包括虚拟线程JakartaData在简化企业应用程序持久化逻辑方面迈出了重要一步。主要功能包括:BasicRepository:基础存储</div>
                    </li>
                    <li><a href="/article/1939250241110863872.htm"
                           title="React - 错误边界(Error boundary)" target="_blank">React - 错误边界(Error boundary)</a>
                        <span class="text-muted">风轻轻~</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/React__%E5%9F%BA%E7%A1%80/1.htm">React__基础</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a>
                        <div>React-错误边界(Errorboundary)一.理解二.使用1.使用方式2.使用案例错误边界:https://zh-hans.reactjs.org/docs/error-boundaries.html一.理解部分UI的JavaScript错误不应该导致整个应用崩溃,为了解决这个问题,React16引入了一个新的概念——错误边界。错误边界是一种React组件,这种组件可以捕获发生在其子组件树</div>
                    </li>
                    <li><a href="/article/1939244437330784256.htm"
                           title="PYTHON从入门到实践9-类和实例" target="_blank">PYTHON从入门到实践9-类和实例</a>
                        <span class="text-muted"></span>

                        <div>#【1】面向对象编程classStudent(object):#可以帮属性值绑定到对象上,self相当于JAVA的thisdef__init__(self,name,age):self.name=nameself.age=agedefspeak(self):print(self.name,'说:老师好')if__name__=='__main__':new_student1=Student('球球</div>
                    </li>
                    <li><a href="/article/1939244311145148416.htm"
                           title="E IO流.java" target="_blank">E IO流.java</a>
                        <span class="text-muted">是紫焅呢</span>
<a class="tag" taget="_blank" href="/search/26%E5%AD%97%E6%AF%8D%E5%AD%A6%E4%B9%A0%EF%BC%9Ajava%E5%85%A5%E9%97%A8%E7%AF%87/1.htm">26字母学习:java入门篇</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%96%B9%E6%B3%95/1.htm">学习方法</a><a class="tag" taget="_blank" href="/search/visual/1.htm">visual</a><a class="tag" taget="_blank" href="/search/studio/1.htm">studio</a><a class="tag" taget="_blank" href="/search/code/1.htm">code</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>前言:I/O(输入/输出)操作是构建各类应用程序的基石之一。Java提供了功能强大且灵活的I/O流机制,用于处理数据的读取与写入,无论是简单的文本文件操作,还是复杂的网络数据传输,都离不开I/O流的支持。目录一、初识JavaI/O流数据的“传送带”二、字节流操作从读取到写入的实战1.读取文件(字节流)2.写入文件(字节流)三、字符流操作读写文本文件的简便之道1.读取文件(字符流)2.写入文件(字符</div>
                    </li>
                    <li><a href="/article/1939238638692921344.htm"
                           title="并发基础7(守护线程)" target="_blank">并发基础7(守护线程)</a>
                        <span class="text-muted">浅水壁虎</span>
<a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>目录1:什么守护线程2:守护线程使用3:守护线程案例1:什么守护线程守护线程是Java中的一种特殊的线程类型,它为其他线程(非守护线程)提供后台支持服务。在Java多线程编程中,有两种特殊类型的线程:后台线程和守护线程。这两种线程在一些特定的场景下非常有用,但也需要谨慎使用。本文将详细介绍后台线程和守护线程的概念、特性、用法,以及注意事项。守护线程的特点服务性质:守护线程通常用于执行后台任务,如J</div>
                    </li>
                                <li><a href="/article/98.htm"
                                       title="微信开发者验证接口开发" target="_blank">微信开发者验证接口开发</a>
                                    <span class="text-muted">362217990</span>
<a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1+%E5%BC%80%E5%8F%91%E8%80%85+token+%E9%AA%8C%E8%AF%81/1.htm">微信 开发者 token 验证</a>
                                    <div>微信开发者接口验证。 
Token,自己随便定义,与微信填写一致就可以了。 
 
根据微信接入指南描述 http://mp.weixin.qq.com/wiki/17/2d4265491f12608cd170a95559800f2d.html 
 第一步:填写服务器配置 
 第二步:验证服务器地址的有效性 
 第三步:依据接口文档实现业务逻辑 
 
这里主要讲第二步验证服务器有效性。 
 
建一个</div>
                                </li>
                                <li><a href="/article/225.htm"
                                       title="一个小编程题-类似约瑟夫环问题" target="_blank">一个小编程题-类似约瑟夫环问题</a>
                                    <span class="text-muted">BrokenDreams</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a>
                                    <div>        今天群友出了一题: 
        一个数列,把第一个元素删除,然后把第二个元素放到数列的最后,依次操作下去,直到把数列中所有的数都删除,要求依次打印出这个过程中删除的数。 
 
     &</div>
                                </li>
                                <li><a href="/article/352.htm"
                                       title="linux复习笔记之bash shell (5) 关于减号-的作用" target="_blank">linux复习笔记之bash shell (5) 关于减号-的作用</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/linux%E5%85%B3%E4%BA%8E%E5%87%8F%E5%8F%B7%E2%80%9C-%E2%80%9D%E7%9A%84%E5%90%AB%E4%B9%89/1.htm">linux关于减号“-”的含义</a><a class="tag" taget="_blank" href="/search/linux%E5%85%B3%E4%BA%8E%E5%87%8F%E5%8F%B7%E2%80%9C-%E2%80%9D%E7%9A%84%E7%94%A8%E9%80%94/1.htm">linux关于减号“-”的用途</a><a class="tag" taget="_blank" href="/search/linux%E5%85%B3%E4%BA%8E%E2%80%9C-%E2%80%9D%E7%9A%84%E5%90%AB%E4%B9%89/1.htm">linux关于“-”的含义</a><a class="tag" taget="_blank" href="/search/linux%E5%85%B3%E4%BA%8E%E5%87%8F%E5%8F%B7%E7%9A%84%E5%90%AB%E4%B9%89/1.htm">linux关于减号的含义</a>
                                    <div>    转载请出自出处:
http://eksliang.iteye.com/blog/2105677     
    管道命令在bash的连续处理程序中是相当重要的,尤其在使用到前一个命令的studout(标准输出)作为这次的stdin(标准输入)时,就显得太重要了,某些命令需要用到文件名,例如上篇文档的的切割命令(split)、还有</div>
                                </li>
                                <li><a href="/article/479.htm"
                                       title="Unix(3)" target="_blank">Unix(3)</a>
                                    <span class="text-muted">18289753290</span>
<a class="tag" taget="_blank" href="/search/unix+ksh/1.htm">unix ksh</a>
                                    <div>1)若该变量需要在其他子进程执行,则可用"$变量名称"或${变量}累加内容 
什么是子进程?在我目前这个shell情况下,去打开一个新的shell,新的那个shell就是子进程。一般状态下,父进程的自定义变量是无法在子进程内使用的,但通过export将变量变成环境变量后就能够在子进程里面应用了。 
2)条件判断: &&代表and  ||代表or&nbs</div>
                                </li>
                                <li><a href="/article/606.htm"
                                       title="关于ListView中性能优化中图片加载问题" target="_blank">关于ListView中性能优化中图片加载问题</a>
                                    <span class="text-muted">酷的飞上天空</span>
<a class="tag" taget="_blank" href="/search/ListView/1.htm">ListView</a>
                                    <div>ListView的性能优化网上很多信息,但是涉及到异步加载图片问题就会出现问题。 
具体参看上篇文章http://314858770.iteye.com/admin/blogs/1217594 
  
如果每次都重新inflate一个新的View出来肯定会造成性能损失严重,可能会出现listview滚动是很卡的情况,还会出现内存溢出。 
现在想出一个方法就是每次都添加一个标识,然后设置图</div>
                                </li>
                                <li><a href="/article/733.htm"
                                       title="德国总理默多克:给国人的一堂“震撼教育”课" target="_blank">德国总理默多克:给国人的一堂“震撼教育”课</a>
                                    <span class="text-muted">永夜-极光</span>
<a class="tag" taget="_blank" href="/search/%E6%95%99%E8%82%B2/1.htm">教育</a>
                                    <div>http://bbs.voc.com.cn/topic-2443617-1-1.html德国总理默多克:给国人的一堂“震撼教育”课  
安吉拉—默克尔,一位经历过社会主义的东德人,她利用自己的博客,发表一番来华前的谈话,该说的话,都在上面说了,全世界想看想传播——去看看默克尔总理的博客吧! 
  德国总理默克尔以她的低调、朴素、谦和、平易近人等品格给国人留下了深刻印象。她以实际行动为中国人上了一堂</div>
                                </li>
                                <li><a href="/article/860.htm"
                                       title="关于Java继承的一个小问题。。。" target="_blank">关于Java继承的一个小问题。。。</a>
                                    <span class="text-muted">随便小屋</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>今天看Java 编程思想的时候遇见一个问题,运行的结果和自己想想的完全不一样。先把代码贴出来! 
//CanFight接口
interface Canfight {
    void fight();
}
//ActionCharacter类
class ActionCharacter {
    public void fight() {
        System.out.pr</div>
                                </li>
                                <li><a href="/article/987.htm"
                                       title="23种基本的设计模式" target="_blank">23种基本的设计模式</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a>
                                    <div>Abstract Factory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。    Adapter:将一个类的接口转换成客户希望的另外一个接口。A d a p t e r模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。    Bridge:将抽象部分与它的实现部分分离,使它们都可以独立地变化。    Builder:将一个复杂对象的构建与它的表示分离,使得同</div>
                                </li>
                                <li><a href="/article/1114.htm"
                                       title="《周鸿祎自述:我的互联网方法论》读书笔记" target="_blank">《周鸿祎自述:我的互联网方法论》读书笔记</a>
                                    <span class="text-muted">aoyouzi</span>
<a class="tag" taget="_blank" href="/search/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/1.htm">读书笔记</a>
                                    <div>从用户的角度来看,能解决问题的产品才是好产品,能方便/快速地解决问题的产品,就是一流产品. 
  
商业模式不是赚钱模式 
一款产品免费获得海量用户后,它的边际成本趋于0,然后再通过广告或者增值服务的方式赚钱,实际上就是创造了新的价值链. 
  
商业模式的基础是用户,木有用户,任何商业模式都是浮云.商业模式的核心是产品,本质是通过产品为用户创造价值. 
商业模式还包括寻找需求</div>
                                </li>
                                <li><a href="/article/1241.htm"
                                       title="JavaScript动态改变样式访问技术" target="_blank">JavaScript动态改变样式访问技术</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/style%E5%B1%9E%E6%80%A7/1.htm">style属性</a><a class="tag" taget="_blank" href="/search/ClassName%E5%B1%9E%E6%80%A7/1.htm">ClassName属性</a>
                                    <div>  
一:style属性 
格式:  
 HTML元素.style.样式属性="值"; 
  
创建菜单:在html标签中创建 或者 在head标签中用数组创建 
  
<html>
<head>
  <title>style改变样式</title>
</head>
&l</div>
                                </li>
                                <li><a href="/article/1368.htm"
                                       title="jQuery的deferred对象详解" target="_blank">jQuery的deferred对象详解</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/deferred%E5%AF%B9%E8%B1%A1/1.htm">deferred对象</a>
                                    <div>        jQuery的开发速度很快,几乎每半年一个大版本,每两个月一个小版本。 
        每个版本都会引入一些新功能,从jQuery 1.5.0版本开始引入的一个新功能----deferred对象。 
   &nb</div>
                                </li>
                                <li><a href="/article/1495.htm"
                                       title="淘宝开放平台TOP" target="_blank">淘宝开放平台TOP</a>
                                    <span class="text-muted">Bill_chen</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/%E7%89%A9%E6%B5%81/1.htm">物流</a><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a>
                                    <div>淘宝网开放平台首页:http://open.taobao.com/ 
淘宝开放平台是淘宝TOP团队的产品,TOP即TaoBao Open Platform, 
是淘宝合作伙伴开发、发布、交易其服务的平台。 
支撑TOP的三条主线为: 
   1.开放数据和业务流程 
 
    * 以API数据形式开放商品、交易、物流等业务; 
 
 &</div>
                                </li>
                                <li><a href="/article/1622.htm"
                                       title="【大型网站架构一】大型网站架构概述" target="_blank">【大型网站架构一】大型网站架构概述</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%AB%99%E6%9E%B6%E6%9E%84/1.htm">网站架构</a>
                                    <div>大型互联网特点 
 
 面对海量用户、海量数据 
 大型互联网架构的关键指标 
 
 高并发 
 高性能 
 高可用 
 高可扩展性 
 线性伸缩性 
 安全性 
 大型互联网技术要点 
  
 
 前端优化 
 CDN缓存 
 反向代理 
 KV缓存 
 消息系统 
 分布式存储 
 NoSQL数据库 
 搜索 
 监控 
 安全 
 想到的问题: 
1.对于订单系统这种事务型系统,如</div>
                                </li>
                                <li><a href="/article/1749.htm"
                                       title="eclipse插件hibernate tools安装" target="_blank">eclipse插件hibernate tools安装</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a>
                                    <div>  
 
 eclipse helios(3.6)版 
  1.启动eclipse   2.选择 Help > Install New Software...>   3.添加如下地址: 
http://download.jboss.org/jbosstools/updates/stable/helios/   4.选择性安装:hibernate tools在All Jboss tool</div>
                                </li>
                                <li><a href="/article/1876.htm"
                                       title="Jquery easyui Form表单提交注意事项" target="_blank">Jquery easyui Form表单提交注意事项</a>
                                    <span class="text-muted">bozch</span>
<a class="tag" taget="_blank" href="/search/jquery+easyui/1.htm">jquery easyui</a>
                                    <div>jquery easyui对表单的提交进行了封装,提交的方式采用的是ajax的方式,在开发的时候应该注意的事项如下: 
        1、在定义form标签的时候,要将method属性设置成post或者get,特别是进行大字段的文本信息提交的时候,要将method设置成post方式提交,否则页面会抛出跨域访问等异常。所以这个要</div>
                                </li>
                                <li><a href="/article/2003.htm"
                                       title="Trie tree(字典树)的Java实现及其应用-统计以某字符串为前缀的单词的数量" target="_blank">Trie tree(字典树)的Java实现及其应用-统计以某字符串为前缀的单词的数量</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java%E5%AE%9E%E7%8E%B0/1.htm">java实现</a>
                                    <div>
import java.util.LinkedList;

public class CaseInsensitiveTrie {

	/**
	字典树的Java实现。实现了插入、查询以及深度优先遍历。 
    Trie tree's java implementation.(Insert,Search,DFS)
    
	Problem Description
	Igna</div>
                                </li>
                                <li><a href="/article/2130.htm"
                                       title="html css 鼠标形状样式汇总" target="_blank">html css 鼠标形状样式汇总</a>
                                    <span class="text-muted">chenbowen00</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a>
                                    <div>css鼠标手型cursor中hand与pointer  
Example:CSS鼠标手型效果 <a href="#" style="cursor:hand">CSS鼠标手型效果</a><br/>  
Example:CSS鼠标手型效果 <a href="#" style=&qu</div>
                                </li>
                                <li><a href="/article/2257.htm"
                                       title="[IT与投资]IT投资的几个原则" target="_blank">[IT与投资]IT投资的几个原则</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/it/1.htm">it</a>
                                    <div> 
      无论是想在电商,软件,硬件还是互联网领域投资,都需要大量资金,虽然各个国家政府在媒体上都给予大家承诺,既要让市场的流动性宽松,又要保持经济的高速增长....但是,事实上,整个市场和社会对于真正的资金投入是非常渴望的,也就是说,表面上看起来,市场很活跃,但是投入的资金并不是很充足的...... 
 
   </div>
                                </li>
                                <li><a href="/article/2384.htm"
                                       title="oracle with语句详解" target="_blank">oracle with语句详解</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/with/1.htm">with</a><a class="tag" taget="_blank" href="/search/with+as/1.htm">with as</a>
                                    <div>oracle with语句详解 转 
 
 
在oracle中,select 查询语句,可以使用with,就是一个子查询,oracle 会把子查询的结果放到临时表中,可以反复使用 
 
例子:注意,这是sql语句,不是pl/sql语句, 可以直接放到jdbc执行的 
 
----------------------------------------------------------------</div>
                                </li>
                                <li><a href="/article/2511.htm"
                                       title="hbase的简单操作" target="_blank">hbase的简单操作</a>
                                    <span class="text-muted">deng520159</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/hbase/1.htm">hbase</a>
                                    <div>近期公司用hbase来存储日志,然后再来分析 ,把hbase开发经常要用的命令找了出来. 
用ssh登陆安装hbase那台linux后 
用hbase shell进行hbase命令控制台! 
表的管理 
1)查看有哪些表 
hbase(main)> list 
2)创建表 
  
# 语法:create <table>, {NAME => <family&g</div>
                                </li>
                                <li><a href="/article/2638.htm"
                                       title="C语言scanf继续学习、算术运算符学习和逻辑运算符" target="_blank">C语言scanf继续学习、算术运算符学习和逻辑运算符</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/c/1.htm">c</a>
                                    <div>/*
	2013年3月11日20:37:32
	地点:北京潘家园
	功能:完成用户格式化输入多个值
	目的:学习scanf函数的使用

*/
# include <stdio.h>

int main(void)
{
	int i, j, k;

	printf("please input three number:\n");  //提示用</div>
                                </li>
                                <li><a href="/article/2765.htm"
                                       title="2015越来越好" target="_blank">2015越来越好</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/%E6%AD%8C%E6%9B%B2/1.htm">歌曲</a>
                                    <div>越来越好

房子大了电话小了 感觉越来越好
假期多了收入高了 工作越来越好
商品精了价格活了 心情越来越好
天更蓝了水更清了 环境越来越好

活得有奔头人会步步高
想做到你要努力去做到

幸福的笑容天天挂眉梢 越来越好
婆媳和了家庭暖了 生活越来越好
孩子高了懂事多了 学习越来越好
朋友多了心相通了 大家越来越好
道路宽了心气顺了 日子越来越好

活的有精神人就不显</div>
                                </li>
                                <li><a href="/article/2892.htm"
                                       title="java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Tim" target="_blank">java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Tim</a>
                                    <span class="text-muted">feiteyizu</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                    <div>数据表中有记录的time字段(属性为timestamp)其值为:“0000-00-00 00:00:00” 
程序使用select 语句从中取数据时出现以下异常: 
java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date 
  
java.sql.SQLException: Valu</div>
                                </li>
                                <li><a href="/article/3019.htm"
                                       title="Ehcache(07)——Ehcache对并发的支持" target="_blank">Ehcache(07)——Ehcache对并发的支持</a>
                                    <span class="text-muted">234390216</span>
<a class="tag" taget="_blank" href="/search/%E5%B9%B6%E5%8F%91/1.htm">并发</a><a class="tag" taget="_blank" href="/search/ehcache/1.htm">ehcache</a><a class="tag" taget="_blank" href="/search/%E9%94%81/1.htm">锁</a><a class="tag" taget="_blank" href="/search/ReadLock/1.htm">ReadLock</a><a class="tag" taget="_blank" href="/search/WriteLock/1.htm">WriteLock</a>
                                    <div>Ehcache对并发的支持 
  
       在高并发的情况下,使用Ehcache缓存时,由于并发的读与写,我们读的数据有可能是错误的,我们写的数据也有可能意外的被覆盖。所幸的是Ehcache为我们提供了针对于缓存元素Key的Read(读)、Write(写)锁。当一个线程获取了某一Key的Read锁之后,其它线程获取针对于同</div>
                                </li>
                                <li><a href="/article/3146.htm"
                                       title="mysql中blob,text字段的合成索引" target="_blank">mysql中blob,text字段的合成索引</a>
                                    <span class="text-muted">jackyrong</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                    <div>  在mysql中,原来有一个叫合成索引的,可以提高blob,text字段的效率性能, 
但只能用在精确查询,核心是增加一个列,然后可以用md5进行散列,用散列值查找 
则速度快 
 
比如: 
 
create table abc(id varchar(10),context blog,hash_value varchar(40)); 
 
 insert into abc(1,rep</div>
                                </li>
                                <li><a href="/article/3273.htm"
                                       title="逻辑运算与移位运算" target="_blank">逻辑运算与移位运算</a>
                                    <span class="text-muted">latty</span>
<a class="tag" taget="_blank" href="/search/%E4%BD%8D%E8%BF%90%E7%AE%97/1.htm">位运算</a><a class="tag" taget="_blank" href="/search/%E9%80%BB%E8%BE%91%E8%BF%90%E7%AE%97/1.htm">逻辑运算</a>
                                    <div>源码:正数的补码与原码相同例+7 源码:00000111 补码 :00000111  (用8位二进制表示一个数)
 
 
 
负数的补码:
   符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。   -7 源码: 10000111 ,其绝对值为00000111  取反加一:11111001 为-7补码 
 
已知一个数的补码,求原码的操作分两种情况:</div>
                                </li>
                                <li><a href="/article/3400.htm"
                                       title="利用XSD 验证XML文件" target="_blank">利用XSD 验证XML文件</a>
                                    <span class="text-muted">newerdragon</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/xsd/1.htm">xsd</a>
                                    <div>XSD文件 (XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。 具体使用方法和定义请参看: 
 
http://www.w3school.com.cn/schema/index.asp 
 
 
 
java自jdk1.5以上新增了SchemaFactory类 可以实现对XSD验证的支持,使用起来也很方便。 
 
以下代码可用在J</div>
                                </li>
                                <li><a href="/article/3527.htm"
                                       title="搭建 CentOS 6 服务器(12) - Samba" target="_blank">搭建 CentOS 6 服务器(12) - Samba</a>
                                    <span class="text-muted">rensanning</span>
<a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a>
                                    <div>(1)安装 
 
# yum -y install samba
    Installed:
      samba.i686 0:3.6.9-169.el6_5
# pdbedit -a rensn
    new password:123456
    retype new password:123456
    …… 
 
 
(2)Home文件夹 
 
# mkdir /etc</div>
                                </li>
                                <li><a href="/article/3654.htm"
                                       title="Learn Nodejs 01" target="_blank">Learn Nodejs 01</a>
                                    <span class="text-muted">toknowme</span>
<a class="tag" taget="_blank" href="/search/nodejs/1.htm">nodejs</a>
                                    <div>(1)下载nodejs  
https://nodejs.org/download/   选择相应的版本进行下载           (2)安装nodejs   安装的方式比较多,请baidu下  
我这边下载的是“node-v0.12.7-linux-x64.tar.gz”这个版本  (1)上传服务器   (2)解压   tar -zxvf  node-v0.12.</div>
                                </li>
                                <li><a href="/article/3781.htm"
                                       title="jquery控制自动刷新的代码举例" target="_blank">jquery控制自动刷新的代码举例</a>
                                    <span class="text-muted">xp9802</span>
<a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a>
                                    <div>1、html内容部分   复制代码代码示例:   <div id='log_reload'> 
<select name="id_s" size="1"> 
<option value='2'>-2s-</option> 
<option value='3'>-3s-</option</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>