Files
wahyd4.github.com/page/5/index.html
T

1452 lines
106 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<meta name="theme-color" content="#222"><meta name="generator" content="Hexo 6.3.0">
<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
<link rel="mask-icon" href="/images/logo.svg" color="#222">
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/7.0.0/css/all.min.css" integrity="sha256-VHqXKFhhMxcpubYf9xiWdCiojEbY9NexQ4jh8AxbvcM=" crossorigin="anonymous">
<script class="next-config" data-name="main" type="application/json">{"hostname":"toozhao.com","root":"/","images":"/images","scheme":"Muse","darkmode":false,"version":"8.28.0","exturl":false,"sidebar":{"position":"left","width_expanded":320,"width_dual_column":240,"display":"post","padding":18,"offset":12,"b2t":true,"scrollpercent":true},"hljswrap":true,"codeblock":{"theme":{"light":"default","dark":"stackoverflow-dark"},"prism":{"light":"prism","dark":"prism-dark"},"copy_button":{"enable":true,"style":"mac"},"fold":{"enable":false,"height":500},"language":false},"bookmark":{"enable":true,"color":"#222","save":"auto"},"mediumzoom":true,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"stickytabs":false,"motion":{"enable":false,"async":false,"duration":200,"transition":{"menu_item":"fadeInDown","post_block":"fadeIn","post_header":"fadeInDown","post_body":"fadeInDown","coll_header":"fadeInLeft","sidebar":"fadeInUp"}},"prism":false,"i18n":{"placeholder":"搜索...","empty":"没有找到任何搜索结果:${query}","hits_time":"找到 ${hits} 个搜索结果(用时 ${time} 毫秒)","hits":"找到 ${hits} 个搜索结果"},"path":"/search.xml","localsearch":{"enable":true,"top_n_per_article":5,"unescape":false,"preload":false,"trigger":"auto"}}</script><script src="/js/config.js" defer></script>
<meta name="description" content="分享编程、运维、生活与思考">
<meta property="og:type" content="website">
<meta property="og:title" content="大染志">
<meta property="og:url" content="https://toozhao.com/page/5/">
<meta property="og:site_name" content="大染志">
<meta property="og:description" content="分享编程、运维、生活与思考">
<meta property="og:locale" content="zh_CN">
<meta property="article:author" content="Junv">
<meta property="article:tag" content="junv, wahyd4, blog, toozhao, 大染志">
<meta name="twitter:card" content="summary">
<link rel="canonical" href="https://toozhao.com/page/5/">
<script class="next-config" data-name="page" type="application/json">{"sidebar":"","isHome":true,"isPost":false,"lang":"zh-CN","comments":"","permalink":"","path":"page/5/index.html","title":""}</script>
<script class="next-config" data-name="calendar" type="application/json">""</script>
<title>大染志</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/3.2.1/anime.min.js" integrity="sha256-XL2inqUJaslATFnHdJOi9GfQ60on8Wx1C2H8DYiN1xY=" crossorigin="anonymous" defer></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/medium-zoom/1.1.0/medium-zoom.min.js" integrity="sha256-ZgMyDAIYDYGxbcpJcfUnYwNevG/xi9OHKaR/8GK+jWc=" crossorigin="anonymous" defer></script>
<script src="/js/utils.js" defer></script><script src="/js/sidebar.js" defer></script><script src="/js/next-boot.js" defer></script><script src="/js/bookmark.js" defer></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/hexo-generator-searchdb/1.5.0/search.js" integrity="sha256-xFC6PJ82SL9b3WkGjFavNiA9gm5z6UBxWPiu4CYjptg=" crossorigin="anonymous" defer></script>
<script src="/js/third-party/search/local-search.js" defer></script>
<style>
/* =========================================================
Toozhao blog custom styles (injected via head.njk)
阅读体验优化 — 微信读书风格
========================================================= */
html { scroll-behavior: smooth; }
/* 主内容阅读宽度 */
.post-block, .posts-expand .post-block {
max-width: 760px;
}
.post-title {
font-size: 1.7em;
font-weight: 700;
letter-spacing: 0.01em;
}
.post-meta { color: #999; font-size: 0.9em; }
.post-body {
font-size: 1.05em;
line-height: 1.9;
letter-spacing: 0.02em;
color: #333;
}
.post-body p {
margin: 1.1em 0;
text-align: justify;
text-justify: inter-ideograph;
}
.post-body h1, .post-body h2, .post-body h3, .post-body h4, .post-body h5, .post-body h6 {
line-height: 1.4;
margin-top: 1.6em;
margin-bottom: 0.8em;
font-weight: 600;
color: #222;
}
.post-body h2::before, .post-body h3::before, .post-body h4::before {
content: '';
display: inline-block;
width: 4px;
height: 0.9em;
background: #4a90d9;
border-radius: 2px;
margin-right: 10px;
vertical-align: -0.08em;
}
.post-body img {
border-radius: 8px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
margin: 0.6em auto;
display: block;
max-width: 100%;
}
.post-body blockquote {
border-left: 4px solid #4a90d9;
background: rgba(74, 144, 217, 0.06);
margin: 1.4em 0;
padding: 0.8em 1.2em;
border-radius: 0 8px 8px 0;
color: #555;
}
.post-body blockquote p { margin: 0.4em 0; }
.post-body a {
color: #2d6cdf;
border-bottom: 1px solid rgba(45, 108, 223, 0.3);
transition: color 0.2s, border-color 0.2s;
}
.post-body a:hover { color: #1a4fae; border-bottom-color: #1a4fae; }
.post-body code {
background: rgba(0, 0, 0, 0.05);
border-radius: 4px;
padding: 2px 6px;
font-size: 0.9em;
color: #c7254e;
}
.post-body table {
border-collapse: collapse;
margin: 1.2em auto;
font-size: 0.95em;
}
.post-body table th, .post-body table td {
border: 1px solid #ddd;
padding: 8px 14px;
}
.post-body table th { background: #f5f7fa; font-weight: 600; }
.post-body table tr:nth-child(even) { background: #fafbfc; }
.post-body ul, .post-body ol { padding-left: 1.6em; margin: 0.8em 0; }
.post-body ul li, .post-body ol li { margin: 0.35em 0; }
.post-body hr {
border: none;
border-top: 1px dashed #ccc;
margin: 2em auto;
width: 60%;
}
/* 暗色模式(跟随系统,不依赖 NexT darkmode class */
@media (prefers-color-scheme: dark) {
body { background: #1b1f24; color: #c8cdd3; }
.post-body { color: #c8cdd3; }
.post-body h1, .post-body h2, .post-body h3, .post-body h4, .post-body h5, .post-body h6 { color: #e8eaed; }
.post-body blockquote { background: rgba(74, 144, 217, 0.1); color: #9aa5b1; }
.post-body code { background: rgba(255, 255, 255, 0.1); color: #e88388; }
.post-body table th, .post-body table td { border-color: #3a3f45; }
.post-body table th { background: #2d3238; }
.post-body table tr:nth-child(even) { background: #262a2f; }
.post-meta { color: #777; }
}
::selection { background: rgba(74, 144, 217, 0.25); }
/* 字体调节按钮 */
.font-size-control {
position: fixed;
right: 18px;
bottom: 90px;
z-index: 1000;
background: rgba(0, 0, 0, 0.65);
color: #fff;
border-radius: 20px;
padding: 6px 4px;
display: flex;
flex-direction: column;
gap: 2px;
user-select: none;
}
.font-size-control button {
background: none;
border: none;
color: #fff;
font-size: 13px;
cursor: pointer;
padding: 3px 8px;
opacity: 0.85;
}
.font-size-control button:hover { opacity: 1; }
</style>
<noscript>
<link rel="stylesheet" href="/css/noscript.css">
</noscript>
</head>
<body itemscope itemtype="http://schema.org/WebPage">
<div class="headband"></div>
<main class="main">
<div class="column">
<header class="header" itemscope itemtype="http://schema.org/WPHeader"><div class="site-brand-container">
<div class="site-nav-toggle">
<div class="toggle" aria-label="切换导航栏" role="button">
<span class="toggle-line"></span>
<span class="toggle-line"></span>
<span class="toggle-line"></span>
</div>
</div>
<div class="site-meta">
<a href="/" class="brand" rel="start">
<i class="logo-line"></i>
<h1 class="site-title">大染志</h1>
<i class="logo-line"></i>
</a>
<p class="site-subtitle" itemprop="description">Junv's blog</p>
</div>
<div class="site-nav-right">
<div class="toggle popup-trigger" aria-label="搜索" role="button">
<i class="fa fa-search fa-fw fa-lg"></i>
</div>
</div>
</div>
<nav class="site-nav">
<ul class="main-menu menu"><li class="menu-item menu-item-home"><a href="/" rel="section"><i class="fa fa-home fa-fw"></i>首页</a></li><li class="menu-item menu-item-tags"><a href="/tags/" rel="section"><i class="fa fa-tags fa-fw"></i>标签</a></li><li class="menu-item menu-item-categories"><a href="/categories/" rel="section"><i class="fa fa-th fa-fw"></i>分类</a></li><li class="menu-item menu-item-archives"><a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>归档</a></li><li class="menu-item menu-item-about"><a href="/about/" rel="section"><i class="fa fa-user fa-fw"></i>关于</a></li>
<li class="menu-item menu-item-search">
<a role="button" class="popup-trigger"><i class="fa fa-search fa-fw"></i>搜索
</a>
</li>
</ul>
</nav>
<div class="search-pop-overlay">
<div class="popup search-popup">
<div class="search-header">
<span class="search-icon">
<i class="fa fa-search"></i>
</span>
<div class="search-input-container">
<input autocomplete="off" autocapitalize="off" maxlength="80"
placeholder="搜索..." spellcheck="false"
type="search" class="search-input">
</div>
<span class="popup-btn-close" role="button">
<i class="fa fa-times-circle"></i>
</span>
</div>
<div class="search-result-container">
<div class="search-result-icon">
<i class="fa fa-spinner fa-pulse fa-5x"></i>
</div>
</div>
</div>
</div>
</header>
<aside class="sidebar">
<div class="sidebar-inner sidebar-overview-active">
<ul class="sidebar-nav">
<li class="sidebar-nav-toc">
文章目录
</li>
<li class="sidebar-nav-overview">
站点概览
</li>
</ul>
<div class="sidebar-panel-container">
<!--noindex-->
<div class="post-toc-wrap sidebar-panel">
</div>
<!--/noindex-->
<div class="site-overview-wrap sidebar-panel">
<div class="site-author animated" itemprop="author" itemscope itemtype="http://schema.org/Person">
<img class="site-author-image" itemprop="image" alt="Junv"
src="/images/avatar.gif">
<p class="site-author-name" itemprop="name">Junv</p>
<div class="site-description" itemprop="description">分享编程、运维、生活与思考</div>
</div>
<div class="site-state-wrap animated">
<nav class="site-state">
<div class="site-state-item site-state-posts">
<a href="/archives/">
<span class="site-state-item-count">310</span>
<span class="site-state-item-name">日志</span>
</a>
</div>
<div class="site-state-item site-state-tags">
<a href="/tags/">
<span class="site-state-item-count">249</span>
<span class="site-state-item-name">标签</span></a>
</div>
</nav>
</div>
<div class="links-of-author animated">
<span class="links-of-author-item">
<a href="https://github.com/wahyd4" title="GitHub → https:&#x2F;&#x2F;github.com&#x2F;wahyd4" rel="noopener me" target="_blank"><i class="fab fa-github fa-fw"></i>GitHub</a>
</span>
</div>
<div class="cc-license animated" itemprop="license">
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" class="cc-opacity" rel="noopener" target="_blank"><img src="https://cdnjs.cloudflare.com/ajax/libs/creativecommons-vocabulary/2020.11.3/assets/license_badges/small/by_nc_sa.svg" alt="Creative Commons"></a>
</div>
</div>
</div>
</div>
</aside>
</div>
<div class="main-inner index posts-expand">
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://toozhao.com/2012/08/26/js-getparameters-from-scriptsfile/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Junv">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="大染志">
<meta itemprop="description" content="分享编程、运维、生活与思考">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content=" | 大染志">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2012/08/26/js-getparameters-from-scriptsfile/" class="post-title-link" itemprop="url">javascript获取引用js文件所携带的参数</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2012-08-26 00:00:00" itemprop="dateCreated datePublished" datetime="2012-08-26T00:00:00+10:00">2012-08-26</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2026-08-04 09:42:08" itemprop="dateModified" datetime="2026-08-04T09:42:08+10:00">2026-08-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>通常情况下我们在HTML中引用js没有在文件名后面附加任何参数,即:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"></span><br></pre></td></tr></table></figure>
<p>其实我们在其后面加上一些附加参数,我们现在使用的浏览器也是可以识别,同样找到我们需要的js的。(IE6没有测试,不清楚是否支持),即如下:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"></span><br></pre></td></tr></table></figure>
<p>我们现在需要做的就是如何取出这其中的参数。如:div&#x3D;mydiv;name&#x3D;tom;age&#x3D;3。首先附上我自己写的一个js方法,就是使用了常用的函数,如indexOf,substring,split等方法:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">//你需要获取值的js文件名</span><br><span class="line">var fileName = &quot;test.js&quot;;</span><br><span class="line">//获取到所有对象</span><br><span class="line"> var scripts = document.getElementsByTagName(&quot;script&quot;);</span><br><span class="line"> for(var i =0; i&lt; scripts.length;i++)&#123;</span><br><span class="line"> var src = scripts[i].src;</span><br><span class="line"> //取得你想要的js文件名</span><br><span class="line"> if(src.indexOf(fileName)!==-1)&#123;</span><br><span class="line"> //获取js文件名后面的所有参数</span><br><span class="line"> src = src.substring(src.lastIndexOf(fileName+&quot;?&quot;)+(fileName.length+1));</span><br><span class="line"> var array = src.split(&quot;&amp;&quot;);</span><br><span class="line"> //将参数一个一个遍历出来</span><br><span class="line"> for(var j=0;j&lt;array.length;j++)&#123;</span><br><span class="line"> var finalObj = array[j].split(&quot;=&quot;);</span><br><span class="line"> console.log(&quot;参数:&quot;+finalObj[0]+&quot;值:&quot;+finalObj[1]);</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br></pre></td></tr></table></figure>
<p>我在网上又看到另外一个前辈主要使用了RegExp和match函数,以正则表达式的方式完成了同样的操作,代码如下:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">var jsFileName = &quot;testParam.js&quot;;</span><br><span class="line">var rName = new RegExp(jsFileName+&quot;(\\?(.*))?$&quot;)</span><br><span class="line">var jss=document.getElementsByTagName(&#x27;script&#x27;);</span><br><span class="line">for (var i = 0;i &#x27;);</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>在测试确定这两个函数都真实可用的情况下,我突然冒出另外一个想法,想测试一下这两种方法到底效率怎么样,比较他们执行的时间的长短:</p>
<p>测试条件:</p>
<ul>
<li>将两个方法的输出都换成一致console.log();</li>
<li>分别在代码执行前和执行后获取当前时间,相减获取这种方法的执行时间。</li>
<li>所有测试都在同一台笔记本电脑下,我将测试chrome  21,firefox 14,IE9。每个浏览器分别执行5次</li>
</ul>
<p>我用的测试方法代码:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">var original = new Date().getTime(); //在执行方法前</span><br><span class="line"></span><br><span class="line">//在执行方法后</span><br><span class="line"></span><br><span class="line">console.log(new Date().getTime()-original);</span><br></pre></td></tr></table></figure>
<p>测试5次的结果为:</p>
<p><a href="/images/2012/08/saa.png"><img src="/images/2012/08/saa.png" title="执行结果统计"></a></p>
<p>结果有点出乎我的意料:在chrome和firefox中普通方式的时间都要好于使用正则表达式这种方式,而更神奇的是在IE中这两种时间都是0毫秒,只有在我快速刷新的时候才偶尔出现时间,一般只有1或者2ms。</p>
<p>确实很难理解为什么IE时间为0毫秒,只有希望高人可以解答一下了。</p>
<p>不过不管怎样,至少解决了获取参数这个问题。也不错!</p>
<p><strong>更新</strong>:根据 <a target="_blank" rel="noopener" href="http://weibo.com/jeffz">@老赵</a>的建议我将测试次数变到反复执行该方法1000次再比较结果,出现如下的数据:(注意较上图正则和普通的位置对调了一下)</p>
<p><a href="/images/2012/08/1111111111.png"><img src="/images/2012/08/1111111111.png" title="执行1000次的结果"></a></p>
<p>欢迎大家讨论。</p>
<p>参考正则方式的代码地址:<a target="_blank" rel="noopener" href="http://www.cnblogs.com/nrq/archive/2006/08/30/490347.html">http://www.cnblogs.com/nrq/archive/2006/08/30/490347.html</a></p>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://toozhao.com/2012/08/23/java-cors-cross-domain-request/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Junv">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="大染志">
<meta itemprop="description" content="分享编程、运维、生活与思考">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content=" | 大染志">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2012/08/23/java-cors-cross-domain-request/" class="post-title-link" itemprop="url">Java CORS实现Ajax跨域请求</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2012-08-23 00:00:00" itemprop="dateCreated datePublished" datetime="2012-08-23T00:00:00+10:00">2012-08-23</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2026-08-04 09:42:08" itemprop="dateModified" datetime="2026-08-04T09:42:08+10:00">2026-08-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>跨域问题在我们开发web应用的时候经常遇到,但一直没有很好的解决方案。目前可能大家认为相对比较好使的就是——JSONP技术。不过这样前台通常需要告诉后台需要返回的函数名称,而后台需要向前台前台返回的则是一个可以执行的代码段。这样在后台处理的时候就相对麻烦一些。</p>
<p>其实在新的W3C标准中,我们只需要在服务器后端添加一句话即可以比较好的解决跨域问题。如java servlet中:</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">response.setHeader(<span class="string">&quot;Access-Control-Allow-Origin&quot;</span>,<span class="string">&quot;http://toozhao.com&quot;</span>);</span><br></pre></td></tr></table></figure>
<p>这段代码的意思就是,允许来自toozhao.com的跨域HTTP请求,当然我们也可以使用通配符 “*”,这样任意的请求都可以访问这个地址了,而不会出现跨域的问题。</p>
<p>不过据其他文档中介绍,这样做是不安全的。因为这样服务器不能访问document.cookie 对象。不知道请求者的相关信息,而微软的介绍文档中说到:</p>
<blockquote>
<p><strong>安全警报</strong>  为了保护用户数据,跨域请求是匿名的,这意味着服务器无法轻松找出正在请求数据的用户。 因此,只应请求和响应不属于敏感信息或个人身份识别信息的跨域数据。</p>
</blockquote>
<p>因此为了安全,我们只应该向我们能保证其安全的站点提供Access-Control-Allow-Origin,即(CORS)。或者对可以公开的数据采用该种方式。</p>
<p>我个人认为在下面的情景中,比较适合采用这种跨域处理技术:</p>
<p><a href="/images/2012/08/aa1.png"><img src="/images/2012/08/aa1.png" title="aa"></a></p>
<p>此外,CORS还有一些其他属性可以设置:</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">Access-Control-Allow-Origin: http://www.toozhao.com   //设置允许跨域的地址</span><br><span class="line">Access-Control-Allow-Methods: POST, GET   //设置跨域允许的方法</span><br><span class="line">Access-Control-Allow-Headers: NCZ      //设置跨域允许的头部信息</span><br><span class="line">Access-Control-Max-Age: 1728000   //设置跨域允许的最大时间</span><br></pre></td></tr></table></figure>
<p>好了有了上面的这些参数,只要我们在java 中可以获取到HttpServletResponse 对象,即可以设置属性。被允许的前台就可以使用一般的ajax调用了。如jquery:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">$.ajax(&#123;</span><br><span class="line"></span><br><span class="line">url: &#x27;http://toozhao.com/test/xxx&#x27;,</span><br><span class="line"></span><br><span class="line">method: &#x27;GET&#x27;</span><br><span class="line"></span><br><span class="line">success: function(msg)&#123;</span><br><span class="line"></span><br><span class="line">console.log(msg);</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>
<p>参考文档:<br><a target="_blank" rel="noopener" href="http://huaidan.org/archives/2729.html">http://huaidan.org/archives/2729.html</a><br><a target="_blank" rel="noopener" href="http://msdn.microsoft.com/zh-cn/library/dd573303(v=vs.85).aspx">http://msdn.microsoft.com/zh-cn/library/dd573303(v=vs.85).aspx</a></p>
<p>注:已修正图片中B系统URL错误。</p>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://toozhao.com/2012/08/16/java-web-define-error-page/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Junv">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="大染志">
<meta itemprop="description" content="分享编程、运维、生活与思考">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content=" | 大染志">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2012/08/16/java-web-define-error-page/" class="post-title-link" itemprop="url">java web.xml定义配置错误页面及使用</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2012-08-16 00:00:00" itemprop="dateCreated datePublished" datetime="2012-08-16T00:00:00+10:00">2012-08-16</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2026-08-04 09:42:08" itemprop="dateModified" datetime="2026-08-04T09:42:08+10:00">2026-08-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>我们在开发java web 的程序时候,经常会需要给用户提示信息,或者页面。最常见的,比如用户输入了一个不存在的网址,默认情况下Tomcat会给用户返回一个默认的页面。如下所示:</p>
<p><a href="/images/2012/08/22.jpg"><img src="/images/2012/08/22.jpg" title="22"></a></p>
<p>这个页面千篇一律。我们完全可以给用户展示一个自定义的页面。</p>
<p>其实java web程序中web.xml 本身就支持自定义错误页面,我们只需要在web.xml添加如下信息:</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">404</span><br><span class="line">/errorpage/404.html</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">401</span><br><span class="line">/errorpage/401.html</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">500</span><br><span class="line">/errorpage/500.html</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p>当然“error-code”,可以自己选择在程序中出现得最多的错误码。我个人认为通常我们拦截:</p>
<p>401:未授权</p>
<p>404:没有找到页面</p>
<p>500:服务器内部错误</p>
<p>这三个即可。在“location”中配置你自己的html,当然页面样式,内容这些这些都可以自己定义。这个就看你自己啦。</p>
<p>如果我们不做其他操作,当系统出现这些错误情况时,服务器就会自动调用我们配置的网页。当然我们可以自行在恰当的时候使用它。</p>
<p>在servlet或者其他可能访问到HttpServletResponse对象的地方,使用:</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">response.sendError(<span class="number">404</span>); <span class="comment">//404为你需要的错误代码</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//也可以向前台网页传输错误语句,不过前台网页需要相应支持。这里没有实现</span></span><br><span class="line"></span><br><span class="line">response.sendError(<span class="number">404</span>,<span class="string">&quot;这里写想要输出到前台的提示信息&quot;</span>);</span><br></pre></td></tr></table></figure>
<p>在java中还可以使用:</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">response.setStatus(<span class="number">404</span>);  <span class="comment">//设置状态码</span></span><br></pre></td></tr></table></figure>
<p>设置状态码来实现,不过这并不能调用配置的自定义页面。只是在前台显示错误,并无输出。</p>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://toozhao.com/2012/08/14/java-upload-file-without-enctypemultipartform-data/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Junv">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="大染志">
<meta itemprop="description" content="分享编程、运维、生活与思考">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content=" | 大染志">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2012/08/14/java-upload-file-without-enctypemultipartform-data/" class="post-title-link" itemprop="url">java 服务器端实现HTTP无enctype=&#8221;multipart/form-data&#8221;文件上传</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2012-08-14 00:00:00" itemprop="dateCreated datePublished" datetime="2012-08-14T00:00:00+10:00">2012-08-14</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2026-08-04 09:42:08" itemprop="dateModified" datetime="2026-08-04T09:42:08+10:00">2026-08-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>在java web中我们一般都是使用commons-fileupload 和cos 进行服务器端上传文件的处理,而这种情况通常是我们通过在网页中的form标签中设置enctype&#x3D;”multipart&#x2F;form-data”这样的信息,才可以。否则commons-fileupload和cos都不能获取到文件。HTML网页设置格式如下图所示:</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Hello upload-file</span><br><span class="line"></span><br><span class="line">file upload:</span><br></pre></td></tr></table></figure>
<p>这只是一个简单例子,但如果我们遇到这样的情况:我们有一个java本地的客户端,使用HTTP协议来上传文件,不过这里没有表单。commons-fileupload的服务器端就会报错</p>
<p>其实解决的办法也很简单,面对没有设置”multipart&#x2F;form-data”属性的客户端,我们可以通过request.getInputStream() 获取输入流,从中读取文件内容。</p>
<p>下面是我写的一断简单代码,把输入流信息,写入到C盘的一个文件:</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">protected</span> <span class="keyword">void</span> <span class="title function_">doPost</span><span class="params">(HttpServletRequest request, HttpServletResponse response)</span> <span class="keyword">throws</span> ServletException, IOException &#123;</span><br><span class="line"></span><br><span class="line"> InputStream input= request.getInputStream(); <span class="comment">//获取流</span></span><br><span class="line"> <span class="type">OutputStream</span> <span class="variable">out</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">FileOutputStream</span>(<span class="keyword">new</span> <span class="title class_">File</span>(<span class="string">&quot;c://test.txt&quot;</span>));</span><br><span class="line"> <span class="type">byte</span>[] buffer = <span class="keyword">new</span> <span class="title class_">byte</span>[<span class="number">1024</span>];</span><br><span class="line"> <span class="type">int</span> count;</span><br><span class="line"> <span class="keyword">while</span> ((count = input.read(buffer)) != -<span class="number">1</span>) &#123;</span><br><span class="line"> out.write(buffer, <span class="number">0</span>, count);  <span class="comment">//写文件</span></span><br><span class="line"> &#125;</span><br><span class="line"> out.flush();</span><br><span class="line"> out.close();</span><br><span class="line"> input.close();</span><br><span class="line"> &#125;</span><br></pre></td></tr></table></figure>
<p>不过这种方式是不能直接解析上面那种form表单的文件上传方式,他会在文件的前后各加上一段信息,下面是一个form表单上传,输入流中的信息:</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">------WebKitFormBoundaryOPczhvGNCBlneBER</span><br><span class="line">Content-Disposition: form-data; name=&quot;file&quot;; filename=&quot;??????.txt&quot;</span><br><span class="line">Content-Type: text/plain</span><br><span class="line">#下面是我写入的文件内容</span><br><span class="line">df03c9cf37c5fbc5a7894e04297127d7</span><br><span class="line">3a9bb0371ea5789666ab438b3b7e05c2</span><br><span class="line">#到此为止</span><br><span class="line">------WebKitFormBoundaryOPczhvGNCBlneBER--</span><br></pre></td></tr></table></figure>
<p>如果form中没有加上enctype&#x3D;”multipart&#x2F;form-data”属性信息,输入流中得到的只有在<input value=””>中设置的value值,因此,通过流来获取上传的文件,应该只适合于从客户端直接向服务器写文件。</p>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://toozhao.com/2012/08/09/most-popular-free-repository/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Junv">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="大染志">
<meta itemprop="description" content="分享编程、运维、生活与思考">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content=" | 大染志">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2012/08/09/most-popular-free-repository/" class="post-title-link" itemprop="url">分享多个公网上著名的maven组件仓库</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2012-08-09 00:00:00" itemprop="dateCreated datePublished" datetime="2012-08-09T00:00:00+10:00">2012-08-09</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2026-08-04 09:42:08" itemprop="dateModified" datetime="2026-08-04T09:42:08+10:00">2026-08-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>我们都知道maven是项目构建的神器,不过用maven从国外下载东西的时候这速度可真就不怎么神器了。而且如果你在公司里面使用maven,而公司里面没有自己建一个maven代理仓库的话,大家一起使用maven下载组件的时候,就费力了。</p>
<p>因此一个公司是完全有必须要搭建一个maven代理仓库的。既可以节省宽带资源、也可以节省其他人编译相同代码说下载组件的时间,而且代理仓库服务器上的组件还可以随时复制、迁移到其他服务器,造福其他程序员。通常情况下,我们使用nexus搭建自己的maven仓库和做公网上那些用得很多的仓库的代理仓库,今天就在这里分享一些我搜集的公网上常用的代理仓库。这些已经能够保证我工作中的maven项目95%以上正常编译了。</p>
<blockquote>
<p>中央仓库:<a target="_blank" rel="noopener" href="http://repo1.maven.org/maven2/">http://repo1.maven.org/maven2/</a></p>
</blockquote>
<p>这个就是全世界最核心的maven仓库,相信大家都知道,nexus默认就已经提供。</p>
<blockquote>
<p>apache snapshots: <a target="_blank" rel="noopener" href="http://repository.apache.org/snapshots/">http://repository.apache.org/snapshots/</a></p>
</blockquote>
<p>apache 的快照组件仓库</p>
<blockquote>
<p>apache webservices :<a target="_blank" rel="noopener" href="http://ws.zones.apache.org/repository2/">http://ws.zones.apache.org/repository2/</a></p>
</blockquote>
<p>apache 的web services仓库,通常用得不多。</p>
<blockquote>
<p>codehaus snapshots:  <a target="_blank" rel="noopener" href="http://nexus.codehaus.org/snapshots/">http://nexus.codehaus.org/snapshots/</a></p>
<p>and <a target="_blank" rel="noopener" href="http://snapshots.repository.codehaus.org/">http://snapshots.repository.codehaus.org/</a></p>
</blockquote>
<p>另外一个比较著名的开源组织codehaus的快照仓库,貌似其中一个已经有一年多没有更新了。</p>
<blockquote>
<p>jenkins :<a target="_blank" rel="noopener" href="http://repo.jenkins-ci.org/public/">http://repo.jenkins-ci.org/public/</a></p>
</blockquote>
<p>开源项目jenkins 的仓库</p>
<blockquote>
<p>ops4j:<a target="_blank" rel="noopener" href="http://repository.ops4j.org/maven2/">http://repository.ops4j.org/maven2/</a></p>
</blockquote>
<p>开源项目ops4j的maven仓库</p>
<blockquote>
<p>nexus <a target="_blank" rel="noopener" href="https://repository.sonatype.org/content/groups/forge/">https://repository.sonatype.org/content/groups/forge/</a></p>
</blockquote>
<p>这是nexus自己的仓库,本身就包含了很过仓库仓库的代理,不过速度貌似不够快。</p>
<blockquote>
<p>spring external:<a target="_blank" rel="noopener" href="http://repository.springsource.com/maven/bundles/external/">http://repository.springsource.com/maven/bundles/external/</a></p>
<p>spring osgi:<a target="_blank" rel="noopener" href="http://s3.amazonaws.com/maven.springframework.org/osgi/">http://s3.amazonaws.com/maven.springframework.org/osgi/</a></p>
<p>spring release bundle:<a target="_blank" rel="noopener" href="http://repository.springsource.com/maven/bundles/release/">http://repository.springsource.com/maven/bundles/release/</a></p>
<p>spring release libs:<a target="_blank" rel="noopener" href="http://repo.springsource.org/libs-release/">http://repo.springsource.org/libs-release/</a></p>
<p>spring snapshots libs:<a target="_blank" rel="noopener" href="http://repo.springsource.org/libs-snapshot/">http://repo.springsource.org/libs-snapshot/</a></p>
</blockquote>
<p>spring 这个开源组织提供的仓库的确很多,而在我平时的编译中也经常用到,有一点spring 做得特别牛,那就是它吧很多一般的jar包转成了或者重新制作成了bundle。(bundle是osgi技术中需要的jar包,bundle可以当成普通jar包使用,而普通jar包不能当成bundle使用,举个简单的例子,如果你想把jar包放到你的osgi 应用服务器virgo 或者 jboss as 7中使用,你就必须得用bundle才可以。)所以当你找不到某个包的bundle版本的时候,试试去spring的maven仓库,他的所有包都是bundle.</p>
<blockquote>
<p>wso2<a target="_blank" rel="noopener" href="http://maven.wso2.org/nexus/content/groups/wso2-public/">http://maven.wso2.org/nexus/content/groups/wso2-public/</a></p>
<p>wso2-2:<a target="_blank" rel="noopener" href="http://dist.wso2.org/maven2/">http://dist.wso2.org/maven2/</a></p>
</blockquote>
<p>wso2是一个企业级web services中间件,提供了很多,比较强大的组件。如AS, IS,ESB等。大家有兴趣可以看看。</p>
<p>把这样仓库全部做成你的nexus的代理,就相当于你拥有它们所有仓库的能力了。是不是瞬间战斗力提升了很多。</p>
<p>如果你想尽快使用你添加的这些代理仓库,请在nexus中更新这些仓库的 index(索引),你就可以马上使用这些仓库了。</p>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://toozhao.com/2012/08/06/spring-data-mongodb-start/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Junv">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="大染志">
<meta itemprop="description" content="分享编程、运维、生活与思考">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content=" | 大染志">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2012/08/06/spring-data-mongodb-start/" class="post-title-link" itemprop="url">Spring Data MongoDB 简单使用</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2012-08-06 00:00:00" itemprop="dateCreated datePublished" datetime="2012-08-06T00:00:00+10:00">2012-08-06</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2026-08-04 09:42:08" itemprop="dateModified" datetime="2026-08-04T09:42:08+10:00">2026-08-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<blockquote>
<p><img src="/images/2012/07/logo-mongoDB.png" title="mongo"></p>
</blockquote>
<p>这篇文章,主要是作为一个记录,记录我一个小时之前搞定这个东西的兴奋心情。spring mongodb主要是mongodb-java-driver 进行了一些封装,然后可以配合强大的spring使用。我觉得可以简单把它看成一个mongo的”ORM”框架。通过我从星期五到星期天的捣腾,我发现熟悉spring 框架本身其实是最重要的。好下面直接上吧:</p>
<p>首先我在eclipse里面建了一个maven项目,你需要添加如下依赖信息(这里用到的spring框架是3.0.6.RELEASE版本)</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br></pre></td><td class="code"><pre><span class="line">UTF-8</span><br><span class="line">3.0.6.RELEASE</span><br><span class="line">1.6.1</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">junit</span><br><span class="line">junit</span><br><span class="line">4.8.1</span><br><span class="line">test</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">org.springframework.data</span><br><span class="line">spring-data-mongodb</span><br><span class="line">1.0.2.RELEASE</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">log4j</span><br><span class="line">log4j</span><br><span class="line">1.2.16</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">org.slf4j</span><br><span class="line">slf4j-api</span><br><span class="line">$&#123;slf4j.version&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">org.slf4j</span><br><span class="line">jcl-over-slf4j</span><br><span class="line">$&#123;slf4j.version&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">org.slf4j</span><br><span class="line">slf4j-log4j12</span><br><span class="line">$&#123;slf4j.version&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">org.springframework</span><br><span class="line">spring-core</span><br><span class="line">$&#123;spring.version&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">commons-logging</span><br><span class="line">commons-logging</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">org.springframework</span><br><span class="line">spring-test</span><br><span class="line">$&#123;spring.version&#125;</span><br><span class="line">test</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">commons-logging</span><br><span class="line">commons-logging</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">org.springframework</span><br><span class="line">spring-context</span><br><span class="line">$&#123;spring.version&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">org.springframework</span><br><span class="line">spring-aop</span><br><span class="line">$&#123;spring.version&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">cglib</span><br><span class="line">cglib</span><br><span class="line">2.2</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">org.mongodb</span><br><span class="line">mongo-java-driver</span><br><span class="line">2.8.0</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">org.springframework.data</span><br><span class="line">spring-data-commons-core</span><br><span class="line">1.2.1.RELEASE</span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p>由于这里面的某些依赖可能maven中央仓库没有,所以请在pom里添加下面两个spring的仓库:</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">spring-maven-release</span><br><span class="line">Spring Maven Release Repository</span><br><span class="line">http://maven.springframework.org/release</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">spring-maven-milestone</span><br><span class="line">Spring Maven Milestone Repository</span><br><span class="line">http://maven.springframework.org/milestone</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p>下面进行我们的代码编写,首先我们需要一个简单的java POJO类:person.java用于存储人的信息,其有三个属性:id(和mongodb中的ObjectId对应)name-姓名,age-年龄。</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> com.toozhao.mongo.bean;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> org.springframework.data.annotation.Id;</span><br><span class="line"><span class="keyword">import</span> org.springframework.data.mongodb.core.mapping.Document;</span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> *</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@author</span> Junv</span></span><br><span class="line"><span class="comment"> *</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="meta">@Document</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">Person</span> &#123;</span><br><span class="line"></span><br><span class="line"><span class="meta">@Id</span></span><br><span class="line"> <span class="keyword">private</span> String id;</span><br><span class="line"> <span class="keyword">private</span> String name;</span><br><span class="line"> <span class="keyword">private</span> <span class="type">int</span> age;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="title function_">Person</span><span class="params">()</span> &#123;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="title function_">Person</span><span class="params">(String name, <span class="type">int</span> age)</span> &#123;</span><br><span class="line"> <span class="built_in">this</span>.name = name;</span><br><span class="line"> <span class="built_in">this</span>.age = age;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> String <span class="title function_">getId</span><span class="params">()</span> &#123;</span><br><span class="line"> <span class="keyword">return</span> id;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> String <span class="title function_">getName</span><span class="params">()</span> &#123;</span><br><span class="line"> <span class="keyword">return</span> name;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">setId</span><span class="params">(String id)</span> &#123;</span><br><span class="line"> <span class="built_in">this</span>.id = id;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">setName</span><span class="params">(String name)</span> &#123;</span><br><span class="line"> <span class="built_in">this</span>.name = name;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">setAge</span><span class="params">(<span class="type">int</span> age)</span> &#123;</span><br><span class="line"> <span class="built_in">this</span>.age = age;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="type">int</span> <span class="title function_">getAge</span><span class="params">()</span> &#123;</span><br><span class="line"> <span class="keyword">return</span> age;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"><span class="meta">@Override</span></span><br><span class="line"> <span class="keyword">public</span> String <span class="title function_">toString</span><span class="params">()</span> &#123;</span><br><span class="line"> <span class="keyword">return</span> <span class="string">&quot;Person [id=&quot;</span> + id + <span class="string">&quot;, name=&quot;</span> + name + <span class="string">&quot;, age=&quot;</span> + age + <span class="string">&quot;]&quot;</span>;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>然后我们定义一个执行操作的接口,和其实现类,这里可以看做是一个dao模式。在接口中我们只定义了保存对象和查询一条记录两个方法。</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> com.toozhao.mongo.repository;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> com.toozhao.mongo.bean.Person;</span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> *</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@author</span> Junv</span></span><br><span class="line"><span class="comment"> *</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">interface</span> <span class="title class_">MongoAction</span> &#123;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">saveObject</span><span class="params">(Person objToSave)</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">public</span> Person <span class="title function_">findObject</span><span class="params">(String id)</span>;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>实现类:</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> com.toozhao.mongo.repository;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> org.springframework.beans.factory.annotation.Autowired;</span><br><span class="line"><span class="keyword">import</span> org.springframework.data.mongodb.core.MongoOperations;</span><br><span class="line"><span class="keyword">import</span> org.springframework.data.mongodb.core.query.Criteria;</span><br><span class="line"><span class="keyword">import</span> org.springframework.data.mongodb.core.query.Query;</span><br><span class="line"><span class="keyword">import</span> org.springframework.stereotype.Repository;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> com.toozhao.mongo.bean.Person;</span><br><span class="line"></span><br><span class="line"><span class="meta">@Repository</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">PersonActionImp</span> <span class="keyword">implements</span> <span class="title class_">MongoAction</span> &#123;</span><br><span class="line"></span><br><span class="line"><span class="meta">@Autowired</span></span><br><span class="line"> MongoOperations operation;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title function_">saveObject</span><span class="params">(Person objToSave)</span> &#123;</span><br><span class="line"> operation.insert(objToSave);</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> Person <span class="title function_">findObject</span><span class="params">(String id)</span> &#123;</span><br><span class="line"> <span class="keyword">return</span> operation.findOne(<span class="keyword">new</span> <span class="title class_">Query</span>(Criteria.where(<span class="string">&quot;_id&quot;</span>).is(id)),</span><br><span class="line"> Person.class);</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>@repository,和@autowired是spring框架中的,主要功能是起到类似反射的作用吧,具体我还没弄得很清楚。</p>
<p>写一个有main方法的java类,对功能进行简单测试:</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> com.toozhao.mongo;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> org.apache.commons.logging.Log;</span><br><span class="line"><span class="keyword">import</span> org.apache.commons.logging.LogFactory;</span><br><span class="line"><span class="keyword">import</span> org.springframework.context.ConfigurableApplicationContext;</span><br><span class="line"><span class="keyword">import</span> org.springframework.context.support.ClassPathXmlApplicationContext;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> com.toozhao.mongo.bean.Person;</span><br><span class="line"><span class="keyword">import</span> com.toozhao.mongo.repository.MongoAction;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">MainTest</span> &#123;</span><br><span class="line"></span><br><span class="line"><span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="type">Log</span> <span class="variable">log</span> <span class="operator">=</span> LogFactory.getLog(MainTest.class);</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title function_">main</span><span class="params">(String[] args)</span> &#123;</span><br><span class="line"></span><br><span class="line">log.info(<span class="string">&quot;initial -----------------&quot;</span>);</span><br><span class="line"> <span class="type">ConfigurableApplicationContext</span> <span class="variable">context</span> <span class="operator">=</span> <span class="literal">null</span>;</span><br><span class="line"> <span class="comment">//实例化appliaction Context对象</span></span><br><span class="line"> context = <span class="keyword">new</span> <span class="title class_">ClassPathXmlApplicationContext</span>(</span><br><span class="line"> <span class="string">&quot;META-INF/spring/applicationContext.xml&quot;</span>);</span><br><span class="line"> <span class="comment">//获取一个MongoAction Bean,以便后面执行相关操作</span></span><br><span class="line"> <span class="type">MongoAction</span> <span class="variable">action</span> <span class="operator">=</span> context.getBean(MongoAction.class);</span><br><span class="line"> <span class="type">Person</span> <span class="variable">person</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">Person</span>(<span class="string">&quot;Tom&quot;</span>, <span class="number">11</span>);</span><br><span class="line"></span><br><span class="line"> action.saveObject(person);</span><br><span class="line"> log.info(<span class="string">&quot;结果为:&quot;</span> + action.findObject(person.getId()));</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>最后,贴出applicationContext文档,里面主要对mongodb进行了简单的配置,和设置了repository的扫描目录(和@repository对应)。</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"> </span><br><span class="line"></span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"></span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"></span><br><span class="line"> </span><br><span class="line"> </span><br></pre></td></tr></table></figure>
<p>当然你还需要做的就是运行这个项目,我们需要在pom.xml里面添加如下代码,为你需要运行的类:</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">org.codehaus.mojo</span><br><span class="line">exec-maven-plugin</span><br><span class="line">1.1.1</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">com.toozhao.mongo.MainTest</span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p>最后,使用 mvn exec:java 就可以运行代码了,当然你在有main方法那个类,右键以java程序的方式也可以运行。结果就是你应该可以看到程序像数据库junv.person中插入了一条数据。</p>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://toozhao.com/2012/07/24/i-am-tired/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Junv">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="大染志">
<meta itemprop="description" content="分享编程、运维、生活与思考">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content=" | 大染志">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2012/07/24/i-am-tired/" class="post-title-link" itemprop="url">当这组长好累!</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2012-07-24 00:00:00" itemprop="dateCreated datePublished" datetime="2012-07-24T00:00:00+10:00">2012-07-24</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2026-08-04 09:42:08" itemprop="dateModified" datetime="2026-08-04T09:42:08+10:00">2026-08-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>这个月,领导说我对程序仓库方面比较了解,所以让我当这方面的一个项目组长,负责nexus仓库的使用和改造等。</p>
<p>我们小组有4个人,我和另外一个是实习生,还有另外两位是实训生。就是这样一个小组,我们担负的任务是改造nexus。</p>
<p>但是到现在我感觉到的只有累。</p>
<p>每天感觉就像生活在使用maven编译项目的过程中。</p>
<p>所有需求不明确,只是领导和我们小组一起讨论过一次。也没有讨论出什么东西。下来,我按照讨论结果大概写了一个想法和预期的总结。发给了领导。但是就再也没有回应了。</p>
<p>我那个东西写得很简略,我也不知道哪些东西可以要,哪些应该深入。我也拿不定主义,可就是这样,我被要求写需求,画流程图,画用例图,我觉得很不知所措,我都不知道哪些东西应该做,哪些不应该做,这叫我怎么实现出来。</p>
<p>我不明白。我也不知道需求怎么写。恼火。</p>
<p>在编译和大概看nexus的源码的过程中,我们小组都发现,要成功编译它,还真不是一件容易的事。在看他代码吧。几十个MAVEN项目,几乎没什么说明,代理里面注释也不标准,也看不懂代码是怎么样一个结构。我只是想说这个项目太大了,真的太大了。大到我们不能承受地步,而且,我在网上搜,搜不出一条关于它的源码的解析。</p>
<p>nexus 也很无赖,很多东西很乱,有些前端文字,在专门的js里面,有些又随意分布。更可恶的是,它还有实时从后台下载文字等信息,显示出来。感觉这个公司真的很流氓。</p>
<p>我不想当组长了,我只是想安心搞我的技术。我技术都不够成熟。我才大四不到啊。我还想继续搞 我的技术。请让我把技术能力提升了以后再说其他的吧。我好累。好累。</p>
<p>这个组长不好当,更何况要我做的不是用一个项目,而是改人家一个没什么注释的代码。我伤不起。</p>
<p>who can help me?</p>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://toozhao.com/2012/07/22/html5-full-screen-api/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Junv">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="大染志">
<meta itemprop="description" content="分享编程、运维、生活与思考">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content=" | 大染志">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2012/07/22/html5-full-screen-api/" class="post-title-link" itemprop="url">HTML5 全屏(full screen)API</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2012-07-22 00:00:00" itemprop="dateCreated datePublished" datetime="2012-07-22T00:00:00+10:00">2012-07-22</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2026-08-04 09:42:08" itemprop="dateModified" datetime="2026-08-04T09:42:08+10:00">2026-08-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>full screen (全屏)API,现在已经成为了HTML5的一个官方API,不过目前只是被chrome、firefox、safari浏览器实现了,且他们目前都是用的自行实现的函数,而非W3C官方标准的函数。建议在调用之前都检测一下!</p>
<p>full screen API主要有两个方法:一是执行全屏,另外一个则是退出全屏。他们的调用方法为:</p>
<p><strong>执行全屏</strong></p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">var element =  XXX      //这里你需要得到你的一个网页中的对象,可以是整个网页,或者其中一个节点</span><br><span class="line"></span><br><span class="line">element.requestFullscreen();     //W3C的方法</span><br><span class="line"></span><br><span class="line">element.mozRequestFullScreen();     //firefox实现的方法</span><br><span class="line"></span><br><span class="line">element.webkitRequestFullScreen();     //chrome 和safari实现的方法</span><br></pre></td></tr></table></figure>
<p><strong>退出全屏</strong></p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">element.exitFullScreen();     //W3C</span><br><span class="line"></span><br><span class="line">element.mozCancelFullScreen();     //firefox</span><br><span class="line"></span><br><span class="line">element.webkitCancelFullScreen();  //chrome和safari</span><br></pre></td></tr></table></figure>
<p>例如,我想全屏整个页面,那个就应该使用:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">var documentEle = document.documentElement;</span><br><span class="line"></span><br><span class="line">documentEle.webkitRequestFullScreen(); //chrome</span><br></pre></td></tr></table></figure>
<p>此外我们还可以监听,full screen 事件,在其状态改变时执行相关操作。</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">document.addEventListener(&quot;fullscreenchange&quot;, function () &#123;&#125;, false);  //w3c</span><br><span class="line"></span><br><span class="line">document.addEventListener(&quot;mozfullscreenchange&quot;,function()&#123;&#125;,false); //firefox</span><br><span class="line"></span><br><span class="line">document.addEventListener(&quot;webkitfullscreenchange&quot;, function () &#123;&#125;, false);  //chrome 和safari</span><br></pre></td></tr></table></figure>
<p>如果我们想获取当前某个对象数否处于全屏状态,就可以使用下面这个属性:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">document.fullScreen  //w3c</span><br><span class="line"></span><br><span class="line">document.mozFullScreen //firefox</span><br><span class="line"></span><br><span class="line">document.webkitIsFullScreen // chrome 和safari</span><br></pre></td></tr></table></figure>
<p>经过我的测试(chrome 22),应该是HTML 里面所有对象都是可以被全屏的,如:,<img>,<p>,网页本身。不过我们是不能一开始网页就让其处于全屏状态。而需要一些行为来触发这个事件。</p></p>
<p>在css 里面也有一个对应的选择器来修饰full screen:</p>
<figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-tag">html</span><span class="selector-pseudo">:fullscreen</span>&#123;</span><br><span class="line"></span><br><span class="line"><span class="attribute">font-size</span>:<span class="number">30px</span>;</span><br><span class="line"><span class="attribute">color</span>:white;</span><br><span class="line"><span class="attribute">background</span>:blue;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-tag">html</span>:-moz-full-screen&#123;</span><br><span class="line"> <span class="attribute">font-size</span>:<span class="number">30px</span>;</span><br><span class="line"> <span class="attribute">color</span>:white;</span><br><span class="line"> <span class="attribute">background</span>:blue;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="selector-tag">html</span>:-webkit-full-screen&#123;</span><br><span class="line"> <span class="attribute">font-size</span>:<span class="number">30px</span>;</span><br><span class="line"> <span class="attribute">color</span>:white;</span><br><span class="line"> <span class="attribute">background</span>:blue;</span><br><span class="line"> &#125;</span><br></pre></td></tr></table></figure>
<p>目前IE9 也是不支持full screen 全屏 API的,不知道在IE 10里面支持不!微软在这方面做得真的不怎么样啊。</p>
<blockquote>
<p><a href="http://toozhao.com/playground/fullscreen.html" title="full screen demo">点我查看我做的demo吧!</a>包含全屏网页,和全屏图片,不过由于图片原因效果不好。但是功能有了。哈哈!</p>
</blockquote>
</div>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://toozhao.com/2012/07/17/mongodb-getstart/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Junv">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="大染志">
<meta itemprop="description" content="分享编程、运维、生活与思考">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content=" | 大染志">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2012/07/17/mongodb-getstart/" class="post-title-link" itemprop="url">Mongodb 入门</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2012-07-17 00:00:00" itemprop="dateCreated datePublished" datetime="2012-07-17T00:00:00+10:00">2012-07-17</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2026-08-04 09:42:08" itemprop="dateModified" datetime="2026-08-04T09:42:08+10:00">2026-08-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p><a href="/images/2012/07/logo-mongoDB.png"><img src="/images/2012/07/logo-mongoDB.png" title="logo-mongoDB"></a></p>
<p>Mongodb是一个非关系型数据库软件(NoSql),以类似json的形式bson存储数据,bson有二进制的json的意思,官方说bson的效率更高,很适合存储类似于对象的数据,这里权当把自己学习的过程记录下来.</p>
<p>首先是下载安装mongodb,请到<a target="_blank" rel="noopener" href="http://www.mongodb.org/downloads">这里</a>下载适合你操作系统的相应版本,这里我们以windows作为介绍.</p>
<p>将下载的压缩包解压到一个文件夹,我这里为 f:\mongodb</p>
<p>在mongodb文件夹下创建一个data文件夹,用于存储你的数据库文件.</p>
<p>下面就可以开始安装运行mongodb了,mongodb不需要进行安装,直接运行即可,进入命令行:</p>
<blockquote>
<p>cd f:\mongodb\bin</p>
<p>mongod.exe dbpath&#x3D;f:\mongodb\data</p>
</blockquote>
<p>–dbpath 为配置你的数据库文件路径,注意在等号附近不要空格哦,否则不能正常运行</p>
<p><a href="/images/2012/07/1_conew1.jpg"><img src="/images/2012/07/1_conew1.jpg" title="1_conew1"></a></p>
<p>这样mongodb的服务器端就已经成功运行起来了.下面运行客户端即可.mongodb默认是没有设置登录的用户名和密码,所以我们打开客户端,就可以直接连接上服务器.</p>
<blockquote>
<p>f:\mongodb\bin\mongo.exe</p>
</blockquote>
<p>如果连接成功, 你会看到会默认连上test数据库.(connectting to :test)</p>
<p>下面我们就可以进行一些简单的操作了.</p>
<blockquote>
<p>help    &#x2F;&#x2F; 查看帮助信息</p>
<p>db.help()  &#x2F;&#x2F;在当前数据库内的帮助信息</p>
<p>show dbs   &#x2F;&#x2F;查看所有的数据库列表</p>
<p>use dbname    &#x2F;&#x2F;dbname为你的数据库,如果你想创建一个新的数据库,将dbname写成一个不存在的数据库名称即可,mongodb会自动帮你创建数据库,同时起到切换数据库的作用</p>
</blockquote>
<p>在mongodb中没有我们通常说的”表”的概念,与表相对应的是”collection”,我们通常做到增删查改都是都与一个数据库中的collection而言的,在mongodb中不需要特意创建collection,如果我们使用的是一个没有的collection,系统便会自动创建</p>
<p>比如我们想插入一条数据:</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">db.mycollection.save(&#123;&quot;name&quot;:&quot;junv&quot;&#125;);</span><br></pre></td></tr></table></figure>
<p>系统便会自动生成名为mycollection的collection,并将数据存入其中.</p>
<p>我们也可以使用下面的话来达到同样的效果:</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">var tom <span class="operator">=</span> &#123;&quot;name&quot;: &quot;junv&quot;&#125;;</span><br><span class="line"></span><br><span class="line">db.mycollection.save(tom);</span><br></pre></td></tr></table></figure>
<p>我们可以使用 show collections 在查看当前数据库中所拥有的所有collection列表.</p>
<p>我们需要使用db.mycollection.find() 来查询其中的数据,如果我想查询”name” 为mary 的数据,就需要使用:</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">db.mycollection.find(&#123;&quot;name&quot;:&quot;mary&quot;&#125;);</span><br></pre></td></tr></table></figure>
<p>在一个collection 中,我们可以插入不同的数据,比如在mycollection中,我们还可以插入:</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">db.mycollection.insert(&#123;&quot;city&quot;:&quot;chegndu&quot;,&quot;nation&quot;:&quot;china&quot;&#125;);</span><br></pre></td></tr></table></figure>
<p>这正是mongodb带来的优势.</p>
<p>如果我们查查询若干条数据,或者查询从n到m条数据,就需要使用:</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">db.mycollection.find().limit(n);</span><br><span class="line"></span><br><span class="line">db.mycollection.find().limit(n,m)</span><br></pre></td></tr></table></figure>
<p>当查询的数据过多而显示不完是,我们就需要使用 it 命令,来显示剩余部分.</p>
<p>更新数据,比如我们将“name”为mary的改为lily</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">var temp <span class="operator">=</span> db.mycollection.find(&#123;&quot;name&quot;:&quot;mary&quot;&#125;);</span><br><span class="line"></span><br><span class="line">temp.name <span class="operator">=</span> &quot;lily&quot;;     <span class="operator">/</span><span class="operator">/</span>改变名字</span><br><span class="line"></span><br><span class="line">db.mycollection.update(&#123;&quot;name&quot;:&quot;mary&quot;&#125;,temp);  <span class="operator">/</span><span class="operator">/</span>保存</span><br></pre></td></tr></table></figure>
<p>删除数据,将lily这条数据删除:</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">db.mycollection.remove(&#123;&quot;name&quot;:&quot;lily&quot;&#125;);</span><br></pre></td></tr></table></figure>
<p>删除所有数据:</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">db.mycollection.remove(&#123;&#125;)</span><br></pre></td></tr></table></figure>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="">
<link itemprop="mainEntityOfPage" href="https://toozhao.com/2012/07/13/compare-priority-of-maven-repository/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Junv">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="大染志">
<meta itemprop="description" content="分享编程、运维、生活与思考">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content=" | 大染志">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2012/07/13/compare-priority-of-maven-repository/" class="post-title-link" itemprop="url">深入比较几种maven仓库的优先级</a>
</h2>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2012-07-13 00:00:00" itemprop="dateCreated datePublished" datetime="2012-07-13T00:00:00+10:00">2012-07-13</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2026-08-04 09:42:08" itemprop="dateModified" datetime="2026-08-04T09:42:08+10:00">2026-08-04</time>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>平时在使用maven下载依赖或者maven插件的时候,经常被本地仓库,settings里面profile中设置的仓库,mirror仓库,pom文件中的repository搞疯,因为很可能你就会因为这些你所设置的仓库不能正常编译项目。下面将和大家一起探讨和比较下这几种仓库的优先级别。</p>
<p>这里我们有三个仓库 </p>
<ul>
<li>远程222.197.xxx仓库</li>
<li>localhost镜像,是我自己在本机搭建的一个仓库</li>
<li>nexus仓库,是nexus官方的仓库</li>
</ul>
<p>首先考虑这样一种情况:maven本地仓库中拥有该包,而中央仓库、mirror仓库、profile仓库、pom中仓库均不含该包。我们可以看到maven直接首先从本地仓库中找到该包,编译成功。</p>
<p><a href="/images/2012/07/1.png"><img src="/images/2012/07/1-1024x267.png" title="1"></a></p>
<p>由此可以看出,本地仓库拥有最高的优先级。</p>
<p>接下来,我们继续剩下的仓库的优先级,(下面所有情况,都默认本地不拥有我们需要的包)剩下的仓库都是远程仓库,这里我们设定mirror设置的镜像仓库是中央仓库的镜像。那么就可以把mirror当成中央仓库,因为其已经被mirror替换了。</p>
<p>这次的场景为:pom文件中定义的仓库(repository)(即远程:222.197.xxx)拥有该包,而mirror(localhost镜像)和profilenexus仓库)中的仓库不拥有该包。进行测试:</p>
<p><a href="/images/2012/07/2.png"><img src="/images/2012/07/2-1024x267.png" title="2"></a></p>
<p>从这个结果可以看出,maven首先调用了profile中的仓库,其次找到了pom文件中设置的仓库。而mirror没有出现。我们这里可以初步推测优先级别为:profile &gt; pom &gt; mirror,为了验证我们的判断,我们需要在进行一次测试来验证这个结果。</p>
<p>场景如下:mirror中拥有该包(222.197),而pom(localhost镜像)和profilenexus仓库)中均不含有该包。进行测试:</p>
<p><a href="/images/2012/07/3.png"><img src="/images/2012/07/3-1024x319.png" title="3"></a></p>
<p>实际情况的确验证了我们的猜想。那么我们得出这几种maven仓库的优先级别为:</p>
<blockquote>
<p>本地仓库 &gt;profile &gt; pom中的repository &gt; mirror</p>
</blockquote>
<p>注意:我也验证过这样的情况,将mirror这样设置:</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">huacloud-central</span><br><span class="line">*</span><br><span class="line">name-of-this</span><br><span class="line">http://222.197.XXXXXX/nexus/content/groups/public/</span><br><span class="line"> </span><br></pre></td></tr></table></figure>
<p>即是表示该仓库地址为所有仓库的镜像,那么这个时候,maven会忽略掉其他设置的各种类型仓库仓库,只在mirror里面找。所以建议不要这样设置,他将导致pom文件中、pforile里面的仓库设置都失效。</p>
<blockquote>
<p>随便科普一下几种仓库的设置吧:</p>
</blockquote>
<p>pom中的repository:</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">dsdf</span><br><span class="line"></span><br><span class="line">true</span><br><span class="line"></span><br><span class="line">http://222.197.XXXXXX/nexus/content/groups/public/</span><br><span class="line"></span><br><span class="line"> </span><br></pre></td></tr></table></figure>
<p>profile中的仓库是在maven的设置文件(maven安装目录&#x2F;conf&#x2F;settings.xml</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"> nexus</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> sonatype-forge</span><br><span class="line"> http://repository.sonatype.org/content/groups/forge/</span><br><span class="line"> </span><br><span class="line"> true</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> true</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> sonatype-forge</span><br><span class="line"> http://repository.sonatype.org/content/groups/forge/</span><br><span class="line"> </span><br><span class="line"> true</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> true</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"></span><br><span class="line">nexus</span><br><span class="line"> </span><br></pre></td></tr></table></figure>
<p>mirror设置上文有,这里不再赘述。欢迎留言讨论。</p>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<nav class="pagination">
<a class="extend prev" rel="prev" title="上一页" aria-label="上一页" href="/page/4/"><i class="fa fa-angle-left"></i></a><a class="page-number" href="/">1</a><span class="space">&hellip;</span><a class="page-number" href="/page/4/">4</a><span class="page-number current">5</span><a class="page-number" href="/page/6/">6</a><span class="space">&hellip;</span><a class="page-number" href="/page/31/">31</a><a class="extend next" rel="next" title="下一页" aria-label="下一页" href="/page/6/"><i class="fa fa-angle-right"></i></a>
</nav>
</div>
</main>
<footer class="footer">
<div class="footer-inner">
<div class="copyright">
&copy; 2012
<span itemprop="copyrightYear">2026</span>
<span class="with-love">
<i class="fa fa-heart"></i>
</span>
<span class="author" itemprop="copyrightHolder">Junv</span>
</div>
<div class="powered-by"><a href="https://hexo.io/" rel="noopener" target="_blank">Hexo</a> & <a href="https://theme-next.js.org/muse/" rel="noopener" target="_blank">NexT.Muse</a> 强力驱动
</div>
</div>
</footer>
<div class="toggle sidebar-toggle" role="button">
<span class="toggle-line"></span>
<span class="toggle-line"></span>
<span class="toggle-line"></span>
</div>
<div class="sidebar-dimmer"></div>
<div class="back-to-top" role="button" aria-label="返回顶部">
<i class="fa fa-arrow-up fa-lg"></i>
<span>0%</span>
</div>
<div class="reading-progress-bar"></div>
<a role="button" class="book-mark-link book-mark-link-fixed"></a>
<noscript>
<div class="noscript-warning">Theme NexT works best with JavaScript enabled</div>
</noscript>
<script>
/* 字号调节 A- / A / A+(阅读体验) */
(function () {
'use strict';
function initFontSize() {
var postBody = document.querySelector('.post-body');
if (!postBody || document.getElementById('font-size-control')) return;
var bar = document.createElement('div');
bar.id = 'font-size-control';
bar.className = 'font-size-control';
var labels = [['A-', -1], ['A', 0], ['A+', 1]];
var current = 1.0;
labels.forEach(function (item) {
var btn = document.createElement('button');
btn.textContent = item[0];
btn.title = item[0] === 'A-' ? '减小字号' : item[0] === 'A+' ? '增大字号' : '恢复默认';
btn.addEventListener('click', function () {
if (item[1] === 0) current = 1.0;
else current = Math.min(1.4, Math.max(0.8, current + item[1] * 0.1));
postBody.style.fontSize = current + 'em';
});
bar.appendChild(btn);
});
document.body.appendChild(bar);
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initFontSize);
} else {
initFontSize();
}
})();
</script>
</body>
</html>