mirror of
https://github.com/wahyd4/wahyd4.github.com.git
synced 2026-08-09 05:15:56 +10:00
1452 lines
106 KiB
HTML
1452 lines
106 KiB
HTML
<!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://github.com/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=mydiv;name=tom;age=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 = "test.js";</span><br><span class="line">//获取到所有对象</span><br><span class="line"> var scripts = document.getElementsByTagName("script");</span><br><span class="line"> for(var i =0; i< scripts.length;i++){</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){</span><br><span class="line"> //获取js文件名后面的所有参数</span><br><span class="line"> src = src.substring(src.lastIndexOf(fileName+"?")+(fileName.length+1));</span><br><span class="line"> var array = src.split("&");</span><br><span class="line"> //将参数一个一个遍历出来</span><br><span class="line"> for(var j=0;j<array.length;j++){</span><br><span class="line"> var finalObj = array[j].split("=");</span><br><span class="line"> console.log("参数:"+finalObj[0]+"值:"+finalObj[1]);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> }</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 = "testParam.js";</span><br><span class="line">var rName = new RegExp(jsFileName+"(\\?(.*))?$")</span><br><span class="line">var jss=document.getElementsByTagName('script');</span><br><span class="line">for (var i = 0;i ');</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>在测试确定这两个函数都真实可用的情况下,我突然冒出另外一个想法,想测试一下这两种方法到底效率怎么样,比较他们执行的时间的长短:</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">"Access-Control-Allow-Origin"</span>,<span class="string">"http://toozhao.com"</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({</span><br><span class="line"></span><br><span class="line">url: 'http://toozhao.com/test/xxx',</span><br><span class="line"></span><br><span class="line">method: 'GET',</span><br><span class="line"></span><br><span class="line">success: function(msg){</span><br><span class="line"></span><br><span class="line">console.log(msg);</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>参考文档:<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">"这里写想要输出到前台的提示信息"</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=”multipart/form-data”文件上传</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=”multipart/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/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 {</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">"c://test.txt"</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>) {</span><br><span class="line"> out.write(buffer, <span class="number">0</span>, count); <span class="comment">//写文件</span></span><br><span class="line"> }</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"> }</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="file"; filename="??????.txt"</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=”multipart/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">${slf4j.version}</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">${slf4j.version}</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">${slf4j.version}</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">${spring.version}</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">${spring.version}</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">${spring.version}</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">${spring.version}</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> {</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> {</span><br><span class="line"></span><br><span class="line">}</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> {</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"> }</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> {</span><br><span class="line"> <span class="keyword">return</span> id;</span><br><span class="line"> }</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> {</span><br><span class="line"> <span class="keyword">return</span> name;</span><br><span class="line"> }</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> {</span><br><span class="line"> <span class="built_in">this</span>.id = id;</span><br><span class="line"> }</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> {</span><br><span class="line"> <span class="built_in">this</span>.name = name;</span><br><span class="line"> }</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> {</span><br><span class="line"> <span class="built_in">this</span>.age = age;</span><br><span class="line"> }</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> {</span><br><span class="line"> <span class="keyword">return</span> age;</span><br><span class="line"> }</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> {</span><br><span class="line"> <span class="keyword">return</span> <span class="string">"Person [id="</span> + id + <span class="string">", name="</span> + name + <span class="string">", age="</span> + age + <span class="string">"]"</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line">}</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> {</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">}</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> {</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> {</span><br><span class="line"> operation.insert(objToSave);</span><br><span class="line"></span><br><span class="line">}</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 class="keyword">return</span> operation.findOne(<span class="keyword">new</span> <span class="title class_">Query</span>(Criteria.where(<span class="string">"_id"</span>).is(id)),</span><br><span class="line"> Person.class);</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>@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> {</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> {</span><br><span class="line"></span><br><span class="line">log.info(<span class="string">"initial -----------------"</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">"META-INF/spring/applicationContext.xml"</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">"Tom"</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">"结果为:"</span> + action.findObject(person.getId()));</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>最后,贴出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("fullscreenchange", function () {}, false); //w3c</span><br><span class="line"></span><br><span class="line">document.addEventListener("mozfullscreenchange",function(){},false); //firefox</span><br><span class="line"></span><br><span class="line">document.addEventListener("webkitfullscreenchange", function () {}, 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>{</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">}</span><br><span class="line"></span><br><span class="line"><span class="selector-tag">html</span>:-moz-full-screen{</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"> <span class="selector-tag">html</span>:-webkit-full-screen{</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></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=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 // 查看帮助信息</p>
|
||
<p>db.help() //在当前数据库内的帮助信息</p>
|
||
<p>show dbs //查看所有的数据库列表</p>
|
||
<p>use dbname //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({"name":"junv"});</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> {"name": "junv"};</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({"name":"mary"});</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({"city":"chegndu","nation":"china"});</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({"name":"mary"});</span><br><span class="line"></span><br><span class="line">temp.name <span class="operator">=</span> "lily"; <span class="operator">/</span><span class="operator">/</span>改变名字</span><br><span class="line"></span><br><span class="line">db.mycollection.update({"name":"mary"},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({"name":"lily"});</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({})</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镜像)和profile(nexus仓库)中的仓库不拥有该包。进行测试:</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 > pom > mirror,为了验证我们的判断,我们需要在进行一次测试来验证这个结果。</p>
|
||
<p>场景如下:mirror中拥有该包(222.197),而pom(localhost镜像)和profile(nexus仓库)中均不含有该包。进行测试:</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>本地仓库 >profile > pom中的repository > 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安装目录/conf/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">…</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">…</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">
|
||
© 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>
|