AJAX异步请求解决跨域问题的三种方式

一 什么是跨域

出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)

例如: 

  • 本地路径地址:http://127.0.0.1:8080/msb/index.jsp
  • https://127.0.0.1:8080/msb/index.jsp 协议不一样
  • http://192.168.24.11:8080/msb/index.jsp IP不一致
  • http://127.0.0.1:8888/msb/index.jsp 端口不一致
  • http://localhost:8080/msb/index.jsp IP不一致

二 解决AJAX跨域请求的三种方式

方式一  jsonp跨域处理

代码演示如下:

前端页面



    $Title%sSourceCode%lt;/title>
    <meta charset="UTF-8"/>
    <script src="js/jquery.min.js"></script>
    <script>
        function checkUname(){
            // 获取输入框中的内容
            if(null == $("#unameI").val() || '' == $("#unameI").val()){
                $("#unameInfo").text("用户名不能为空");
                return;
            }
            $("#unameInfo").text("");
            // 通过jQuery.ajax() 发送异步请求
            $.ajax(
                    {
                        type:"GET",// 请求的方式 GET  POST
                        url:"http://localhost:8080/ajaxDemo3_war_exploded/unameCheckServlet.do?", // 请求的后台服务的路径
                        data:"uname="+$("#unameI").val(),// 提交的参数
                        success:function(info){ // 响应成功执行的函数
                            $("#unameInfo").text(info)
                        }
                    }
            )
        }
    </script>
</head>
<body>
<form action="myServlet1.do" >
    用户名:<input id="unameI" type="text" name="uname" onblur="checkUname()">
    <span id="unameInfo" style="color: red"></span><br/>
    密码:<input type="password" name="pwd"><br/>
    <input type="submit" value="提交按钮">
</form>
</body>
</html>
</code></pre> 
  <blockquote> 
   <p>浏览器请求该资源的地址是:<br> http://127.0.0.1:8020/testa/index.html <br> 但是其内部ajax请求的资源是http://localhost:8080/ajaxDemo3_war_exploded/unameCheckServlet.do?<br> 二者端口号和IP其实是不一致的,这就受到同源策略的控制</p> 
  </blockquote> 
  <p><img alt="" height="28" src="http://img.e-com-net.com/image/info8/223ab433ccf8400dada3b94ea8fa21aa.jpg" width="650"> </p> 
  <p><strong>实现的原理是什么?</strong></p> 
  <blockquote> 
   <p>我们发现Web页面上调用js文件时则不受是否跨域的影响,拥有”src”这个属性的标签都却拥有跨域的能力,比如<\script>、<\img>、<\iframe>。那么跨域访问数据就有了一种可能,那就是在远程服务器上设法把数据装进js格式的文件里,供客户端调用和进一步处理。就好比使用一个<script>,让其src属性指向我们要访问的跨域资源,然后以接收js文件的形式接收数据</p> 
  </blockquote> 
  <p><strong>通过:dataType:'jsonp'属性实现跨域请求</strong></p> 
  <blockquote> 
   <p>通过 jsonp:’callback’,实现自动处理回调函数名,相当于在url地址栏最后后拼接一个callback=函数名,后台自动根据这个函数名处理JS脚本,jQuery也会根据这函数名自动在前端处理回调函数,这样我们直接在success方法中接收返回的数据即可,可以不用自己去自己定义回调函数.后台获取参数时,参数名要要和jsonp:后面的函数名保持一致</p> 
  </blockquote> 
  <p>页面代码</p> 
  <pre><code class="language-html"><html>
<head>
    <title>$Title%sSourceCode%lt;/title>
    <meta charset="UTF-8"/>
    <script src="http://localhost:8080/ajaxDemo3_war_exploded/js/jquery.min.js"></script>
    <script>
    	
    	
        function checkUname(){
            // 获取输入框中的内容
            if(null == $("#unameI").val() || '' == $("#unameI").val()){
                $("#unameInfo").text("用户名不能为空");
                return;
            }
            $("#unameInfo").text("");
            // 通过jQuery.ajax() 发送异步请求
            $.ajax(
                {
                    type:"GET",// 请求的方式 GET  POST
                    url:"http://localhost:8080/ajaxDemo3_war_exploded/unameCheckServlet.do?", // 请求的后台服务的路径
                    data:{uname:$("#unameI").val()},// 提交的参数
                    dataType:"jsonp",
                    jsonp:"aaa",
                    success:function(info){
                    	$("#unameInfo").text(info)
                    }
                    
                }
            )
        }
        
        	
        
    </script>
</head>
<body>
<form action="myServlet1.do" >
    用户名:<input id="unameI" type="text" name="uname" onblur="checkUname()">
    <span id="unameInfo" style="color: red"></span><br/>
    密码:<input type="password" name="pwd"><br/>
    <input type="submit" value="提交按钮">
</form>
</body>
</html></code></pre> 
  <p>后端代码</p> 
  <pre><code class="language-java">
@WebServlet("/unameCheckServlet.do")
public class UnameCheckServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String uname = req.getParameter("uname");
        String callBack = req.getParameter("aaa");
        System.out.println(uname);
        String info="";
        if("msb".equals(uname)){
            info="用户名已经占用";
        }else{
            info="用户名可用";
        }
        // 向浏览器响应数据
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/javaScript;charset=UTF-8");
        resp.getWriter().print(callBack+"('"+info+"')");
    }
}</code></pre> 
  <p>通过getJson方实现跨域请求</p> 
  <p>getJSON方法是可以实现跨域请求的,在用该方法实现跨域请求时,在传递参数上应该注意在url后拼接一个jsoncallback=?,jQuery会自动替换?为正确的回调函数名,我们就可以不用单独定义回调函数了</p> 
  <p> 前端代码<br>  </p> 
  <pre><code class="language-html"><html>
<head>
    <title>$Title%sSourceCode%lt;/title>
    <meta charset="UTF-8"/>
    <script src="http://localhost:8080/ajaxDemo3_war_exploded/js/jquery.min.js"></script>
    <script>
    	
    	
        function checkUname(){
            // 获取输入框中的内容
            if(null == $("#unameI").val() || '' == $("#unameI").val()){
                $("#unameInfo").text("用户名不能为空");
                return;
            }
            $("#unameInfo").text("");
         
           $.getJSON(
           	"http://localhost:8080/ajaxDemo3_war_exploded/unameCheckServlet.do?jsoncallback=?",
           	{uname:$("#unameI").val()},
           	function(info){
           		$("#unameInfo").text(info)
           	}
           	
           )
        }
        
        	
        
    </script>
</head>
<body>
<form action="myServlet1.do" >
    用户名:<input id="unameI" type="text" name="uname" onblur="checkUname()">
    <span id="unameInfo" style="color: red"></span><br/>
    密码:<input type="password" name="pwd"><br/>
    <input type="submit" value="提交按钮">
</form>
</body>
</html></code></pre> 
  <p>后台代码</p> 
  <pre><code class="language-java">@WebServlet("/unameCheckServlet.do")
public class UnameCheckServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String uname = req.getParameter("uname");
        String callBack = req.getParameter("jsoncallback");
        System.out.println(uname);
        String info="";
        if("msb".equals(uname)){
            info="用户名已经占用";
        }else{
            info="用户名可用";
        }
        // 向浏览器响应数据
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/javaScript;charset=UTF-8");
        resp.getWriter().print(callBack+"('"+info+"')");
    }
}
</code></pre> 
  <p><span style="color:#fe2c24;"><strong>方式二 在后端过滤器中添加如下代码</strong></span></p> 
  <p>通过后台代码也可以实现跨域,一般在过滤器中添加如下代码,那么前端在请求时就不用考虑跨域问题了</p> 
  <pre><code class="language-java">/*请求地址白名单 *代表所有    */
  resp.setHeader("Access-Control-Allow-Origin", "*");
  /*请求方式白名单      */
  resp.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
  resp.setHeader("Access-Control-Max-Age", "3600");
  resp.setHeader("Access-Control-Allow-Headers", "x-requested-with");</code></pre> 
  <p><span style="color:#fe2c24;"><strong>方第三 在controller上使用@CrossOrigin注解 </strong></span></p> 
  <p><span style="color:#0d0016;">属性:</span></p> 
  <ul> 
   <li><span style="color:#0d0016;">origins  : 允许可访问的域列表IP</span></li> 
   <li><span style="color:#0d0016;">maxAge:准备响应前的缓存持续的最大时间(以秒为单位)。</span></li> 
  </ul> 
  <p><span style="color:#0d0016;">代码实现:</span></p> 
  <pre><code class="language-java">@CrossOrigin(origins = "http://domain2.com", maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {
    @GetMapping("/{id}")
    public Account receive(@PathVariable Long id) { }
}
</code></pre> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1599121631609913344"></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">你可能感兴趣的:(前端,ajax,前端,java)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1884405737329848320.htm"
                           title="C#:25大前沿特性揭秘" target="_blank">C#:25大前沿特性揭秘</a>
                        <span class="text-muted">步、步、为营</span>
<a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>一、引言C#,这门诞生于2000年的编程语言,自问世以来便在软件开发领域留下了浓墨重彩的一笔。它是微软.NET框架的旗舰语言,由安德斯・海尔斯伯格(AndersHejlsberg)领导的团队精心打造,设计哲学融合了C和C++的强大性能以及Java的安全性和高级特性,为开发者带来了现代、高效且易于使用的编程体验。回首C#的发展历程,那是一部不断进化的技术史。2002年,C#1.0正式发布,与.NET</div>
                    </li>
                    <li><a href="/article/1884402330300903424.htm"
                           title="爬虫实战--- (6)链家房源数据爬取与分析可视化" target="_blank">爬虫实战--- (6)链家房源数据爬取与分析可视化</a>
                        <span class="text-muted">rain雨雨编程</span>
<a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB%E5%AE%9E%E6%88%98%E7%B3%BB%E5%88%97/1.htm">爬虫实战系列</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a>
                        <div>文章持续跟新,可以微信搜一搜公众号[rain雨雨编程],第一时间阅读,涉及数据分析,机器学习,Java编程,爬虫,实战项目等。目录前言1.爬取目标2.所涉及知识点3.步骤分析(穿插代码讲解)步骤一:发送请求步骤二:获取数据步骤三:解析数据步骤四:保存数据4.爬取结果5.完整代码6数据可视化前言今天我将为大家分享一个非常实用的Python项目——链家房源数据的爬取与分析可视化。在这篇文章中,我们将分</div>
                    </li>
                    <li><a href="/article/1884401950372458496.htm"
                           title="Java并发编程,AQS详解" target="_blank">Java并发编程,AQS详解</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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a>
                        <div>AbstractQueuedSynchronizer(简称AQS)是Java并发包中一个非常重要的同步框架,它为实现锁和其他同步器提供了一种标准化的方法。AQS通过内部的状态管理、FIFO队列以及对线程调度的支持,简化了锁的实现过程。许多标准库中的同步工具(如ReentrantLock、Semaphore和CountDownLatch)都是基于AQS实现的。一、AQS的基本原理1.概念AQS是一个</div>
                    </li>
                    <li><a href="/article/1884401951064518656.htm"
                           title="LeetCode-78. 子集-Java-medium" target="_blank">LeetCode-78. 子集-Java-medium</a>
                        <span class="text-muted">happy life 2022</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E5%9B%9E%E6%BA%AF/1.htm">回溯</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/1.htm">动态规划</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>题目链接法一(回溯)publicclassSolution78{privateList>ans;privateListpath;/***无参构造函数*/publicSolution78(){this.ans=newLinkedList();}/***回溯**@paramnums*@paramstart*/privatevoidbacktracking(int[]nums,intstart){ans</div>
                    </li>
                    <li><a href="/article/1884396774903312384.htm"
                           title="前端请求gzip,响应里却没有压缩返回" target="_blank">前端请求gzip,响应里却没有压缩返回</a>
                        <span class="text-muted">a212121212121</span>

                        <div>前端请求gzip,响应里却没有压缩返回前后端分离的框架,前端vue后端的springboot都开启了gzip。前端请求Accept-Encoding:gzip,deflate后端却没有响应。数据没有压缩。试过了好几个浏览器都没有用。后来以为是yml格式的问题,也没有效果。有经验的能告诉我是怎么回事吗?yml添加的代码.(两种格式)compression:enabled:truemin-respon</div>
                    </li>
                    <li><a href="/article/1884392614241824768.htm"
                           title="使用SSE流式输出(Javaweb前后端实战)" target="_blank">使用SSE流式输出(Javaweb前后端实战)</a>
                        <span class="text-muted">记得开心一点嘛</span>
<a class="tag" taget="_blank" href="/search/JavaWeb%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E6%8A%80%E6%9C%AF%E6%A0%88/1.htm">JavaWeb后端开发技术栈</a><a class="tag" taget="_blank" href="/search/SSE/1.htm">SSE</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>
                        <div>目录一.什么是SSE?主要特点:二.SSE的实现过程:三.SSE的前端实现:1.创建EventSource对象:2.处理接收到的信息:3.处理特定事件:4.处理连接错误问题:5.关闭连接:四.SSE的后端实现:1.导入web依赖:2.创建Controller类:3.SeeEmitter的介绍以及使用方法:(1).构造方法(2).发送数据(3).关闭连接(4).连接状态处理(5).获取超时时间(6)</div>
                    </li>
                    <li><a href="/article/1884392236217593856.htm"
                           title="LeetCode100之全排列(46)--Java" target="_blank">LeetCode100之全排列(46)--Java</a>
                        <span class="text-muted">xiao--xin</span>
<a class="tag" taget="_blank" href="/search/Leetcode/1.htm">Leetcode</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E5%9B%9E%E6%BA%AF/1.htm">回溯</a>
                        <div>1.问题描述给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以按任意顺序返回答案示例1输入:nums=[1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例2输入:nums=[0,1]输出:[[0,1],[1,0]]示例3输入:nums=[1]输出:[[1]]提示1>data=newArrayList(list))</div>
                    </li>
                    <li><a href="/article/1884391857245450240.htm"
                           title="力扣【501. 二叉搜索树中的众数】Java题解" target="_blank">力扣【501. 二叉搜索树中的众数】Java题解</a>
                        <span class="text-muted">hamster2021</span>
<a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>题目要求不使用额外空间。思路:可以两次遍历,第一次找到众数的节点个数,第二次找出众数数组。但我们可以把这两次遍历改为一次遍历,就是找众数的节点个数时同时去更新众数数组,当maxCount等于count时,追加当前节点的值到众数数组中;当maxCount大于count时,将结果数组清空后加入当前节点。代码:classSolution{intmaxCount=0;//目前众数节点的个数intcount</div>
                    </li>
                    <li><a href="/article/1884390214881832960.htm"
                           title="LeetCode100之子集(78)--Java" target="_blank">LeetCode100之子集(78)--Java</a>
                        <span class="text-muted">xiao--xin</span>
<a class="tag" taget="_blank" href="/search/Leetcode/1.htm">Leetcode</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%9B%9E%E6%BA%AF/1.htm">回溯</a>
                        <div>1.问题描述给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。示例1输入:nums=[1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例2输入:nums=[0]输出:[[],[0]]提示1>data=newArrayList=nums.length){retur</div>
                    </li>
                    <li><a href="/article/1884388954082439168.htm"
                           title="uniapp中<map>地图怎么实现点位聚合?" target="_blank">uniapp中<map>地图怎么实现点位聚合?</a>
                        <span class="text-muted">GoppViper</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/uni-app/1.htm">uni-app</a><a class="tag" taget="_blank" href="/search/uniapp/1.htm">uniapp</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a><a class="tag" taget="_blank" href="/search/%E5%9C%B0%E5%9B%BE/1.htm">地图</a><a class="tag" taget="_blank" href="/search/%E8%81%9A%E5%90%88/1.htm">聚合</a>
                        <div>推荐学习文档golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔记专栏想学习更多前端知识,这里有免费的前端专栏确定聚合条件定义聚合的距离阈值:根据你的需求确定一个合适的距离阈值,当两个标记点之</div>
                    </li>
                    <li><a href="/article/1884383788130168832.htm"
                           title="### Cause: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer几种解决方案" target="_blank">### Cause: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer几种解决方案</a>
                        <span class="text-muted">瑶山</span>
<a class="tag" taget="_blank" href="/search/Bug%E8%AE%B0%E5%BD%95/1.htm">Bug记录</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/ClassCastExcept/1.htm">ClassCastExcept</a><a class="tag" taget="_blank" href="/search/sharding/1.htm">sharding</a>
                        <div>目录分析错误如下解决方案使用了日期转换函数使用了casewhen或者复杂的if判断其他扩展分析从内容上来看java.lang.ClassCastException:java.lang.Stringcannotbecasttojava.lang.Integer是一个常见的异常,通常发生在尝试将一个String类型的对象强制转换为Integer类型时。通常检查好类型和转换就好了但是这个不太一样,发生在</div>
                    </li>
                    <li><a href="/article/1884380507035201536.htm"
                           title="有些网页的内容为什么不能复制" target="_blank">有些网页的内容为什么不能复制</a>
                        <span class="text-muted">暖心少年</span>
<a class="tag" taget="_blank" href="/search/%E6%84%9F%E8%A7%A6/1.htm">感触</a>
                        <div>有些网页的内容为什么不能复制?怎么才能将不可以复制的内容复制下来呢?估计在很多时候你会遇到很多的优美的比较实用的文章,你很想将其复制下来然后为己所用,但是可恨的是不知网页到底加了些什么东西搞得你复制不小来,如果去一个字一个字的打出来估计会浪费很多的时间,那么如何才能做到将常人不可以复制到的东西,你可以复制下来呢?下面就教教你如何做到常人无法做到的事情!要分以下几个步骤进行:1,网页中嵌入了java</div>
                    </li>
                    <li><a href="/article/1884380128176304128.htm"
                           title="Java 多线程精准定位毫秒级分片读取大文件实战" target="_blank">Java 多线程精准定位毫秒级分片读取大文件实战</a>
                        <span class="text-muted">寒冰碧海</span>
<a class="tag" taget="_blank" href="/search/Java%E7%88%AC%E5%9D%91%E4%B9%8B%E8%B7%AF/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>一、引言在处理大文件读取任务时,传统的单线程读取方式往往效率低下,无法满足性能要求。本文将深入探讨一种基于Java多线程的分片读取文件方案,并结合实际代码进行详细剖析与性能分析。二、技术背景当文件体积庞大时,一次性读取整个文件会消耗大量内存且耗时较长。采用多线程分片读取策略,能够充分利用多核处理器的优势,将文件划分为多个片段,每个线程负责读取一个片段,最后合并结果,从而显著提升读取效率。三、代码实</div>
                    </li>
                    <li><a href="/article/1884377349051445248.htm"
                           title="深入了解 npm 和 pnpm:前端包管理工具的选择与比较" target="_blank">深入了解 npm 和 pnpm:前端包管理工具的选择与比较</a>
                        <span class="text-muted">山禾女鬼001</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/npm/1.htm">npm</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a>
                        <div>在现代前端开发中,包管理工具已经成为了必不可少的组成部分。它们帮助我们管理项目的依赖、自动化任务、以及在团队协作时确保一致的开发环境。最常见的前端包管理工具有npm和pnpm,它们各自具有独特的特点和优势。今天,我们就来一起深入了解这两款工具,看看它们的异同以及在实际开发中如何选择合适的工具。一、什么是npm?npm(NodePackageManager)是目前最流行的JavaScript包管理工</div>
                    </li>
                    <li><a href="/article/1884376340778512384.htm"
                           title="使用Python和Flask搭建导航网站需要注意的问题有哪些?" target="_blank">使用Python和Flask搭建导航网站需要注意的问题有哪些?</a>
                        <span class="text-muted">大懒猫软件</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/flask/1.htm">flask</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>使用Python和Flask搭建导航网站时,需要注意以下几个关键问题,以确保网站的性能、安全性和可维护性。以下是一些常见问题和建议:1.性能优化静态文件缓存:确保静态文件(如CSS、JavaScript、图片)被浏览器缓存,减少重复请求。在Nginx中配置缓存头:nginx复制location~*\.(css|js|jpg|jpeg|png|gif)${expires1d;#设置缓存有效期为1天}</div>
                    </li>
                    <li><a href="/article/1884370798530064384.htm"
                           title="探索前端的未来:深度使用 SolidJS 构建高性能用户界面" target="_blank">探索前端的未来:深度使用 SolidJS 构建高性能用户界面</a>
                        <span class="text-muted">桂月二二</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a>
                        <div>SolidJS是近年来前端开发领域的一颗新星,它结合了React的思维模式和Vue的性能优势,提供了一种高效且轻量的框架解决方案。本文将带你深入了解SolidJS的实际使用,并探索如何利用其核心特性构建现代化的高性能应用。为什么选择SolidJS?相比于其他框架,SolidJS有以下独特优势:超高性能:基于fine-grainedreactivity(细粒度反应性)机制,仅更新必要的DOM节点。零</div>
                    </li>
                    <li><a href="/article/1884362724847185920.htm"
                           title="对 Electron 架构的理解" target="_blank">对 Electron 架构的理解</a>
                        <span class="text-muted">北海屿鹿</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/electron/1.htm">electron</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>Electron的架构可以分为三层:Chromium、Node.js和应用程序层。Electron是一种基于Chromium和Node.js的开源框架,可以用于快速构建跨平台的桌面应用程序。Chromium层:Chromium是一种开源的浏览器引擎,能够渲染HTML、CSS和JavaScript等web技术栈。在Electron中,Chromium负责绘制应用程序的主窗口和所有的web视图内容,并</div>
                    </li>
                    <li><a href="/article/1884362345493360640.htm"
                           title="java 正则表达式匹配Matcher 类" target="_blank">java 正则表达式匹配Matcher 类</a>
                        <span class="text-muted">学会了没</span>
<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/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/find%E5%92%8Cmatches/1.htm">find和matches</a>
                        <div>Matcher类用法在Java中,Matcher类是用于匹配正则表达式的工具,而group()方法是Matcher类中的一个重要方法,用于提取匹配结果中的捕获组(capturedgroups)。以下是对group()方法的详细解释:1.正则表达式中的捕获组在正则表达式中,捕获组是通过圆括号()定义的。每个()内的子表达式都是一个捕获组,匹配的内容可以被单独提取。例如:Stringregex="(\</div>
                    </li>
                    <li><a href="/article/1884360959368163328.htm"
                           title="宝塔面板部署java项目用公网ip或者域名都可以访问" target="_blank">宝塔面板部署java项目用公网ip或者域名都可以访问</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><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><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/web/1.htm">web</a>
                        <div>和本地tomcat一样,war包放在webapps下,配置tomcat默认访问路径,即在host标签里加入这个analysis-tool-web-1.0-SNAPSHOT是你war包名字可以随意改,只要和webapps下名字相同就行,安装软件添加数据库打开数据库—>添加数据库,数据库名字,用户名密码等等,如果用户名不能用root,就在网站—>添加站点中创建站点同时添加数据库,在这里可以添加数据库名</div>
                    </li>
                    <li><a href="/article/1884360202384371712.htm"
                           title="Electron----桌面应用开发框架" target="_blank">Electron----桌面应用开发框架</a>
                        <span class="text-muted">暖阳浅笑-嘿</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a><a class="tag" taget="_blank" href="/search/electron/1.htm">electron</a><a class="tag" taget="_blank" href="/search/%E6%A1%8C%E9%9D%A2%E5%BA%94%E7%94%A8/1.htm">桌面应用</a>
                        <div>Electron是一个开源框架,旨在使用Web技术(如HTML、CSS和JavaScript)开发跨平台的桌面应用。它结合了Chromium和Node.js,使开发者能够构建具有原生应用体验的桌面应用程序,同时使用熟悉的Web开发工具和技术。1.什么是Electron?定义:Electron是一个跨平台的桌面应用开发框架,由GitHub开发并维护。它允许使用Web技术(HTML、CSS和JavaS</div>
                    </li>
                    <li><a href="/article/1884360202858328064.htm"
                           title="深入理解Electron一Electron架构介绍" target="_blank">深入理解Electron一Electron架构介绍</a>
                        <span class="text-muted">weixin_43188769</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/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>深入理解Electron(一)Electron架构介绍Electron是什么引用来自官网的解释:Electron是一个使用JavaScript、HTML和CSS构建桌面应用程序的框架。通过将Chromium和Node.js嵌入到它的二进制文件中,Electron允许你维护一个JavaScript代码库,并创建可以在Windows、macOS和Linux上运行的跨平台应用程序ーー不需要本地开发经验。</div>
                    </li>
                    <li><a href="/article/1884360076173570048.htm"
                           title="Electron: 跨平台桌面应用开发框架概览" target="_blank">Electron: 跨平台桌面应用开发框架概览</a>
                        <span class="text-muted">百态老人</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                        <div>Electron的背景Electron是一个开源框架,允许开发者使用Web技术构建跨平台的桌面应用程序。它最初由GitHub开发,用于构建Atom编辑器,后来发展成为一个独立的项目,支持构建各种桌面应用程序,如VisualStudioCode、Slack、WhatsApp等。Electron的核心优势在于它结合了Chromium的UI能力和Node.js的后端功能,使得前端开发者可以使用熟悉的HT</div>
                    </li>
                    <li><a href="/article/1884359445119561728.htm"
                           title="java爬虫jsoup_Java爬虫框架Jsoup学习记录" target="_blank">java爬虫jsoup_Java爬虫框架Jsoup学习记录</a>
                        <span class="text-muted">weixin_33638349</span>

                        <div>Jsoup的作用当你想获得某网页的内容,可以使用此框架做个爬虫程序,爬某图片网站的图片(先获得图片地址,之后再借助其他工具下载图片)或者是小说网站的小说内容我使用Jsoup写出的一款小说下载器,小说下载器Jsoup导入1.使用gradle导入compile'org.jsoup:jsoup:1.11.1'2.第三方包导入Jsoup使用1.获得Document本地html文件或者使用javaIO流,则</div>
                    </li>
                    <li><a href="/article/1884357177347469312.htm"
                           title="Vue.js 如何塑造现代网络体验" target="_blank">Vue.js 如何塑造现代网络体验</a>
                        <span class="text-muted">清风孤客</span>
<a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>Vue.js已迅速成为JavaScript框架中的热门之选,以其简洁的设计、灵活性和强大功能而闻名。全球的开发者被Vue.js所吸引,是因为它能极为轻松地构建动态且引人入胜的用户界面。但Vue.js究竟有何用途,又为何如此受欢迎呢?本文将探讨Vue.js及其在各个领域的关键应用。我们将展示开发者如何利用它构建从交互式网络应用、单页应用(SPA)到复杂电子商务网站等各种项目。我们还将讨论其核心特性、</div>
                    </li>
                    <li><a href="/article/1884357049211482112.htm"
                           title="终于把前后端sm加解密以及加签验证调通了。" target="_blank">终于把前后端sm加解密以及加签验证调通了。</a>
                        <span class="text-muted">清风孤客</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a>
                        <div>终于把前后端sm加解密以及加签验证调通了!领导要求我对项目的数据传输安全考虑下,因此就想到了对敏感字段做加密和对请求、响应做数字签名验证。网上看了很多文章,可能是因为我对加密这块不了解,感觉都比较乱。所以前前后后花了4天才把前后端调通。特地写一篇文章记录下流程。这里使用的是sm国密算法。不对的地方请读者评论指出。1.简单说明:前端使用sm-crypto库后端加密库使用bc库,架构上使用aop,注解</div>
                    </li>
                    <li><a href="/article/1884355656547364864.htm"
                           title="Electron 框架详解与最新动态" target="_blank">Electron 框架详解与最新动态</a>
                        <span class="text-muted">海豹工匠</span>
<a class="tag" taget="_blank" href="/search/electron/1.htm">electron</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>什么是Electron?Electron是由GitHub开发并维护的一个开源框架,旨在使用Web技术(如HTML、CSS和JavaScript)来构建跨平台的桌面应用程序。它嵌入了Chromium和Node.js,使开发者能够使用这些Web技术在桌面环境中构建应用。Electron的核心优势在于其跨平台兼容性,允许开发者编写一次代码,运行在Windows、macOS和Linux平台上。常见的基于E</div>
                    </li>
                    <li><a href="/article/1884354647011946496.htm"
                           title="Java简单爬虫 jsoup工具包" target="_blank">Java简单爬虫 jsoup工具包</a>
                        <span class="text-muted">ax阿楠</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><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>首先导入一个爬虫的工具包:jsoup-1.13.1.jar//测试爬虫的网址(爬取王者荣耀英雄的网址)staticStringurl="https://pvp.qq.com/web201605/herolist.shtml";//文件存放的地址staticStringpath="D://爬虫测试/";publicstaticvoidgetImgs(Stringurl){//加载对应网址上的Html</div>
                    </li>
                    <li><a href="/article/1884353387047219200.htm"
                           title="Toxoid Engine:下一代Web游戏引擎的先锋" target="_blank">Toxoid Engine:下一代Web游戏引擎的先锋</a>
                        <span class="text-muted">施刚爽</span>

                        <div>ToxoidEngine:下一代Web游戏引擎的先锋toxoidAmodern,cross-platform,highlymodular/decoupled,data-driven,ECS-basedgameenginewritteninRustwithscriptingsupportforC#,JavaScriptandRusttoRust(WASM),hot-reloading,WebGPUr</div>
                    </li>
                    <li><a href="/article/1884353007542398976.htm"
                           title="Java开发神器——MyEclipse CI 2019.4.0 全新发布(附下载)" target="_blank">Java开发神器——MyEclipse CI 2019.4.0 全新发布(附下载)</a>
                        <span class="text-muted">chushi6862</span>
<a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/1.htm">开发工具</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a>
                        <div>MyEclipse线上特惠,在线立享专属折扣!火热开启中>>MyEclipse2019的升级版本中,推出对Java11的支持、性能改进及新的连接器等。【MyEclipseCI2019.4.0安装包下载】增强Java功能Java11MyEclipse附带了一个集成的OpenJDK11版本,因此它不仅可以在Java11上运行,而且还完全支持Java11开发。如果要使用Java11功能,可以使用快速修复</div>
                    </li>
                    <li><a href="/article/1884349853669060608.htm"
                           title="FragPipe: 一个强大的蛋白质组学数据分析平台" target="_blank">FragPipe: 一个强大的蛋白质组学数据分析平台</a>
                        <span class="text-muted">2401_87189860</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/1.htm">数据挖掘</a>
                        <div>FragPipe简介FragPipe是一个由Nesvizhskii实验室开发的综合性蛋白质组学数据分析平台。它以MSFragger搜索引擎为核心,集成了多种功能强大的分析工具,为研究人员提供了从原始数据处理到生物学解释的一站式解决方案。FragPipe具有用户友好的Java图形用户界面(GUI),同时也支持命令行模式,可以在Windows、Linux或云环境中运行。FragPipe的主要特点快速高</div>
                    </li>
                                <li><a href="/article/38.htm"
                                       title="ASM系列六 利用TreeApi 添加和移除类成员" target="_blank">ASM系列六 利用TreeApi 添加和移除类成员</a>
                                    <span class="text-muted">lijingyao8206</span>
<a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/%E5%8A%A8%E6%80%81%E4%BB%A3%E7%90%86/1.htm">动态代理</a><a class="tag" taget="_blank" href="/search/ASM/1.htm">ASM</a><a class="tag" taget="_blank" href="/search/%E5%AD%97%E8%8A%82%E7%A0%81%E6%8A%80%E6%9C%AF/1.htm">字节码技术</a><a class="tag" taget="_blank" href="/search/TreeAPI/1.htm">TreeAPI</a>
                                    <div>    同生成的做法一样,添加和移除类成员只要去修改fields和methods中的元素即可。这里我们拿一个简单的类做例子,下面这个Task类,我们来移除isNeedRemove方法,并且添加一个int 类型的addedField属性。 
  
package asm.core;

/**
 * Created by yunshen.ljy on 2015/6/</div>
                                </li>
                                <li><a href="/article/165.htm"
                                       title="Springmvc-权限设计" target="_blank">Springmvc-权限设计</a>
                                    <span class="text-muted">bee1314</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a>
                                    <div> 
 万丈高楼平地起。 
 
权限管理对于管理系统而言已经是标配中的标配了吧,对于我等俗人更是不能免俗。同时就目前的项目状况而言,我们还不需要那么高大上的开源的解决方案,如Spring Security,Shiro。小伙伴一致决定我们还是从基本的功能迭代起来吧。 
目标:  
1.实现权限的管理(CRUD)
2.实现部门管理 (CRUD)
3.实现人员的管理 (CRUD)
4.实现部门和权限</div>
                                </li>
                                <li><a href="/article/292.htm"
                                       title="算法竞赛入门经典(第二版)第2章习题" target="_blank">算法竞赛入门经典(第二版)第2章习题</a>
                                    <span class="text-muted">CrazyMizzz</span>
<a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                                    <div>2.4.1 输出技巧 
#include <stdio.h> 
 
int 
main() 
{ 
 int i, n; 
 
 scanf("%d", &n); 
 for (i = 1; i <= n; i++) 
 printf("%d\n", i); 
 return 0; 
} 
 
习题2-2 水仙花数(daffodil</div>
                                </li>
                                <li><a href="/article/419.htm"
                                       title="struts2中jsp自动跳转到Action" target="_blank">struts2中jsp自动跳转到Action</a>
                                    <span class="text-muted">麦田的设计者</span>
<a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a><a class="tag" taget="_blank" href="/search/webxml/1.htm">webxml</a><a class="tag" taget="_blank" href="/search/struts2/1.htm">struts2</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E8%B7%B3%E8%BD%AC/1.htm">自动跳转</a>
                                    <div>1、在struts2的开发中,经常需要用户点击网页后就直接跳转到一个Action,执行Action里面的方法,利用mvc分层思想执行相应操作在界面上得到动态数据。毕竟用户不可能在地址栏里输入一个Action(不是专业人士) 
  
2、<jsp:forward page="xxx.action" /> ,这个标签可以实现跳转,page的路径是相对地址,不同与jsp和j</div>
                                </li>
                                <li><a href="/article/546.htm"
                                       title="php 操作webservice实例" target="_blank">php 操作webservice实例</a>
                                    <span class="text-muted">IT独行者</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/webservice/1.htm">webservice</a>
                                    <div>首先大家要简单了解了何谓webservice,接下来就做两个非常简单的例子,webservice还是逃不开server端与client端。我测试的环境为:apache2.2.11 php5.2.10做这个测试之前,要确认你的php配置文件中已经将soap扩展打开,即extension=php_soap.dll; 
OK 现在我们来体验webservice 
//server端 serve</div>
                                </li>
                                <li><a href="/article/673.htm"
                                       title="Windows下使用Vagrant安装linux系统" target="_blank">Windows下使用Vagrant安装linux系统</a>
                                    <span class="text-muted">_wy_</span>
<a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/vagrant/1.htm">vagrant</a>
                                    <div>准备工作: 
下载安装 VirtualBox :https://www.virtualbox.org/ 
下载安装 Vagrant :http://www.vagrantup.com/ 
下载需要使用的 box : 
官方提供的范例:http://files.vagrantup.com/precise32.box 
还可以在 http://www.vagrantbox.es/ </div>
                                </li>
                                <li><a href="/article/800.htm"
                                       title="更改linux的文件拥有者及用户组(chown和chgrp)" target="_blank">更改linux的文件拥有者及用户组(chown和chgrp)</a>
                                    <span class="text-muted">无量</span>
<a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/chgrp/1.htm">chgrp</a><a class="tag" taget="_blank" href="/search/chown/1.htm">chown</a>
                                    <div>本文(转)  
http://blog.163.com/yanenshun@126/blog/static/128388169201203011157308/   
http://ydlmlh.iteye.com/blog/1435157   
一、基本使用:    
使用chown命令可以修改文件或目录所属的用户: 
       命令</div>
                                </li>
                                <li><a href="/article/927.htm"
                                       title="linux下抓包工具" target="_blank">linux下抓包工具</a>
                                    <span class="text-muted">矮蛋蛋</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>原文地址: 
http://blog.chinaunix.net/uid-23670869-id-2610683.html 
tcpdump -nn -vv -X udp port 8888 
上面命令是抓取udp包、端口为8888 
netstat -tln 命令是用来查看linux的端口使用情况 
 
13 . 列出所有的网络连接 
lsof -i 
14. 列出所有tcp 网络连接信息 
l</div>
                                </li>
                                <li><a href="/article/1054.htm"
                                       title="我觉得mybatis是垃圾!:“每一个用mybatis的男纸,你伤不起”" target="_blank">我觉得mybatis是垃圾!:“每一个用mybatis的男纸,你伤不起”</a>
                                    <span class="text-muted">alafqq</span>
<a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a>
                                    <div>最近看了  
每一个用mybatis的男纸,你伤不起 
原文地址 :http://www.iteye.com/topic/1073938 
发表一下个人看法。欢迎大神拍砖; 
 
个人一直使用的是Ibatis框架,公司对其进行过小小的改良; 
最近换了公司,要使用新的框架。听说mybatis不错;就对其进行了部分的研究; 
 
发现多了一个mapper层;个人感觉就是个dao; 
 
 </div>
                                </li>
                                <li><a href="/article/1181.htm"
                                       title="解决java数据交换之谜" target="_blank">解决java数据交换之谜</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E4%BA%A4%E6%8D%A2/1.htm">数据交换</a>
                                    <div>交换两个数字的方法有以下三种  ,其中第一种最常用
 
  
/*
输出最小的一个数
*/
public class jiaohuan1 {

	public static void main(String[] args) {
	int a =4;
	int b = 3;
		if(a<b){
         //  第一种交换方式
		int tmep =</div>
                                </li>
                                <li><a href="/article/1308.htm"
                                       title="渐变显示" target="_blank">渐变显示</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a>
                                    <div><style type="text/css">
 #wxf {
  FILTER: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#ffffff, EndColorStr=#97FF98);
  height: 25px;
 }
</style></div>
                                </li>
                                <li><a href="/article/1435.htm"
                                       title="探索JUnit4扩展:断言语法assertThat" target="_blank">探索JUnit4扩展:断言语法assertThat</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a><a class="tag" taget="_blank" href="/search/assertThat/1.htm">assertThat</a>
                                    <div>一.概述 
        JUnit 设计的目的就是有效地抓住编程人员写代码的意图,然后快速检查他们的代码是否与他们的意图相匹配。 JUnit 发展至今,版本不停的翻新,但是所有版本都一致致力于解决一个问题,那就是如何发现编程人员的代码意图,并且如何使得编程人员更加容易地表达他们的代码意图。JUnit 4.4 也是为了如何能够</div>
                                </li>
                                <li><a href="/article/1562.htm"
                                       title="【Gson三】Gson解析{"data":{"IM":["MSN","QQ","Gtalk"]}}" target="_blank">【Gson三】Gson解析{"data":{"IM":["MSN","QQ","Gtalk"]}}</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/gson/1.htm">gson</a>
                                    <div>   
如何把如下简单的JSON字符串反序列化为Java的POJO对象? 
{"data":{"IM":["MSN","QQ","Gtalk"]}} 
  
下面的POJO类Model无法完成正确的解析: 
  
import com.google.gson.Gson;</div>
                                </li>
                                <li><a href="/article/1689.htm"
                                       title="【Kafka九】Kafka High Level API vs. Low Level API" target="_blank">【Kafka九】Kafka High Level API vs. Low Level API</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a>
                                    <div>1. Kafka提供了两种Consumer API 
 
 High Level Consumer API 
 Low Level Consumer API(Kafka诡异的称之为Simple Consumer API,实际上非常复杂) 
 
在选用哪种Consumer API时,首先要弄清楚这两种API的工作原理,能做什么不能做什么,能做的话怎么做的以及用的时候,有哪些可能的问题 
 </div>
                                </li>
                                <li><a href="/article/1816.htm"
                                       title="在nginx中集成lua脚本:添加自定义Http头,封IP等" target="_blank">在nginx中集成lua脚本:添加自定义Http头,封IP等</a>
                                    <span class="text-muted">ronin47</span>
<a class="tag" taget="_blank" href="/search/nginx+lua/1.htm">nginx lua</a>
                                    <div>Lua是一个可以嵌入到Nginx配置文件中的动态脚本语言,从而可以在Nginx请求处理的任何阶段执行各种Lua代码。刚开始我们只是用Lua 把请求路由到后端服务器,但是它对我们架构的作用超出了我们的预期。下面就讲讲我们所做的工作。 强制搜索引擎只索引mixlr.com 
Google把子域名当作完全独立的网站,我们不希望爬虫抓取子域名的页面,降低我们的Page rank。 
location /{</div>
                                </li>
                                <li><a href="/article/1943.htm"
                                       title="java-归并排序" target="_blank">java-归并排序</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>
import java.util.Arrays;


public class MergeSort {

	
	public static void main(String[] args) {

		int[] a={20,1,3,8,5,9,4,25};
		mergeSort(a,0,a.length-1);
		System.out.println(Arrays.to</div>
                                </li>
                                <li><a href="/article/2070.htm"
                                       title="Netty源码学习-CompositeChannelBuffer" target="_blank">Netty源码学习-CompositeChannelBuffer</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/netty/1.htm">netty</a>
                                    <div>CompositeChannelBuffer体现了Netty的“Transparent Zero Copy” 
 
查看API( 
http://docs.jboss.org/netty/3.2/api/org/jboss/netty/buffer/package-summary.html#package_description) 
可以看到,所谓“Transparent Zero Copy”是通</div>
                                </li>
                                <li><a href="/article/2197.htm"
                                       title="Android中给Activity添加返回键" target="_blank">Android中给Activity添加返回键</a>
                                    <span class="text-muted">hotsunshine</span>
<a class="tag" taget="_blank" href="/search/Activity/1.htm">Activity</a>
                                    <div>       
// this need android:minSdkVersion="11"
 getActionBar().setDisplayHomeAsUpEnabled(true);
 
 
 
   
 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        </div>
                                </li>
                                <li><a href="/article/2324.htm"
                                       title="静态页面传参" target="_blank">静态页面传参</a>
                                    <span class="text-muted">ctrain</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%99%E6%80%81/1.htm">静态</a>
                                    <div>
$(document).ready(function () {
	var request = {
		QueryString :
		function (val) {
			var uri = window.location.search;
			var re = new RegExp("" + val + "=([^&?]*)", &</div>
                                </li>
                                <li><a href="/article/2451.htm"
                                       title="Windows中查找某个目录下的所有文件中包含某个字符串的命令" target="_blank">Windows中查找某个目录下的所有文件中包含某个字符串的命令</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/%E6%9F%A5%E6%89%BE%E6%9F%90%E4%B8%AA%E7%9B%AE%E5%BD%95%E4%B8%8B%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6/1.htm">查找某个目录下的所有文件</a><a class="tag" taget="_blank" href="/search/%E5%8C%85%E5%90%AB%E6%9F%90%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2/1.htm">包含某个字符串</a>
                                    <div>findstr可以完成这个工作。 
     
[html]  
view plain 
copy       
 
 >findstr /s /i "string" *.*   
  
上面的命令表示,当前目录以及当前目录的所有子目录下的所有文件中查找"string&qu</div>
                                </li>
                                <li><a href="/article/2578.htm"
                                       title="改善程序代码质量的一些技巧" target="_blank">改善程序代码质量的一些技巧</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/%E9%87%8D%E6%9E%84/1.htm">重构</a>
                                    <div>有很多理由都能说明为什么我们应该写出清晰、可读性好的程序。最重要的一点,程序你只写一次,但以后会无数次的阅读。当你第二天回头来看你的代码 时,你就要开始阅读它了。当你把代码拿给其他人看时,他必须阅读你的代码。因此,在编写时多花一点时间,你会在阅读它时节省大量的时间。让我们看一些基本的编程技巧:    尽量保持方法简短    尽管很多人都遵</div>
                                </li>
                                <li><a href="/article/2705.htm"
                                       title="SharedPreferences对数据的存储" target="_blank">SharedPreferences对数据的存储</a>
                                    <span class="text-muted">dcj3sjt126com</span>

                                    <div>SharedPreferences简介:                                                   &nbs</div>
                                </li>
                                <li><a href="/article/2832.htm"
                                       title="linux复习笔记之bash shell (2) bash基础" target="_blank">linux复习笔记之bash shell (2) bash基础</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/bash/1.htm">bash</a><a class="tag" taget="_blank" href="/search/bash+shell/1.htm">bash shell</a>
                                    <div>转载请出自出处:
http://eksliang.iteye.com/blog/2104329  
1.影响显示结果的语系变量(locale) 
 1.1locale这个命令就是查看当前系统支持多少种语系,命令使用如下: 
[root@localhost shell]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
</div>
                                </li>
                                <li><a href="/article/2959.htm"
                                       title="Android零碎知识总结" target="_blank">Android零碎知识总结</a>
                                    <span class="text-muted">gqdy365</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>1、CopyOnWriteArrayList add(E) 和remove(int index)都是对新的数组进行修改和新增。所以在多线程操作时不会出现java.util.ConcurrentModificationException错误。 
所以最后得出结论:CopyOnWriteArrayList适合使用在读操作远远大于写操作的场景里,比如缓存。发生修改时候做copy,新老版本分离,保证读的高</div>
                                </li>
                                <li><a href="/article/3086.htm"
                                       title="HoverTree.Model.ArticleSelect类的作用" target="_blank">HoverTree.Model.ArticleSelect类的作用</a>
                                    <span class="text-muted">hvt</span>
<a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a><a class="tag" taget="_blank" href="/search/hovertree/1.htm">hovertree</a><a class="tag" taget="_blank" href="/search/asp.net/1.htm">asp.net</a>
                                    <div>ArticleSelect类在命名空间HoverTree.Model中可以认为是文章查询条件类,用于存放查询文章时的条件,例如HvtId就是文章的id。HvtIsShow就是文章的显示属性,当为-1是,该条件不产生作用,当为0时,查询不公开显示的文章,当为1时查询公开显示的文章。HvtIsHome则为是否在首页显示。HoverTree系统源码完全开放,开发环境为Visual Studio 2013</div>
                                </li>
                                <li><a href="/article/3213.htm"
                                       title="PHP 判断是否使用代理 PHP Proxy Detector" target="_blank">PHP 判断是否使用代理 PHP Proxy Detector</a>
                                    <span class="text-muted">天梯梦</span>
<a class="tag" taget="_blank" href="/search/proxy/1.htm">proxy</a>
                                    <div>1. php 类 
I found this class looking for something else actually but I remembered I needed some while ago something similar and I never found one. I'm sure it will help a lot of developers who try to </div>
                                </li>
                                <li><a href="/article/3340.htm"
                                       title="apache的math库中的回归——regression(翻译)" target="_blank">apache的math库中的回归——regression(翻译)</a>
                                    <span class="text-muted">lvdccyb</span>
<a class="tag" taget="_blank" href="/search/Math/1.htm">Math</a><a class="tag" taget="_blank" href="/search/apache/1.htm">apache</a>
                                    <div>这个Math库,虽然不向weka那样专业的ML库,但是用户友好,易用。 
多元线性回归,协方差和相关性(皮尔逊和斯皮尔曼),分布测试(假设检验,t,卡方,G),统计。 
  
数学库中还包含,Cholesky,LU,SVD,QR,特征根分解,真不错。 
  
基本覆盖了:线代,统计,矩阵, 
最优化理论 
曲线拟合 
常微分方程 
遗传算法(GA), 
还有3维的运算。。。 
</div>
                                </li>
                                <li><a href="/article/3467.htm"
                                       title="基础数据结构和算法十三:Undirected Graphs (2)" target="_blank">基础数据结构和算法十三:Undirected Graphs (2)</a>
                                    <span class="text-muted">sunwinner</span>
<a class="tag" taget="_blank" href="/search/Algorithm/1.htm">Algorithm</a>
                                    <div>  
Design pattern for graph processing.  
Since we consider a large number of graph-processing algorithms, our initial design goal is to decouple our implementations from the graph representation</div>
                                </li>
                                <li><a href="/article/3594.htm"
                                       title="云计算平台最重要的五项技术" target="_blank">云计算平台最重要的五项技术</a>
                                    <span class="text-muted">sumapp</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%B9%B3%E5%8F%B0/1.htm">云平台</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E5%9F%8E%E4%BA%91/1.htm">智城云</a>
                                    <div>云计算平台最重要的五项技术 
 
 
 
1、云服务器 
 
 
云服务器提供简单高效,处理能力可弹性伸缩的计算服务,支持国内领先的云计算技术和大规模分布存储技术,使您的系统更稳定、数据更安全、传输更快速、部署更灵活。 
 
 
特性 
 
机型丰富 
 
通过高性能服务器虚拟化为云服务器,提供丰富配置类型虚拟机,极大简化数据存储、数据库搭建、web服务器搭建等工作; 
 
仅需要几分钟,根据CP</div>
                                </li>
                                <li><a href="/article/3721.htm"
                                       title="《京东技术解密》有奖试读获奖名单公布" target="_blank">《京东技术解密》有奖试读获奖名单公布</a>
                                    <span class="text-muted">ITeye管理员</span>
<a class="tag" taget="_blank" href="/search/%E6%B4%BB%E5%8A%A8/1.htm">活动</a>
                                    <div>ITeye携手博文视点举办的12月技术图书有奖试读活动已圆满结束,非常感谢广大用户对本次活动的关注与参与。  
 
 
12月试读活动回顾: 
http://webmaster.iteye.com/blog/2164754 
 
 
本次技术图书试读活动获奖名单及相应作品如下: 
 
 
一等奖(两名) 
 
 
 Microhardest:http://microhardest.ite</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>