mirror of
https://github.com/wahyd4/wahyd4.github.com.git
synced 2026-08-09 05:15:56 +10:00
1395 lines
81 KiB
HTML
1395 lines
81 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/7/">
|
||
<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/7/">
|
||
|
||
|
||
<script class="next-config" data-name="page" type="application/json">{"sidebar":"","isHome":true,"isPost":false,"lang":"zh-CN","comments":"","permalink":"","path":"page/7/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/01/27/create-github-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/01/27/create-github-page/" class="post-title-link" itemprop="url">创建自己的github page</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-01-28 00:00:00" itemprop="dateCreated datePublished" datetime="2012-01-28T00:00:00+11:00">2012-01-28</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 20:47:21" itemprop="dateModified" datetime="2026-08-04T20:47:21+10:00">2026-08-04</time>
|
||
</span>
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</header>
|
||
|
||
|
||
|
||
|
||
<div class="post-body" itemprop="articleBody">
|
||
<p>昨天我自己创建github page的时候,怎么也创建不起,不过自己看都是按照官方文档来的啊。</p>
|
||
<p>到最后才发现,原来github默认给每个注册用户分配了一个github page,地址就是 你的用户名.github.com,不过默认当然是没有开通的。因此不可以创建其他名称的二级域名作为项目名哦,只能是:</p>
|
||
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">你的用户名.github.com</span><br></pre></td></tr></table></figure>
|
||
|
||
<p>下面简单说一下步骤:</p>
|
||
<p>创建一个仓库名称为 :你的用户名.github.com,</p>
|
||
<p>在本地仓库中添加一个index.html文件,并向其中加入一些内容。然后push到github 的master分支就行了。</p>
|
||
<p>如果成功的话,系统会在几分钟内给你发个消息说,成功了。</p>
|
||
<p>如果没有消息,也就意味着没有成功哦。</p>
|
||
<p>你的域名就是: http://用户名.github.com</p>
|
||
<p>比如我的:<a target="_blank" rel="noopener" href="http://wahyd4.github.com/">http://wahyd4.github.com/</a></p>
|
||
<p>目前只是简单的github page 。</p>
|
||
<p>我们还可以绑定自己的域名,顶级域名或者二级域名都可以的。</p>
|
||
<p>其实最诱人的是我们可以利用github page 做我们的博客空间。当然这些都是免费了哦。</p>
|
||
<p>jekyll可以用来生成静态博客。我们可以用disqus做我们的评论系统。这样什么都有了哦,当然这里已经有人帮我把这些东西结合好了,博客还用到了twitter bootstrap 哦,这个东西就叫jekyll-bootstrap 我们只需要把他的仓库clone到本地,然后就可以使用了。</p>
|
||
<p>具体的东西请看官方教程吧。简单使用是很简单的。</p>
|
||
<p>jekyll: <a target="_blank" rel="noopener" href="https://github.com/mojombo/**jekyll">https://github.com/mojombo/**jekyll</a>**</p>
|
||
<p>jekyll-bootstrap:<a target="_blank" rel="noopener" href="http://jekyllbootstrap.com/">http://jekyllbootstrap.com/</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/01/22/happy-new-year/">
|
||
|
||
<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/01/22/happy-new-year/" 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-01-23 00:00:00" itemprop="dateCreated datePublished" datetime="2012-01-23T00:00:00+11:00">2012-01-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 20:47:21" itemprop="dateModified" datetime="2026-08-04T20:47:21+10:00">2026-08-04</time>
|
||
</span>
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</header>
|
||
|
||
|
||
|
||
|
||
<div class="post-body" itemprop="articleBody">
|
||
<p>人长大了,过年都觉得没什么意思了。今天大年初一就在家了。有点无聊。下午在弄Linux,本来装了centos minial 可是文字界面,网络连接搞不定。然后就转到ubuntu server 了,之所以这样做,是因为本来用linux也是为了做服务器用,而且服务器版开机不起其他进程的话,占用的内存很少。因为不需要桌面。</p>
|
||
<p>分享一个经验吧:如果你想在在host 主机商ping virtualbox 里面的linux 虚拟机的话,请把网络连接设成<strong>桥接(Bridge Adapter)</strong>模式.桥接模式,虚拟机将使用和host主机同一类的IP地址。</p>
|
||
<p>然后推荐使用putty 通过ssh对linux进行控制。这个在windows下面真的很好用。当然请记得在你的虚拟机上安装</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">sudo apt-get install openssh-server</span><br><span class="line"></span><br><span class="line">sudo apt-get install ssh</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/01/18/use-maven-deploy-totomcat-7/">
|
||
|
||
<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/01/18/use-maven-deploy-totomcat-7/" class="post-title-link" itemprop="url">使用maven部署项目到tomcat 7</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-01-19 00:00:00" itemprop="dateCreated datePublished" datetime="2012-01-19T00:00:00+11:00">2012-01-19</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 20:47:21" itemprop="dateModified" datetime="2026-08-04T20:47:21+10:00">2026-08-04</time>
|
||
</span>
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</header>
|
||
|
||
|
||
|
||
|
||
<div class="post-body" itemprop="articleBody">
|
||
<p><a href="/images/2012/01/tomcat.gif"><img src="/images/2012/01/tomcat.gif" title="tomcat"></a></p>
|
||
<p>上一篇文章,我们讲了maven的简单入门应用,其实最详尽的文档还是应该看官方的document。我想其他人在网上写都是一些细节上的解释和补充。或者干脆就是简单的大致的描述。</p>
|
||
<p>今天我想分享的是使用maven插件部署we项目到tomcat 7 中运行。之前如果我们没有使用maven,那么我想很多人都是使用的eclipse自带的run on server中选择tomcat,将web项目部署到tomcat中实现自动部署和运行。我想maven本身强大也在于,我们可以写很多插件(plugin)来扩展maven的功能,实现各种自动化的操作。下面进入正题。</p>
|
||
<p>对于使用maven插件部署项目到tomcat 6中,网上已经有很多说明。对tomcat 7由于推出不久,笔者今天弄的时候,也在网上找了很多资料感觉都说得不好,或者不能解决问题,于是今天我们来讲这个。(下面Tomcat 均指Tomcat 7)</p>
|
||
<p>tomcat maven plugin 插件已经从codehaus 转到Tomcat官网了,以前的codehaus只支持tomcat 6.这里我们需要使用最新的<a target="_blank" rel="noopener" href="http://tomcat.apache.org/maven-plugin.html">tomcat maven plugin</a>. 该插件的pom为,即是在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><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">org.apache.tomcat.maven</span><br><span class="line">tomcat6-maven-plugin</span><br><span class="line">2.0-SNAPSHOT</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line">org.apache.tomcat.maven</span><br><span class="line">tomcat7-maven-plugin</span><br><span class="line">2.0-SNAPSHOT</span><br><span class="line"> </span><br><span class="line"> http://localhost:8080/manager/html</span><br><span class="line"> tomcat</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>这样写的目的是既支持tomcat 6 也支持tomcat 7.虽说这个插件是2.0-snapshot版本,不太稳定,不过我试的时候没有遇到任何问题,可以放心使用。(红色部分我们将在下面解释)</p>
|
||
<p>下面我们需要在插件仓库(plugin repositories)和普通仓库(repositories)中添加以下仓库到pom.xml:</p>
|
||
<p><strong>repository:</strong></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">people.apache.snapshots</span><br><span class="line">http://repository.apache.org/content/groups/snapshots-group/</span><br><span class="line"></span><br><span class="line"> false</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></pre></td></tr></table></figure>
|
||
|
||
<p><strong>plugin repository:</strong></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></pre></td><td class="code"><pre><span class="line">apache.snapshots</span><br><span class="line">Apache Snapshots</span><br><span class="line">http://repository.apache.org/content/groups/snapshots-group/</span><br><span class="line"></span><br><span class="line"> false</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></pre></td></tr></table></figure>
|
||
|
||
<p>这样做的目的是为了保证maven能够下载到maven tomcat plugin。而且是从上述的仓库。</p>
|
||
<p>为了成功执行maven 部署 我们需要开启tomcat支持 admin-script,manager-gui的权限。</p>
|
||
<p>admin-script:是让tomcat支持以脚本的形式来管理</p>
|
||
<p>manager-gui:是让tomcat支持图形化的管理界面。</p>
|
||
<p>打开tomcat的安装目录的 conf/tomcat-users.xml</p>
|
||
<p>添加以下内容:</p>
|
||
<figure class="highlight xml"><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>这里请自行改变用户名和密码。</p>
|
||
<p>接下来我们还需要配置一下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></pre></td><td class="code"><pre><span class="line"> </span><br><span class="line">tomcat</span><br><span class="line">admin</span><br><span class="line">admin</span><br><span class="line"> </span><br></pre></td></tr></table></figure>
|
||
|
||
<p>注意:这里的id需要和上面用醒目绿色标记的ID一致,用户名和密码需要和tomcat里面设置的用户名和密码相同。</p>
|
||
<p>这里在解释一下,上面红色部分的地址的是因为tomcat7中的部署地址变成了</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">http://localhost:8080/manager/html</span><br></pre></td></tr></table></figure>
|
||
|
||
<p>好了,配置我们就做好了,在部署之前,当然我们需要打开tomcat服务器。tomcat 7部署请使用命令:</p>
|
||
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mvn tomcat7:deploy</span><br></pre></td></tr></table></figure>
|
||
|
||
<p>在eclipse只需要在goal中填入 <strong>tomcat7:deploy</strong> 即可。<br>不出意外,应该就可以部署成功了。<br>童鞋们,试试吧。有什么疑问以及文中的缺点,请指出。谢谢。</p>
|
||
<p>如果出现以下错误,请按照本文章验证,就可以搞定了。</p>
|
||
<blockquote>
|
||
<p>Failed to execute goal org.codehaus.mojo:tomcat-maven-plugin:1.0:deploy (default-cli) on project my-webapp: Cannot invoke Tomcat manager: Server returned HTTP response code: 403 for URL:</p>
|
||
</blockquote>
|
||
|
||
|
||
</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/01/11/maven-study-case-one/">
|
||
|
||
<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/01/11/maven-study-case-one/" class="post-title-link" itemprop="url">Maven 学习入门 1</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-01-12 00:00:00" itemprop="dateCreated datePublished" datetime="2012-01-12T00:00:00+11:00">2012-01-12</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 20:47:21" itemprop="dateModified" datetime="2026-08-04T20:47:21+10:00">2026-08-04</time>
|
||
</span>
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</header>
|
||
|
||
|
||
|
||
|
||
<div class="post-body" itemprop="articleBody">
|
||
<p>Maven是一个项目构建工具,它不止可以用于Java,可能大家对Ant更加熟悉,个人感觉Maven相比Ant更加高级,功能也更加丰富,使用比较灵活的构建工具,maven还支持插件,当然也有机遇eclipse的插件m2e。现在还有maven的仓库软件nexus,以及更对可以对maven进行持续集成的服务器Hudson。对于Maven过多的讲解就不再这里提及,希望把这个日志作为一个maven学习的记录。下面我们就来一步一步安装并学习使用Maven:</p>
|
||
<p>首先下载并安装maven,进入<a target="_blank" rel="noopener" href="http://maven.apache.org/download.html">http://maven.apache.org/download.html</a> 下载Maven的已编译好的binary可运行版本。然后将这个压缩文件解压到一个指定目录,比如说D盘。我为了使用方便已经将maven后面的版本号去掉,因为我的文件夹目录为:</p>
|
||
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">D:maven</span><br></pre></td></tr></table></figure>
|
||
|
||
<p>请下载最新版本3.X版。3.X和2.X的版本有较大差别。</p>
|
||
<p>接下来我们需要做的是,配置环境变量:<strong>M2_HOME,</strong>其值为你解压的maven文件夹根目录,比如我的就是D:maven.</p>
|
||
<p>添加环境变量 <strong>M2</strong>,其值为%M2_HOME%bin目录。(注:所有配置均在windows下完成)</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">M2_HOME=D:maven;</span><br><span class="line"></span><br><span class="line">M2=%M2_HOME%bin;</span><br><span class="line">PATH=$M2:$PATH;</span><br></pre></td></tr></table></figure>
|
||
|
||
<p>保存并退出。然后打开命令行,输入以下命令:<strong>mvn –version</strong></p>
|
||
<p>如果出现类似于下面这些信息,即是安装成功了。</p>
|
||
<p><a href="/images/2012/01/111.png"><img src="/images/2012/01/111-300x78.png" title="111"></a></p>
|
||
<p>我们也可以通过命令行 <strong>mvn –help</strong>来查看maven 有哪些常用命令。</p>
|
||
<p>接下来我们对仓库的相关设置做一个简单设置,windows下默认地maven会自动将<strong>c:usersYOURNAE.m2repository</strong>作为仓库,用来存放下载的类库。个人不太喜欢各种这类东西安装在C盘,这样比较消耗资源。因此请将你的maven文件夹下面的 conf/settings.xml打开,找到:</p>
|
||
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">/path/to/local/repo</span><br></pre></td></tr></table></figure>
|
||
|
||
<p>并将其值改成你想要防止仓库的位置,个人建议放在maven程序下的repository目录下,并去掉该语句前后的注释。</p>
|
||
<p>紧接着,我们就来创建一个maven项目:</p>
|
||
<p>我们选择一步一步来创建项目,使用命令行切换到你需要创建项目的文件夹,在命令行输入:</p>
|
||
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mvn archetype:generate</span><br></pre></td></tr></table></figure>
|
||
|
||
<p>然后按照maven的提醒来输入相关信息.</p>
|
||
<p>大致解释一下相关属性:</p>
|
||
<p><strong>groupId</strong>:在一个项目或者组织中通常是唯一的标识符,一般以项目或者组织的网址来命名,例:info.junv.test</p>
|
||
<p><strong>artifactId</strong>:类似于给项目取个别名。例:first-app</p>
|
||
<p><strong>version</strong>:项目的版本号。例:1.0-snapshot</p>
|
||
<p><strong>package</strong>:为项目的包名,例:info.junv.test</p>
|
||
<p>当程序显示DUILD SUCCESS 时即表示,项目创建成功了,打开创建项目的文件夹就可以看到刚才创建的文件了。</p>
|
||
<p>源代码在first-app/src/main下面,first-app/src/test下为测试的相关代码。</p>
|
||
<p>并且在first-app代码的根目录下生成了pom.xml,该文件非常重要,里面包含程序的相关包依赖和仓库地址,以及其他项目任务等,这里不多讲。</p>
|
||
<p>下面执行有管项目的其他一些操作:(需要在命令行下进入该项目,例:cd fitst-app)</p>
|
||
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mvn package #执行项目打包操作,生成target文件夹,jar文件,以及其他相关文件夹</span><br></pre></td></tr></table></figure>
|
||
|
||
<p>下面是maven官方的一些其他命令,以及解释:</p>
|
||
<p>Although hardly a comprehensive list, these are the most common <em>default</em> lifecycle phases executed.</p>
|
||
<ul>
|
||
<li><strong>validate</strong>: validate the project is correct and all necessary information is available</li>
|
||
<li><strong>compile</strong>: compile the source code of the project</li>
|
||
<li><strong>test</strong>: test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed</li>
|
||
<li><strong>package</strong>: take the compiled code and package it in its distributable format, such as a JAR.</li>
|
||
<li><strong>integration-test</strong>: process and deploy the package if necessary into an environment where integration tests can be run</li>
|
||
<li><strong>verify</strong>: run any checks to verify the package is valid and meets quality criteria</li>
|
||
<li><strong>install</strong>: install the package into the local repository, for use as a dependency in other projects locally</li>
|
||
<li><strong>deploy</strong>: done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.</li>
|
||
</ul>
|
||
<p>There are two other Maven lifecycles of note beyond the <em>default</em> list above. They are</p>
|
||
<ul>
|
||
<li><strong>clean</strong>: cleans up artifacts created by prior builds</li>
|
||
<li><strong>site</strong>: generates site documentation for this project</li>
|
||
</ul>
|
||
<p> 如果需要将源代码编译后并打包:则需要使用package或者install。如果选择install,maven还会将该包存放至本地仓库。</p>
|
||
<p>上面这些都是生成普通的项目结构,其实我们平时使用最多的是eclipse项目。maven也可以生成eclipse项目结构。</p>
|
||
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mvn eclipse:eclipse </span><br></pre></td></tr></table></figure>
|
||
|
||
<p>为了删除eclipse的文件结构我们需要使用:</p>
|
||
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mvn eclipse:clean </span><br></pre></td></tr></table></figure>
|
||
|
||
<p>这样我们就可以在eclipse中导入maven生成的eclipse项目,最方便的还是在eclipse中安装maven 的eclipse插件m2e。</p>
|
||
<p>m2e下载地址:<a target="_blank" rel="noopener" href="http://download.eclipse.org/technology/m2e/releases/">http://download.eclipse.org/technology/m2e/releases/</a></p>
|
||
<p>好了,这就是maven的简单应用,希望下一次写pom.xml。</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/01/08/spring-osgi-hello-world1/">
|
||
|
||
<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/01/08/spring-osgi-hello-world1/" class="post-title-link" itemprop="url">Spring OSGI入门(1) Hello World</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-01-09 00:00:00" itemprop="dateCreated datePublished" datetime="2012-01-09T00:00:00+11:00">2012-01-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 20:47:21" itemprop="dateModified" datetime="2026-08-04T20:47:21+10:00">2026-08-04</time>
|
||
</span>
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</header>
|
||
|
||
|
||
|
||
|
||
<div class="post-body" itemprop="articleBody">
|
||
<p>什么是OSGI,他是一个动态组件、服务模型,简单得说就是在运行程序的时候,你可以动态安装、卸载、开始、停止服务。达到动态配置管理的功能,大大增加程序的灵活性。在Eclipse中就用到了OSGI,eclipse自带了一个osgi容器Equinox用来运行和管理OSGI相关的功能。</p>
|
||
<p>Spring osgi是springsource基于spring framework开发的OSGI框架,继承了spring的特性,当然使用spring osgi的时候也需要导入spring framwork,现在spring osgi 已经变成了Eclipse 的<a target="_blank" rel="noopener" href="http://www.eclipse.org/gemini/blueprint/">gemini blueprint</a>项目。由于本人也在学习之中,具体的细节我也不太清楚,希望与各位分享讨论。</p>
|
||
<p>这个实例文章,我们将运行一个简单的Spring osgi示例。首先我们需要建立一个项目用来提供Spring osgi运行相关的类库,我们采用maven来获取类库,maven的操作就不多讲了。这里只是涉及简单操作。</p>
|
||
<blockquote>
|
||
<p>这个程序我所用到的所有资源:</p>
|
||
<p>Eclipse 3.7</p>
|
||
<p>Java SDK 1.6</p>
|
||
<p>Maven 3.0、m2e插件</p>
|
||
<p>Spring framework 3.0 、spring source tool 插件</p>
|
||
<p>Spring osgi 1.2.1</p>
|
||
</blockquote>
|
||
<p>下面我们就开始一步一步的操作:</p>
|
||
<p>依次点击File–>New–>Project–>选中General下面的Project(建立常规项目)</p>
|
||
<p><a target="_blank" rel="noopener" href="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/2.png"><img src="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/2-300x285.png" title="2"></a>弹出新建项目对话框里面,在项目名称里面填入SpringDMTarget,点击Finish结束。</p>
|
||
<p>在项目根目录下创建一个target目录,并创建一个pom.xml文件,创建成功后,项目目录如下:</p>
|
||
<p><a target="_blank" rel="noopener" href="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/3.png"><img src="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/3.png" title="3"></a>由于pom文件里面的依赖关系很多,这里就不一一列出了。下面贴出源文件:</p>
|
||
<p><a target="_blank" rel="noopener" href="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/pom.txt">pom</a> (点击下载)</p>
|
||
<p>你需要做的就是改变其中一行,把它改成你的电脑的SpringDMTarget项目target的绝对路径:</p>
|
||
<blockquote>
|
||
<p><taget-platform.root>D:javaSpring-DM-Targettarget</taget-platform.root></p>
|
||
</blockquote>
|
||
<p>然后选中pom.xml右键点击run as –>Maven install 即可开始运行maven,如果本地没有需要的包,maven会自动下载。等待一段时间后(时间长短由网速快慢而定)。只要看到控制台显示** BUILD SUCCESS** 则表明maven 已经成功下载并将包复制到目标目录了。选中项目,右键点击refresh即可看到target目录下已经下载好了相关的包。</p>
|
||
<p><a target="_blank" rel="noopener" href="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/4.jpg"><img src="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/4-300x142.jpg" title="4"></a>接下来我们就需要配置运行环境了。依次点击Windows–>Preferences–>Plug in Development–>Target Platform 出现如下界面</p>
|
||
<p><a target="_blank" rel="noopener" href="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/5.png"><img src="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/5-261x300.png" title="5"></a>点击Add按钮,新建一个目标运行环境。选择Nothing:Start with an empty tarfget defination.点击Next,在这个对话框中Name属性行填入对运行环境的命名:我们就填Spring DM,点击右边的Add按钮,弹出Add Content对话框,</p>
|
||
<p><a target="_blank" rel="noopener" href="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/6.png"><img src="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/6-300x247.png" title="6"></a>选择Directory点击Next,在下页对话框点击Browse 从电脑中找到SpringDMTagret项目的target目录。完成后将看到,目录中的包已经全部导入了,点击Finish。选中我们新建的运行环境。</p>
|
||
<p><a target="_blank" rel="noopener" href="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/7.png"><img src="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/7-300x143.png" title="7"></a>点击OK保存修改。</p>
|
||
<p>然后配置我们的项目运行选项,我们需要以Osgi Framework形式运行。选中项目,邮件点击Run As–>Run configurations,进入页面</p>
|
||
<p><a target="_blank" rel="noopener" href="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/8.png"><img src="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/8-300x187.png" title="8"></a>选中 OSGI Framework,右键选择New ,我们可以看到系统已经默认将target platform中所有的包已经选中了。点击RUN,即可运行了。如果出现如下界面即说明运行成功了。</p>
|
||
<p><a target="_blank" rel="noopener" href="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/9.png"><img src="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/9-300x25.png" title="9"></a>你可以在eclipse 命名行中输入ss查看所有服务运行状态。</p>
|
||
<p><a target="_blank" rel="noopener" href="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/10.png"><img src="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/10-300x151.png" title="10"></a>大家也注意到了,上面的那两行红色的字,</p>
|
||
<blockquote>
|
||
</blockquote>
|
||
<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>他提示我们Log4j没有正确配置,下面我们将修复这个“Bug”,各位请看第二讲吧。</p>
|
||
<p><a target="_blank" rel="noopener" href="http://junv.sinaapp.com/?p=1869">Spring OSGI入门 Hello World(2) 处理Log4j “WARN No appenders could be found for logger”</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/01/08/spring-osgi-hello-world2-log4j-warn-no-appenders-could-be-found-for-logger/">
|
||
|
||
<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/01/08/spring-osgi-hello-world2-log4j-warn-no-appenders-could-be-found-for-logger/" class="post-title-link" itemprop="url">Spring OSGI入门(2) 处理Log4j “WARN No appenders could be found for logger”</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-01-09 00:00:00" itemprop="dateCreated datePublished" datetime="2012-01-09T00:00:00+11:00">2012-01-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 20:47:21" itemprop="dateModified" datetime="2026-08-04T20:47:21+10:00">2026-08-04</time>
|
||
</span>
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</header>
|
||
|
||
|
||
|
||
|
||
<div class="post-body" itemprop="articleBody">
|
||
<p>上一篇文章,我们讲到了Spring OSGI运行所需要的目标环境已经建好了,不过Log4j出现一个问题,提示我们:</p>
|
||
<blockquote>
|
||
<p>log4j:WARN No appenders could be found for logger (org.springframework.osgi.extender.internal.activator.ContextLoaderListener).<br>log4j:WARN Please initialize the log4j system properly.</p>
|
||
</blockquote>
|
||
<p>原因就是我们没有配置Log4j,导致log4j不能正常使用。下面我们就来处理这个问题。</p>
|
||
<p>打开Eclipse 依次点击File–>Project–>在对话框中选中Fragment Project 点击Next.在对话框中按如下进行配置:</p>
|
||
<p><a target="_blank" rel="noopener" href="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/11.png"><img src="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/11-245x300.png" title="11"></a>项目名称为:info.junv.osgi.log4j,在target platform中选中 an OSGI framework选中 equinox,点击Next:</p>
|
||
<p>在plug-in ID中选择<strong>com.springsource.org.apache.log4j</strong>,点击Finish,完成。</p>
|
||
<p>在项目src根目录下建立log4j.properties文件。项目结构层次如下:</p>
|
||
<p><a target="_blank" rel="noopener" href="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/13.png"><img src="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/13.png" title="13"></a>打开log4j.properties,粘贴入一下内容</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">log4j.rootLogger = INFO,FirstAppender</span><br><span class="line">log4j.appender.FirstAppender = org.apache.log4j.ConsoleAppender</span><br><span class="line">log4j.appender.FirstAppender.Threshold = INFO</span><br><span class="line">log4j.appender.FirstAppender.ImmediateFlush = true</span><br><span class="line">log4j.appender.FirstAppender.Target = System.out</span><br><span class="line">log4j.appender.FirstAppender.layout = org.apache.log4j.PatternLayout</span><br><span class="line">log4j.appender.FirstAppender.layout.ConversionPattern = [%x]-%p-%d{yyyy-MM-dd HH:mm:ss}-%m[%c]%n</span><br></pre></td></tr></table></figure>
|
||
|
||
<p>添加点击点击当前项目或者,前面我们写的SpringDMTarget项目,右键选择Run As–>Run Configurations–>OSGI framework(去掉其余所有多于的项目,保证只剩下我们之前导入的包已经当前这个log4j项目。)<br>同时需要注意的是,为了让程序顺利运行,需要优先启动…osgi.web.extender,这里我们需要将其的start level设置成4以上(因为默认启动等级为4,为了使其优先启动,所以优先级应大于4,笔者在自己电脑上将优先级设成5依然不行,因为建议如果不行,可以将优先级设得大一些,这里我设置为10,运行成功),</p>
|
||
<p><a target="_blank" rel="noopener" href="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/15.png"><img src="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/15-300x187.png" title="15"></a></p>
|
||
<p>点击RUN。即可以运行。</p>
|
||
<p><a target="_blank" rel="noopener" href="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/14.png"><img src="http://junv-wordpress.stor.sinaapp.com/uploads/2012/01/14-300x93.png" title="14"></a>如果…osgi.web.webextender的优先级不够,将会出现如下错误:</p>
|
||
<p>No Catalina Service found, bailing out[org.springframework.osgi.web.deployer.tomcat.TomcatWarDeployer</p>
|
||
<p>…….</p>
|
||
<p>出现这个错误你需要做的是,将osgi.web.webextender组件的启动优先级别再调高一些。即可。</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/2011/12/29/nexus-cant-run-under-jdk-1-7/">
|
||
|
||
<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="/2011/12/29/nexus-cant-run-under-jdk-1-7/" class="post-title-link" itemprop="url">Nexus 1.9 在JDK 1.7下不能安装运行</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="创建时间:2011-12-30 00:00:00" itemprop="dateCreated datePublished" datetime="2011-12-30T00:00:00+11:00">2011-12-30</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 20:47:21" itemprop="dateModified" datetime="2026-08-04T20:47:21+10:00">2026-08-04</time>
|
||
</span>
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</header>
|
||
|
||
|
||
|
||
|
||
<div class="post-body" itemprop="articleBody">
|
||
<p>Nexus 是一个Maven仓库管理软件,或者叫做Maven包管理软件。一般用于企业内部当做自己的maven仓库,同时也可以对他做一些配置用来优化内部仓库和外部仓库中间的访问等等。如果需要详细了解Nexus和MAVEN相关信息,这里有一篇文章写得比较好 <a target="_blank" rel="noopener" href="http://blog.csdn.net/cuker919/article/details/5922007">MAVEN仓库管理(穿越吧)</a>。</p>
|
||
<p>笔者昨天安装Nexus的时候,一直没有成功,不论是通过Nexus自带Jetty服务器,还是通过Tomcat 安装WAR程序都不行。经查看日志文件,发现如下错误:</p>
|
||
<blockquote>
|
||
<p>jvm 1 | 2011-12-29 22:59:40 WARN [er_start_runner] -<br>org.sonatype.security.configuration.source.FileSecurityConfigurationSource -<br>No configuration file in place, copying the default one and continuing with it.</p>
|
||
</blockquote>
|
||
<p>后面我反编译异常里面的class文件。发现原来由于Nexus 没有按照要求生成nexus.xml配置文件,于是他就停止工作了。我尝试将class里面的xml文件拷到相关目录,并命名为nexus.xml,不行。后面检查tmp目录,发现有nexus.xxxxxxx.xml。更加使我确信了。是配置文件的错误。</p>
|
||
<p>哎。后面所做的工作,就不必多讲了,总之我弄到凌晨1点也没有解决。</p>
|
||
<p>今天来在同学电脑上安装测试,可行,在老师电脑电脑上安装测试也可行。他们的电脑都使用的是JDK 1.6,我把JAVA_HOME改成1.6在Tomcat下测试也可行,但是使用Jetty还是不行。这个不难解释,Tomcat调用的是JAVA_HOME的JDK而程序自带的Jetty调用的是JRE,而我的JRE是1.7。</p>
|
||
<p>现在真相大白了,是程序不支持Java JDK 1.7.</p>
|
||
<p>需要值得提一下的是我在JDK 1.7下面测试过1.9 和1.9.2.4 两个版本都是不行的。</p>
|
||
<p>刚才也向他们官网提交了这个bug,第一次提交bug哦!</p>
|
||
<p><a target="_blank" rel="noopener" href="http://junv-wordpress.stor.sinaapp.com/uploads/2011/12/psb.png"><img src="http://junv-wordpress.stor.sinaapp.com/uploads/2011/12/psb-300x140.png" title="psb"></a>安装Nexus 成功之后,你应该是可以看到这样的画面:</p>
|
||
<p><a target="_blank" rel="noopener" href="http://junv-wordpress.stor.sinaapp.com/uploads/2011/12/sasd.png"><img src="http://junv-wordpress.stor.sinaapp.com/uploads/2011/12/sasd-300x131.png" title="sasd"></a>期待下一篇文章将OSGI或者MAVEN!!!!加油</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/2011/12/20/java-single-sign-on/">
|
||
|
||
<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="/2011/12/20/java-single-sign-on/" class="post-title-link" itemprop="url">Java实现单一账号某时刻单一登录</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="创建时间:2011-12-21 00:00:00" itemprop="dateCreated datePublished" datetime="2011-12-21T00:00:00+11:00">2011-12-21</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 20:47:21" itemprop="dateModified" datetime="2026-08-04T20:47:21+10:00">2026-08-04</time>
|
||
</span>
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</header>
|
||
|
||
|
||
|
||
|
||
<div class="post-body" itemprop="articleBody">
|
||
<p>原谅我使用如此晦涩的词语来表达我的意思,其实我想表达的意思的用java实现类似于当其他人登录你的QQ时,你会收到“你的账号已在其他地方登录,请重新登录。”这样的东西,简单的说就是同一时刻一账号只允许一个人登录在线状态。也许就是保证时间、空间上的唯一性。但是我想强调的是这种效果绝不是单点登录,真正的单点登录是类似于Google中,使用多个产品只需要登录一次,其实QQ也有这样的功能。好了,废话少说下面说正经的。</p>
|
||
<p>我们最常用的用来验证用户使用登录的东西是Session,但是session并不能达到我们想要的效果,因为每个客户端访问网站的时候都会获得一个session,因此虽然是同一个账号登录系统,只要用户使用的浏览器,服务器都会产生两个session。但是每个客户端访问服务器的服务器的时候都会产生一个SessionId,而这个ID这是唯一的,我们会在后面用到。这里我们使用使用Application 域,在Java EE里面是ServletContext。这个东西是一个全局变量,当Web 程序运行的时候便会一直存在。而且整个程序只有一个Application.</p>
|
||
<p>于是我们可以这样。我们将数据存入Application中。而存入的内容则是:键(key)为当前用户使用用户名或者其他一个可以识别用户身份信息的ID,而值(value)则是用户得到的sessionID。这样便保证了一个账号同时至于一个用户对应。在用户登录的时候想Application中写入 key:value信息,在以后用户每次请求数据的时候,进行验证。看Application中的SessionID与用户本身的SessionID是否一致,不一致则说明多人登录。</p>
|
||
<p>下面是代码了:(我感觉说了好多废话)</p>
|
||
<p>首先获取Application:</p>
|
||
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">HttpSession</span> <span class="variable">session</span> <span class="operator">=</span> request.getSession(); <span class="comment">//request为HttpServletRequest对象</span></span><br><span class="line"> <span class="type">ServletContext</span> <span class="variable">application</span> <span class="operator">=</span> session.getServletContext();</span><br></pre></td></tr></table></figure>
|
||
|
||
<p>向其中存入我们的验证数据,这里键为用户ID,值为该用户实例获得的sessionID</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">application.setAttribute(userId, session.getId());<span class="comment">//userID为用户ID,</span></span><br></pre></td></tr></table></figure>
|
||
|
||
<p>在每次验证的时候,在java里面我们可以采用至少两种方法,一种是Filter(Servlet 过滤器)、另外一种则是Spring AOC 面向切面编程,这里由于我对Spring AOC还不太熟悉,所以就用Filter,Filter具体设置,编写都不说了,只说一些怎么处理。拿到一个客户端来的请求,就进行sessionID比较,如果相同就让请求继续,如果不相同,就将该请求所对于的session清空(如果采用session验证用户是否登录,就可以达到让该用户退出登录),并给出提示信息,跳转到登录页面。</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></pre></td><td class="code"><pre><span class="line"><span class="comment">//获取application对象</span></span><br><span class="line"> <span class="type">ServletContext</span> <span class="variable">application</span> <span class="operator">=</span> session.getServletContext();</span><br><span class="line"> <span class="type">String</span> <span class="variable">sessionId</span> <span class="operator">=</span> (String) application.getAttribute(userid);</span><br><span class="line"> <span class="type">String</span> <span class="variable">trueSessionId</span> <span class="operator">=</span> session.getId();</span><br><span class="line"> System.out.println(<span class="string">"sessionID====="</span>+sessionId+<span class="string">"现在的sessionID"</span>+trueSessionId);</span><br><span class="line"> <span class="keyword">if</span>(sessionId.equals(trueSessionId)){</span><br><span class="line"> <span class="comment">//do nothing</span></span><br><span class="line"> }<span class="keyword">else</span>{</span><br><span class="line"> <span class="comment">//说明有多个用户登录,去掉其session</span></span><br><span class="line"> session.removeAttribute(sessionKey);</span><br><span class="line"> <span class="comment">//response.sendRedirect(request.getContextPath() + redirectURL);</span></span><br><span class="line"> response.setContentType(<span class="string">"text/html;charset=utf-8"</span>);</span><br><span class="line"> <span class="type">PrintWriter</span> <span class="variable">out</span> <span class="operator">=</span> response.getWriter();</span><br><span class="line"> out.println(MyTools.getAlertMessage(request.getContextPath(), <span class="string">"您的账户已在别处登录,请重新登录"</span>, <span class="number">3</span>));</span><br><span class="line"> <span class="keyword">return</span>;</span><br><span class="line"> }</span><br></pre></td></tr></table></figure>
|
||
|
||
<p>这里可以使用sendRedirect,将用户直接跳转到某个页面,但是这样不太友好,因为没有提示信息,我选择另外一个使用response给用户一些提示信息,然后设置一段时间后跳转到另外的页面。这就是我写的一个静态方法 getAlertMessage,下面贴出具体代码吧。</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="comment">/**</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="comment"> * <span class="doctag">@param</span> path</span></span><br><span class="line"><span class="comment"> * 系统根目录</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param</span> content</span></span><br><span class="line"><span class="comment"> * 需要显示的内容</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param</span> second</span></span><br><span class="line"><span class="comment"> * 需要停留消息的秒数</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return</span> String</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"> <span class="keyword">public</span> <span class="keyword">static</span> String <span class="title function_">getAlertMessage</span><span class="params">(String path, String content, <span class="type">int</span> second)</span> {</span><br><span class="line"> <span class="type">StringBuilder</span> <span class="variable">sb</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">StringBuilder</span>();</span><br><span class="line"> sb.append(<span class="string">""</span>);</span><br><span class="line"> sb.append(<span class="string">""</span>);</span><br><span class="line"> sb.append(<span class="string">""</span>);</span><br><span class="line"> sb.append(<span class="string">""</span>);</span><br><span class="line"> sb.append(<span class="string">""</span>);</span><br><span class="line"> sb.append(<span class="string">""</span></span><br><span class="line"> + content</span><br><span class="line"> + <span class="string">","</span></span><br><span class="line"> + second</span><br><span class="line"> + <span class="string">"秒后你将跳转到登录页面"</span>);</span><br><span class="line"> sb.append(<span class="string">""</span>);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> sb.toString();</span><br><span class="line"></span><br><span class="line"> }</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/2011/11/28/spring-hibernate-db-too-many-connection/">
|
||
|
||
<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="/2011/11/28/spring-hibernate-db-too-many-connection/" class="post-title-link" itemprop="url">解决Spring 管理Hibernate执行数据库操作出现“too many connection”的错误</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="创建时间:2011-11-29 00:00:00" itemprop="dateCreated datePublished" datetime="2011-11-29T00:00:00+11:00">2011-11-29</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 20:47:21" itemprop="dateModified" datetime="2026-08-04T20:47:21+10:00">2026-08-04</time>
|
||
</span>
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</header>
|
||
|
||
|
||
|
||
|
||
<div class="post-body" itemprop="articleBody">
|
||
<p>随着代码的不断深入,出现了一些意想不到的错误.如上面所写。</p>
|
||
<p>mysql数据库报出了can’t open connection , …….. too many connection 等等错误。</p>
|
||
<p>但是我使用的是Spring 管理Hibernate执行相关操作。我们都知道Spring 在执行Hibernate相关操作完成时会自动关闭连接。 比如执行这样的操作:this.getHibernateTemplate().update(msg);</p>
|
||
<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></pre></td><td class="code"><pre><span class="line"><span class="type">Session</span> <span class="variable">mySession</span> <span class="operator">=</span> getSession();</span><br><span class="line"> <span class="type">Query</span> <span class="variable">query</span> <span class="operator">=</span> mySession.createQuery(hql);</span><br><span class="line"> query.setFirstResult(start);</span><br><span class="line"> query.setMaxResults(count);</span><br><span class="line"> <span class="meta">@SuppressWarnings("unchecked")</span></span><br><span class="line"> <span class="type">List</span> <span class="variable">msgs</span> <span class="operator">=</span> query.list();</span><br><span class="line"> mySession.close();</span><br></pre></td></tr></table></figure>
|
||
|
||
<p>需要自己关闭Session.我关闭了Session之后,Hibnerate一次可以执行超过8次的链接。但是,一旦频繁请求时依然会出现文首的错误。<br>这是为什么呢?<br>大致是这样的,Session 上面还有一个SessionFactory,而SessionFactory是负责管理Session的。我们虽然调用了 session.close()<br>但是没有真正关闭该Session,为了彻底关闭该Session交出使用权,我们需要使用</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"><span class="built_in">this</span>.getSessionFactory().close();<span class="comment">//关闭sessionFactory</span></span><br></pre></td></tr></table></figure>
|
||
|
||
<p>这样就彻底关闭该Session了。<br>好了,现在程序性能提升不少了,我在自己电脑上至少是已经不能刷爆程序了。<br>如果说得哪里不对,请指正,因为本人也在学习之中!</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/2011/11/27/solve-ie-addeventlistener/">
|
||
|
||
<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="/2011/11/27/solve-ie-addeventlistener/" class="post-title-link" itemprop="url">解决IE不兼容addEventListener</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="创建时间:2011-11-28 00:00:00" itemprop="dateCreated datePublished" datetime="2011-11-28T00:00:00+11:00">2011-11-28</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 20:47:21" itemprop="dateModified" datetime="2026-08-04T20:47:21+10:00">2026-08-04</time>
|
||
</span>
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</header>
|
||
|
||
|
||
|
||
|
||
<div class="post-body" itemprop="articleBody">
|
||
<p>OH,IE太多不爽了,js有一些不能兼容。addEventLister就是一个。还好现在IE9已经支持addEventListener了。</p>
|
||
<p>在IE里面使用的是attachEvent().,比如同样地绑定一个事件。在IE下面和其他非IE内核下面就是这样的:</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">attachEvent('click',myfunction); //第一个参数为需要绑定的动作,第二个参数为绑定的事件,这是在IE下面</span><br><span class="line"></span><br><span class="line">addEventListener('click',myfunction,false); //前两个参数与attachEvent一样,第三个参数为异步还是同步调用,false为异步。而我们通常选择false.</span><br></pre></td></tr></table></figure>
|
||
|
||
<p>我们可以采用下面的方法实现兼容IE浏览器。如果某个对象节点支持addEventListener()方法。则使用该方法,如果不支持该方法,说嘛浏览器为IE,则调用attachEvent()方法。</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">if(tr.addEventListener){</span><br><span class="line"> tr.addEventListener("click", handleCheckboxClick, false);</span><br><span class="line"> }else{</span><br><span class="line"> tr.attachEvent("click",handleCheckboxClick);</span><br><span class="line"> } //tr为对象节点。</span><br></pre></td></tr></table></figure>
|
||
|
||
<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>
|
||
|
||
|
||
</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/6/"><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/6/">6</a><span class="page-number current">7</span><a class="page-number" href="/page/8/">8</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/8/"><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>
|