﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-火星中转站</title><link>http://www.blogjava.net/martian/</link><description>下一站 --- 火星
</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 12:23:39 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 12:23:39 GMT</pubDate><ttl>60</ttl><item><title>架构、框架</title><link>http://www.blogjava.net/martian/archive/2009/08/06/290008.html</link><dc:creator> Martian  </dc:creator><author> Martian  </author><pubDate>Wed, 05 Aug 2009 16:02:00 GMT</pubDate><guid>http://www.blogjava.net/martian/archive/2009/08/06/290008.html</guid><wfw:comment>http://www.blogjava.net/martian/comments/290008.html</wfw:comment><comments>http://www.blogjava.net/martian/archive/2009/08/06/290008.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/martian/comments/commentRss/290008.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/martian/services/trackbacks/290008.html</trackback:ping><description><![CDATA[<strong>软件架构</strong>是有关软件整体结构与组件的抽象描述，用于指导大型软件系统各个方面的设计。软件体系结构是构建计算机软件实践的基础。<br />
<br />
软件架构是一个系统的草图, 描述直接构成系统的抽象组件对象，各个组件之间的连接则明确和相对细致地描述组件之间的通讯。<br />
<br />
在实现阶段，这些抽象组件被细化为实际的组件，比如具体某个类或者对象。在面向对象领域中，组件之间的连接通常用接口来实现。<br />
<br />
软件架构师通常需要有广泛的软件理论知识和相应的经验来事实和管理软件产品的高级设计。软件架构师定义和设计软件的模块化，模块之间的交互，用户界面风格，对外接口方法，创新的设计特性，以及高层事物的对象操作、逻辑和流程。陈述软件构架以作为满足不同客户需求的实际系统设计方案的基础。<br />
<br />
<br />
<strong>框架</strong>通常指的是为实现某个业界标准或完成特定基本任务的软件组件规范，也指实现了某个软件组件规范，提供规范所要求的基础功能的软件产品。<br />
框架的功能类似于基础设施，与具体的软件应用无关，但是提供并实现最为基础的<strong>软件架构</strong>和体系。软件开发者通常依据特定的框架实现更为复杂的商业运用和业务逻辑。这样的软件应用可以在支持同一中框架的软件系统中运行。<br />
<img src ="http://www.blogjava.net/martian/aggbug/290008.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/martian/" target="_blank"> Martian  </a> 2009-08-06 00:02 <a href="http://www.blogjava.net/martian/archive/2009/08/06/290008.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修改maven的默认目录结构</title><link>http://www.blogjava.net/martian/archive/2009/08/04/289729.html</link><dc:creator> Martian  </dc:creator><author> Martian  </author><pubDate>Tue, 04 Aug 2009 03:24:00 GMT</pubDate><guid>http://www.blogjava.net/martian/archive/2009/08/04/289729.html</guid><wfw:comment>http://www.blogjava.net/martian/comments/289729.html</wfw:comment><comments>http://www.blogjava.net/martian/archive/2009/08/04/289729.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/martian/comments/commentRss/289729.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/martian/services/trackbacks/289729.html</trackback:ping><description><![CDATA[在使用maven构建项目的时候，maven使用了它自己的结构：<span><span><br />
src<br />
&nbsp; |-main<br />
&nbsp; |&nbsp; |- java<br />
</span></span><span>&nbsp; |&nbsp; |- resource<br />
&nbsp;&nbsp;&nbsp;&nbsp; |- webapp<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |- WEB-INF<br />
<br />
但如果使用wtp dyna web project的时候，生成的目录结构则与此不同，在使用一些maven插件，如mvn war:inplace的时候，maven代仍为按照自身默认的结构来拷贝相应的jar包到lib目录下。为了使maven能够符合自己定义的目录结构，则需要使用一些插件来定制,下面给出一个符合WTP目录结构的pom.xml配置文件：<br />
</span><br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">project&nbsp;</span><span style="color: #ff0000;">xmlns</span><span style="color: #0000ff;">="http://maven.apache.org/POM/4.0.0"</span><span style="color: #ff0000;">&nbsp;xmlns:xsi</span><span style="color: #0000ff;">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000;"><br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000ff;">="http://maven.apache.org/POM/4.0.0&nbsp;http://maven.apache.org/maven-v4_0_0.xsd"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">modelVersion</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">4.0.0</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">modelVersion</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">cust_project</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">cust_project</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">packaging</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">war</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">packaging</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">0.0.1-SNAPSHOT</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">build</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">plugins</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">plugin</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">org.apache.maven.plugins</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">maven-compiler-plugin</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">configuration</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">source</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">1.5</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">source</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">target</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">1.5</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">target</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">encoding</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">UTF-8</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">encoding</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">configuration</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">plugin</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">plugin</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">org.codehaus.mojo</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">build-helper-maven-plugin</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">1.1</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">executions</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">execution</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">id</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">add-source</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">id</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">phase</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">generate-sources</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">phase</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">goals</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">goal</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">add-source</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">goal</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">goals</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">configuration</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">sources</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">source</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">src/java</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">source</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">source</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">src/resources</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">source</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">sources</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">configuration</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">execution</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">executions</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">plugin</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">plugin</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">org.apache.maven.plugins</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">maven-war-plugin</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">configuration</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;设置WebContent目录为Web目录&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">warSourceDirectory</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">WebContent</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">warSourceDirectory</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">configuration</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">46</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">plugin</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">47</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">plugins</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">48</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">outputDirectory</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">WebContent/WEB-INF/classes</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">outputDirectory</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">49</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">build</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">50</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">dependencies</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">51</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">52</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">53</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">dependencies</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">54</span>&nbsp;<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">project</span><span style="color: #0000ff;">&gt;</span></div>
<br />
<br />
<img src ="http://www.blogjava.net/martian/aggbug/289729.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/martian/" target="_blank"> Martian  </a> 2009-08-04 11:24 <a href="http://www.blogjava.net/martian/archive/2009/08/04/289729.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring发送电子邮件</title><link>http://www.blogjava.net/martian/archive/2009/05/31/279300.html</link><dc:creator> Martian  </dc:creator><author> Martian  </author><pubDate>Sun, 31 May 2009 14:23:00 GMT</pubDate><guid>http://www.blogjava.net/martian/archive/2009/05/31/279300.html</guid><description><![CDATA[Spring提供了发送电子邮件的功能，它向用户屏蔽了底层邮件系统的一些细节，同时代表客户端负责底层的资源处理。<br />
Spring的邮件服务支持主要是通过JavaMailSender这个接口实现的：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;JavaMailSender&nbsp;</span><span style="color: #0000ff;">extends</span><span style="color: #000000;">&nbsp;MailSender&nbsp;{</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;MimeMessage&nbsp;createMimeMessage();</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;MimeMessage&nbsp;createMimeMessage(InputStream&nbsp;contentStream)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;MailException;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;send(MimeMessage&nbsp;mimeMessage)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;MailException;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;send(MimeMessage[]&nbsp;mimeMessages)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;MailException;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;send(MimeMessagePreparator&nbsp;mimeMessagePreparator)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;MailException;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;send(MimeMessagePreparator[]&nbsp;mimeMessagePreparators)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;MailException;<br />
<br />
}</span></div>
<br />
这是JavaMailSender的接口源代码(去除注释),可以看到，主要提供了createMimeMessage和send两个方法。createMimeMessage方法主要是用来创建JavaMail的MIME信件，而send则是发送电子邮件的主要方法。<br />
Spring中提供了JavaMailSender的简单实现：org.springframework.mail.javamail.JavaMailSenderImpl。在JavaMailSendImpl这个类中，实现了<span style="color: #000000;">JavaMailSender中定义的方法的具体实现。而众所周知，Spring是核心的功能是IOC，所以通过Spring来发送电子邮件，就可以使用Spring强大的IOC功能，下面就来看一下，怎么样在Spring中发送邮件：<br />
1. Spring配置文件，主要配置mailSender和对velocity的支持<br />
</span>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">beans&nbsp;</span><span style="color: #ff0000;">xmlns</span><span style="color: #0000ff;">="http://www.springframework.org/schema/beans"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000ff;">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000ff;">="http://www.springframework.org/schema/beans&nbsp;http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;default-lazy-init</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;default-autowire</span><span style="color: #0000ff;">="byName"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;属性文件加载,&nbsp;加载邮件设置属性文件&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">bean&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="propertyConfigurer"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000ff;">="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="locations"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">list</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">value</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">classpath:mail.properties</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">value</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">list</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">property</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">bean</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">bean&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="mailEngine"</span><span style="color: #ff0000;">&nbsp;class</span><span style="color: #0000ff;">="org.example.mailer.MailEngine"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="javaMailSender"</span><span style="color: #ff0000;">&nbsp;ref</span><span style="color: #0000ff;">="javaMailSender"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="velocityEngine"</span><span style="color: #ff0000;">&nbsp;ref</span><span style="color: #0000ff;">="velocityEngine"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">bean</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">bean&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="velocityEngine"</span><span style="color: #ff0000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000ff;">="org.springframework.ui.velocity.VelocityEngineFactoryBean"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="resourceLoaderPath"</span><span style="color: #ff0000;">&nbsp;value</span><span style="color: #0000ff;">="classpath:velocity"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">bean</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;邮件发送器&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">bean&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="javaMailSender"</span><span style="color: #ff0000;">&nbsp;class</span><span style="color: #0000ff;">="org.springframework.mail.javamail.JavaMailSenderImpl"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="host"</span><span style="color: #ff0000;">&nbsp;value</span><span style="color: #0000ff;">="${mail.host}"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="username"</span><span style="color: #ff0000;">&nbsp;value</span><span style="color: #0000ff;">="${mail.username}"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="password"</span><span style="color: #ff0000;">&nbsp;value</span><span style="color: #0000ff;">="${mail.password}"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="defaultEncoding"</span><span style="color: #ff0000;">&nbsp;value</span><span style="color: #0000ff;">="UTF-8"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">property</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="javaMailProperties"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">props</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">prop&nbsp;</span><span style="color: #ff0000;">key</span><span style="color: #0000ff;">="mail.smtp.auth"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">${mail.smtp.auth}</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">prop</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">prop&nbsp;</span><span style="color: #ff0000;">key</span><span style="color: #0000ff;">="mail.smtp.timeout"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">${mail.smtp.timeout}</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">prop</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">props</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">property</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">bean</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">beans</span><span style="color: #0000ff;">&gt;</span></div>
<br />
<span style="color: #000000;">在这个配置文件中，通过</span><span style="color: #0000ff;">propertyConfigurer<span style="color: #000000;">这个bean</span></span>加载了邮件的配置文件：mail.properties，这个文件主要定义一些邮件服务的属性(使用的时候根据自己的要求进行相应的配置，这里以126的smtp服务为例):<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">mail.from</span><span style="color: #000000;">=</span><span style="color: #000000;"><br />
mail.host</span><span style="color: #000000;">=</span><span style="color: #000000;">smtp.</span><span style="color: #000000;">126</span><span style="color: #000000;">.com<br />
mail.username</span><span style="color: #000000;">=</span><span style="color: #000000;"><br />
mail.password</span><span style="color: #000000;">=</span><span style="color: #000000;"><br />
<br />
mail.smtp.auth</span><span style="color: #000000;">=</span><span style="color: #0000ff;">true</span><span style="color: #000000;"><br />
mail.smtp.timeout</span><span style="color: #000000;">=</span><span style="color: #000000;">25000</span></div>
<br />
下面来看一下<span style="color: #0000ff;">MailEngine</span>的实现：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;org.example.mailer;<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.Map;<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;javax.mail.MessagingException;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;javax.mail.internet.MimeMessage;<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.commons.logging.Log;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.commons.logging.LogFactory;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.velocity.app.VelocityEngine;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.apache.velocity.exception.VelocityException;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.springframework.beans.factory.BeanFactory;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.springframework.context.support.ClassPathXmlApplicationContext;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.springframework.mail.MailException;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.springframework.mail.javamail.JavaMailSender;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.springframework.mail.javamail.MimeMessageHelper;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;org.springframework.ui.velocity.VelocityEngineUtils;<br />
<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;MailEngine&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">protected</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;Log&nbsp;logger&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;LogFactory.getLog(getClass());<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;JavaMailSender&nbsp;javaMailSender;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;VelocityEngine&nbsp;velocityEngine;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setJavaMailSender(JavaMailSender&nbsp;javaMailSender)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.javaMailSender&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;javaMailSender;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setVelocityEngine(VelocityEngine&nbsp;velocityEngine)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.velocityEngine&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;velocityEngine;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;sendMailWithVelocity()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MimeMessage&nbsp;msg&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;javaMailSender.createMimeMessage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MimeMessageHelper&nbsp;helper&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;MimeMessageHelper(msg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&nbsp;model&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;VelocityEngineUtils.mergeTemplateIntoString(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;velocityEngine,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">sendMail.vm</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">UTF-8</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;model);</span><span style="color: #008000;">//</span><span style="color: #008000;">UTF-8为模板文件的字符编码</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helper.setFrom(</span><span style="color: #000000;">"</span><span style="color: #000000;">邮件发送者</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helper.setSubject(</span><span style="color: #000000;">"</span><span style="color: #000000;">测试Spring邮件</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helper.setTo(</span><span style="color: #000000;">"</span><span style="color: #000000;">邮件接收者</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helper.setText(result);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;javaMailSender.send(msg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(VelocityException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.error(e.getMessage());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(MessagingException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;senaMail()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MimeMessage&nbsp;msg&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;javaMailSender.createMimeMessage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MimeMessageHelper&nbsp;helper&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;MimeMessageHelper(msg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helper.setFrom(</span><span style="color: #000000;">"</span><span style="color: #000000;">邮件发送者</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helper.setSubject(</span><span style="color: #000000;">"</span><span style="color: #000000;">邮件内容</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helper.setTo(</span><span style="color: #000000;">"</span><span style="color: #000000;">邮件接收者</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helper.setText(</span><span style="color: #000000;">"</span><span style="color: #000000;">test&nbsp;spring&nbsp;mailer</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;如果发的不是html内容去掉true参数</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;javaMailSender.send(msg);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(MessagingException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO&nbsp;自动生成&nbsp;catch&nbsp;块</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(logger.isWarnEnabled())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.warn(</span><span style="color: #000000;">"</span><span style="color: #000000;">邮件信息导常!&nbsp;邮件标题为:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;e.printStackTrace();</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(MailException&nbsp;me)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO:&nbsp;handle&nbsp;exception</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(logger.isWarnEnabled())&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.warn(</span><span style="color: #000000;">"</span><span style="color: #000000;">发送邮件失败!&nbsp;邮件标题为:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BeanFactory&nbsp;bf&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ClassPathXmlApplicationContext(</span><span style="color: #000000;">"</span><span style="color: #000000;">beans.xml</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MailEngine&nbsp;mailEngine&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(MailEngine)&nbsp;bf.getBean(</span><span style="color: #000000;">"</span><span style="color: #000000;">mailEngine</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;mailEngine.senaMail();</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mailEngine.sendMailWithVelocity();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</span></div>
<br />
<span style="color: #000000;">sendMailWithVelocity方法主要是使用Velocity模板文件来发送邮件，Velocity模板文件定义了邮件的内容,模板文件的位置由</span><span style="color: #0000ff;">resourceLoaderPath</span>指定，本例则在classpath下的velocity下，如果是web项目，则位于/WEB-INF/classes/veloticy/目录下。<br />
<span style="color: #000000;"><br />
</span>执行main方法，就可以发送邮件了。<br />
<br />
<img src ="http://www.blogjava.net/martian/aggbug/279300.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/martian/" target="_blank"> Martian  </a> 2009-05-31 22:23 <a href="http://www.blogjava.net/martian/archive/2009/05/31/279300.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rails中namespace的layout</title><link>http://www.blogjava.net/martian/archive/2009/04/15/265686.html</link><dc:creator> Martian  </dc:creator><author> Martian  </author><pubDate>Wed, 15 Apr 2009 02:57:00 GMT</pubDate><guid>http://www.blogjava.net/martian/archive/2009/04/15/265686.html</guid><wfw:comment>http://www.blogjava.net/martian/comments/265686.html</wfw:comment><comments>http://www.blogjava.net/martian/archive/2009/04/15/265686.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/martian/comments/commentRss/265686.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/martian/services/trackbacks/265686.html</trackback:ping><description><![CDATA[在rails中提供了namespace的功能，但是如何实现namespace的layout呢？<br />
假如这样一个场景：<br />
routes.rb中这样定义:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">map.namespace&nbsp;:admin&nbsp;</span><span style="color: #0000ff;">do</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">|</span><span style="color: #000000;">admin</span><span style="color: #000000;">|</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;admin.resources&nbsp;:articles<br />
&nbsp;&nbsp;&nbsp; admin.resources :tags<br />
end</span></div>
<br />
需要对articles,tags提供一个统一的后台管理界面，根据rails中的layout功能，猜想是否会有layouts/admin.html.erb这样一个针对namespace的模板页，但尝试后发现根据不行，下面是google到的一个问题：<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">Do&nbsp;controllers&nbsp;in&nbsp;namespaces&nbsp;somehow&nbsp;get&nbsp;their&nbsp;own&nbsp;</span><span style="color: #0000ff;">default</span><span style="color: #000000;">&nbsp;layout<br />
file</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;&nbsp;For&nbsp;instance,&nbsp;the&nbsp;UsersController&nbsp;will&nbsp;use&nbsp;layouts</span><span style="color: #000000;">/</span><span style="color: #000000;">users.rhtml<br />
</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;it&nbsp;exists.&nbsp;&nbsp;Is&nbsp;there&nbsp;something&nbsp;similar&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;Admin::UsersController<br />
or&nbsp;will&nbsp;it&nbsp;</span><span style="color: #0000ff;">default</span><span style="color: #000000;">&nbsp;to&nbsp;the&nbsp;same&nbsp;file</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;&nbsp;I&nbsp;tried&nbsp;layouts</span><span style="color: #000000;">/</span><span style="color: #000000;"><br />
admin_users.rhtml&nbsp;and&nbsp;layouts</span><span style="color: #000000;">/</span><span style="color: #000000;">admin</span><span style="color: #000000;">/</span><span style="color: #000000;">users.rhtml&nbsp;with&nbsp;no&nbsp;luck. <br />
</span></div>
<br />
他也尝试了同样的问题，<span style="color: #000000;">layouts</span><span style="color: #000000;">/</span><span style="color: #000000;">users.rhtml, layouts/admin_users.rhtml, layouts/admin/users.rhtml，都是no luck.<br />
<br />
这里可以使用一个取巧的方法，在controller中可以通过layout 方法来指定使用哪个模板页，这里可以写一个BaseController:<br />
</span>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Admin::BaseController&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;ApplicationController<br />
&nbsp;&nbsp;layout&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">admin</span><span style="color: #000000;">'</span><span style="color: #000000;"><br />
end</span></div>
<br />
在BaseController中指定模板页为admin.html.erb<br />
<br />
然后将articles和tags的Controller都改为继承自BaseController。
<img src ="http://www.blogjava.net/martian/aggbug/265686.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/martian/" target="_blank"> Martian  </a> 2009-04-15 10:57 <a href="http://www.blogjava.net/martian/archive/2009/04/15/265686.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rails中的namespace</title><link>http://www.blogjava.net/martian/archive/2009/04/10/264882.html</link><dc:creator> Martian  </dc:creator><author> Martian  </author><pubDate>Fri, 10 Apr 2009 08:56:00 GMT</pubDate><guid>http://www.blogjava.net/martian/archive/2009/04/10/264882.html</guid><wfw:comment>http://www.blogjava.net/martian/comments/264882.html</wfw:comment><comments>http://www.blogjava.net/martian/archive/2009/04/10/264882.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/martian/comments/commentRss/264882.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/martian/services/trackbacks/264882.html</trackback:ping><description><![CDATA[在Rails中可以通过namespace来管理controller。<br />
首先生成scaffold:<br />
script/generate scaffold article title:string body:text<br />
在routes.rb中添加如下路由：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">map.namespace&nbsp;:admin&nbsp;</span><span style="color: #0000ff;">do</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">|</span><span style="color: #000000;">admin</span><span style="color: #000000;">|</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;admin.resources&nbsp;:articles<br />
end</span></div>
<br />
由意味着给article增加了一个名为admin的namespace,将controllers中的articles_controller.rb修改为controllers/admin/articles_controller.rb，也就是将这个控制器放到admin这个文件夹中。<br />
<br />
先看一下相应的路由规则,执行rake roures:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; admin_articles&nbsp;GET&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">admin</span><span style="color: #000000;">/</span><span style="color: #000000;">articles&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">index</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">admin/articles</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;formatted_admin_articles&nbsp;GET&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">admin</span><span style="color: #000000;">/</span><span style="color: #000000;">articles.:format&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">index</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">admin/articles</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;POST&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">admin</span><span style="color: #000000;">/</span><span style="color: #000000;">articles&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">create</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">admin/articles</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;POST&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">admin</span><span style="color: #000000;">/</span><span style="color: #000000;">articles.:format&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">create</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">admin/articles</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new_admin_article&nbsp;GET&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">admin</span><span style="color: #000000;">/</span><span style="color: #000000;">articles</span><span style="color: #000000;">/</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">new</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">admin/articles</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;formatted_new_admin_article&nbsp;GET&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">admin</span><span style="color: #000000;">/</span><span style="color: #000000;">articles</span><span style="color: #000000;">/</span><span style="color: #0000ff;">new</span><span style="color: #000000;">.:format&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">new</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">admin/articles</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;edit_admin_article&nbsp;GET&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">admin</span><span style="color: #000000;">/</span><span style="color: #000000;">articles</span><span style="color: #000000;">/</span><span style="color: #000000;">:id</span><span style="color: #000000;">/</span><span style="color: #000000;">edit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">edit</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">admin/articles</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
formatted_edit_admin_article&nbsp;GET&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">admin</span><span style="color: #000000;">/</span><span style="color: #000000;">articles</span><span style="color: #000000;">/</span><span style="color: #000000;">:id</span><span style="color: #000000;">/</span><span style="color: #000000;">edit.:format&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">edit</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">admin/articles</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;admin_article&nbsp;GET&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">admin</span><span style="color: #000000;">/</span><span style="color: #000000;">articles</span><span style="color: #000000;">/</span><span style="color: #000000;">:id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">show</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">admin/articles</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formatted_admin_article&nbsp;GET&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">admin</span><span style="color: #000000;">/</span><span style="color: #000000;">articles</span><span style="color: #000000;">/</span><span style="color: #000000;">:id.:format&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">show</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">admin/articles</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUT&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">admin</span><span style="color: #000000;">/</span><span style="color: #000000;">articles</span><span style="color: #000000;">/</span><span style="color: #000000;">:id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">update</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">admin/articles</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUT&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">admin</span><span style="color: #000000;">/</span><span style="color: #000000;">articles</span><span style="color: #000000;">/</span><span style="color: #000000;">:id.:format&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">update</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">admin/articles</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DELETE&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">admin</span><span style="color: #000000;">/</span><span style="color: #000000;">articles</span><span style="color: #000000;">/</span><span style="color: #000000;">:id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">destroy</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">admin/articles</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DELETE&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">admin</span><span style="color: #000000;">/</span><span style="color: #000000;">articles</span><span style="color: #000000;">/</span><span style="color: #000000;">:id.:format&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">destroy</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">admin/articles</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">:controller</span><span style="color: #000000;">/</span><span style="color: #000000;">:action</span><span style="color: #000000;">/</span><span style="color: #000000;">:id<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">:controller</span><span style="color: #000000;">/</span><span style="color: #000000;">:action</span><span style="color: #000000;">/</span><span style="color: #000000;">:id.:format</span></div>
<br />
对比一下不加admin这个namespace时的路由：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;article_index&nbsp;GET&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">article&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">index</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">article</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
formatted_article_index&nbsp;GET&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">article.:format&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">index</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">article</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;POST&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">article&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">create</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">article</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;POST&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">article.:format&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">create</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">article</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new_article&nbsp;GET&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">article</span><span style="color: #000000;">/</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">new</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">article</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;formatted_new_article&nbsp;GET&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">article</span><span style="color: #000000;">/</span><span style="color: #0000ff;">new</span><span style="color: #000000;">.:format&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">new</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">article</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;edit_article&nbsp;GET&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">article</span><span style="color: #000000;">/</span><span style="color: #000000;">:id</span><span style="color: #000000;">/</span><span style="color: #000000;">edit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">edit</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">article</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;formatted_edit_article&nbsp;GET&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">article</span><span style="color: #000000;">/</span><span style="color: #000000;">:id</span><span style="color: #000000;">/</span><span style="color: #000000;">edit.:format&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">edit</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">article</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;article&nbsp;GET&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">article</span><span style="color: #000000;">/</span><span style="color: #000000;">:id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">show</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">article</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formatted_article&nbsp;GET&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">article</span><span style="color: #000000;">/</span><span style="color: #000000;">:id.:format&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">show</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">article</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUT&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">article</span><span style="color: #000000;">/</span><span style="color: #000000;">:id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">update</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">article</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUT&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">article</span><span style="color: #000000;">/</span><span style="color: #000000;">:id.:format&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">update</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">article</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DELETE&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">article</span><span style="color: #000000;">/</span><span style="color: #000000;">:id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">destroy</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">article</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DELETE&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">article</span><span style="color: #000000;">/</span><span style="color: #000000;">:id.:format&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:action</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">destroy</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;:controller</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">article</span><span style="color: #000000;">"</span><span style="color: #000000;">}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">:controller</span><span style="color: #000000;">/</span><span style="color: #000000;">:action</span><span style="color: #000000;">/</span><span style="color: #000000;">:id<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">:controller</span><span style="color: #000000;">/</span><span style="color: #000000;">:action</span><span style="color: #000000;">/</span><span style="color: #000000;">:id.:format</span></div>
<br />
所有的路由规则上面，都加上了admin这个namespace。<br />
<br />
下面就要将views目录下面的articles目录改到views/admin目录下面，因为根据路由规则，会到views/admin/articles/目录下面去查找相应的模板。<br />
<br />
另外，还需要将原来的new_article_url | new_article_path等helper方法修改为new_admin_article_url | new_admin_article_path，将这些helper方法全部加上admin这个namespace。<br />
<img src ="http://www.blogjava.net/martian/aggbug/264882.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/martian/" target="_blank"> Martian  </a> 2009-04-10 16:56 <a href="http://www.blogjava.net/martian/archive/2009/04/10/264882.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Why I like Ruby #1: alias_method</title><link>http://www.blogjava.net/martian/archive/2009/04/03/263772.html</link><dc:creator> Martian  </dc:creator><author> Martian  </author><pubDate>Fri, 03 Apr 2009 08:18:00 GMT</pubDate><guid>http://www.blogjava.net/martian/archive/2009/04/03/263772.html</guid><wfw:comment>http://www.blogjava.net/martian/comments/263772.html</wfw:comment><comments>http://www.blogjava.net/martian/archive/2009/04/03/263772.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/martian/comments/commentRss/263772.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/martian/services/trackbacks/263772.html</trackback:ping><description><![CDATA[<p>So you found yourself in the need to override a method but still count on it&#8217;s old behaviour?</p>
<p>No problem! Override it with your new code, call <strong>super</strong> and&#8230;. Uh oh!! Suddenly this turned into a problem&#8230; Let me give some more context.</p>
<p>I was testing <a href="http://ferret.davebalmain.com/trac/wiki">Ferret</a> (and the <a href="http://projects.jkraemer.net/acts_as_ferret/">acts_as_ferret</a>
plugin) in a project to provide full text search capabilities to our
models. One of the things the plugin does is to add a new method to
ActiveRecord, called <em>find_with_ferret</em>. That way, every model can use it. Great!</p>
<p>So I thought that would make sense for me to remove all <a href="http://en.wikipedia.org/wiki/Diacritics">diatrictics</a> from the input text before letting ferret do its job. You know, like removing <a href="http://en.wikipedia.org/wiki/Umlaut_%28diacritic%29">umlauts</a> and all that.</p>
<p>I could do that by overriding this method with code to remove the
undesired chars and then call its older version to finally do the
search - something like calling super, but not quite. And I didn&#8217;t want
my models to inherit from anything else than ActiveRecord::Base. That
wouldn&#8217;t make any sense.</p>
<p><a href="http://www.ruby-doc.org/core/classes/Module.html#M000395">alias_method</a> to the rescue!</p>
<p>You know that to redefine a method in an existing class you can open
it up and rewrite it. But since you don&#8217;t wanna loose the behaviour
provided by the original method, this is how you can achieve this:</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">module&nbsp;ActiveRecord<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Base<br />
&nbsp;&nbsp;&nbsp;&nbsp;alias_method&nbsp;:find_with_ferret_original,&nbsp;:find_with_ferret<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;find_with_ferret(q,&nbsp;options&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{},&nbsp;find_options&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{})<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;remove_diatrictics</span><span style="color: #000000;">!</span><span style="color: #000000;">(q)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;find_with_ferret_original(q,&nbsp;options,&nbsp;find_options)<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;end<br />
end</span></div>
<p>And you&#8217;re good to go. On line 3 you&#8217;re just giving the original method an alias, making a copy of it.</p>
<p>Then you redefine it the way you like and on line 6 you call the old version to make sure u still got the same behaviour.<br />
Now all my models can benefit of this change without requiring them to call another method nor inherit from another class.</p>
<p>Cool, huh? <img src="http://www.leonardoborges.com/writings/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;"><br />
</span></p>
<img src ="http://www.blogjava.net/martian/aggbug/263772.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/martian/" target="_blank"> Martian  </a> 2009-04-03 16:18 <a href="http://www.blogjava.net/martian/archive/2009/04/03/263772.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修改Easy_Fckeditor上传图片的目录</title><link>http://www.blogjava.net/martian/archive/2009/04/03/263669.html</link><dc:creator> Martian  </dc:creator><author> Martian  </author><pubDate>Fri, 03 Apr 2009 01:32:00 GMT</pubDate><guid>http://www.blogjava.net/martian/archive/2009/04/03/263669.html</guid><wfw:comment>http://www.blogjava.net/martian/comments/263669.html</wfw:comment><comments>http://www.blogjava.net/martian/archive/2009/04/03/263669.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/martian/comments/commentRss/263669.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/martian/services/trackbacks/263669.html</trackback:ping><description><![CDATA[<strong>修改文件上传目录</strong><br />
easy_fckeditor默认的文件上传目录为<br />
public/uploads/Image，全部上传的图片都会被上传的该目录下，为了方便管理，将上传的图片根据上传日期上传到不同的日期目录下：<br />
需要修改几个方法：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><span style="color: #000000;">&nbsp;def&nbsp;current_directory_path<br />
&nbsp;&nbsp;&nbsp;&nbsp;base_dir&nbsp;</span><span style="color: #000000;">=</span>&nbsp;<span style="color: #000000;">"</span><span style="color: #000000;">#{UPLOADED_ROOT}/#{params[:Type]}/#{&nbsp;Time.now.strftime('%Y%m%d')&nbsp;}</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
#&nbsp;&nbsp;&nbsp;&nbsp;Dir.mkdir(base_dir,&nbsp;</span><span style="color: #000000;">0775</span><span style="color: #000000;">)&nbsp;unless&nbsp;File.exists</span><span style="color: #000000;">?</span><span style="color: #000000;">(base_dir)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FileUtils.mkdir_p&nbsp;base_dir<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_path(</span><span style="color: #000000;">"</span><span style="color: #000000;">#{base_dir}#{params[:CurrentFolder]}</span><span style="color: #000000;">"</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">#{base_dir}</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
&nbsp;end</span></div>
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><span style="color: #000000;">def&nbsp;upload_directory_path<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;uploaded&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;request.relative_url_root.to_s&nbsp;</span><span style="color: #000000;">+</span>&nbsp;<span style="color: #000000;">"</span><span style="color: #000000;">#{UPLOAD_FOLDER}/#{params[:Type]}</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;uploaded&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ActionController::Base.relative_url_root.to_s</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">#{UPLOADED}/#{params[:Type]}</span><span style="color: #000000;">"</span>&nbsp;<span style="color: #000000;">+</span>&nbsp;<span style="color: #000000;">"</span><span style="color: #000000;">/</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;Time.now.strftime(</span><span style="color: #000000;">'</span><span style="color: #000000;">%Y%m%d</span><span style="color: #000000;">'</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">#{uploaded}#{params[:CurrentFolder]}</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
end</span></div>
<br />
主要是加个日期<span style="color: #000000;">Time.now.strftime(</span><span style="color: #000000;">'</span><span style="color: #000000;">%Y%m%d</span><span style="color: #000000;">'</span><span style="color: #000000;">)</span>,将上传后的图片上传到public/uploads/Image/20090403/目录下，如果要换另一种形式，也很方便 ，将<span style="color: #000000;">Time.now.strftime(</span><span style="color: #000000;">'</span><span style="color: #000000;">%Y%m%d</span><span style="color: #000000;">'</span><span style="color: #000000;">)改成自己需要的就可以了。</span>
<img src ="http://www.blogjava.net/martian/aggbug/263669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/martian/" target="_blank"> Martian  </a> 2009-04-03 09:32 <a href="http://www.blogjava.net/martian/archive/2009/04/03/263669.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rails Plugin: Easy Fckeditor</title><link>http://www.blogjava.net/martian/archive/2009/04/02/263634.html</link><dc:creator> Martian  </dc:creator><author> Martian  </author><pubDate>Thu, 02 Apr 2009 14:57:00 GMT</pubDate><guid>http://www.blogjava.net/martian/archive/2009/04/02/263634.html</guid><wfw:comment>http://www.blogjava.net/martian/comments/263634.html</wfw:comment><comments>http://www.blogjava.net/martian/archive/2009/04/02/263634.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/martian/comments/commentRss/263634.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/martian/services/trackbacks/263634.html</trackback:ping><description><![CDATA[#安装easy fckeditor插件，需要首先安装git<br />
ruby script/plugin install git://github.com/gramos/easy-fckeditor.git<br />
<br />
#使用rake安装fckeditor<br />
rake fckeditor:install<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">**</span><span style="color: #000000;">&nbsp;Installing&nbsp;FCKEditor&nbsp;Plugin&nbsp;version&nbsp;</span><span style="color: #000000;">0.8</span><span style="color: #000000;">.</span><span style="color: #000000;">1</span><span style="color: #000000;"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
Creating&nbsp;directory&nbsp;editor<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
Creating&nbsp;directory&nbsp;css<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
Creating&nbsp;directory&nbsp;behaviors<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
&nbsp;&nbsp;Installing&nbsp;file&nbsp;disablehandles.htc<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
&nbsp;&nbsp;Installing&nbsp;file&nbsp;showtableborders.htc<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
&nbsp;&nbsp;Installing&nbsp;file&nbsp;fck_editorarea.css<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
&nbsp;&nbsp;Installing&nbsp;file&nbsp;fck_internal.css<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
&nbsp;&nbsp;Installing&nbsp;file&nbsp;fck_showtableborders_gecko.css<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
Creating&nbsp;directory&nbsp;images<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
&nbsp;&nbsp;Installing&nbsp;file&nbsp;block_address.png<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
&nbsp;&nbsp;Installing&nbsp;file&nbsp;block_blockquote.png<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
&nbsp;&nbsp;Installing&nbsp;file&nbsp;block_div.png<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
.<br />
.<br />
.<br />
&nbsp;&nbsp;Installing&nbsp;file&nbsp;fckplugin.js<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
&nbsp;&nbsp;Installing&nbsp;file&nbsp;_upgrade.html<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
&nbsp;&nbsp;Installing&nbsp;file&nbsp;_whatsnew.html<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
&nbsp;&nbsp;Installing&nbsp;file&nbsp;_whatsnew_history.html<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
</span><span style="color: #000000;">**</span><span style="color: #000000;">&nbsp;Successfully&nbsp;installed&nbsp;FCKEditor&nbsp;Plugin&nbsp;version&nbsp;</span><span style="color: #000000;">0.8</span><span style="color: #000000;">.</span><span style="color: #000000;">1</span></div>
<br />
#在需要使用Fckeditor的页面引入fckeditor.js文件<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&lt;%=</span><span style="color: #000000;">&nbsp;javascript_include_tag&nbsp;:fckeditor&nbsp;&nbsp;</span><span style="color: #000000;">%&gt;<br />
<br />
</span></div>
#使用fckeditor_textarea<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&lt;%=</span><span style="color: #000000;">&nbsp;fckeditor_textarea&nbsp;:article,&nbsp;:body,&nbsp;{:toolbarSet&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">Easy</span><span style="color: #000000;">'</span><span style="color: #000000;">,&nbsp;:width&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">100%</span><span style="color: #000000;">'</span><span style="color: #000000;">,&nbsp;:height&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">300px</span><span style="color: #000000;">'</span><span style="color: #000000;">}&nbsp;</span><span style="color: #000000;">%&gt;</span></div>
<br />
#更详细的使用说明，可以参看http://github.com/gramos/easy-fckeditor/tree/master<br />
<br />
<strong>解决上传图片问题</strong><br />
<br />
1. 在上传图片的时候(rails2.2.2)，会出现如下的错误：<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">NoMethodError&nbsp;(undefined&nbsp;method&nbsp;`relative_url_root</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;for&nbsp;#&lt;ActionController::CgiRequest:0x594ab4c&gt;):</span></div>
解决方法参考 http://github.com/salicio/fckeditor/commit/fcf8fbee8cfad3a3df0df50172e448727909ccb9<br />
1. 将/vendor/plugins/easy_fckeditor/<a href="http://github.com/salicio/fckeditor/tree/fcf8fbee8cfad3a3df0df50172e448727909ccb9/app/controllers/fckeditor_controller.rb"></a>app/controllers/fckeditor_controller.rb中的<br />
uploaded&nbsp;=&nbsp;request.relative_url_root.to_s+"#{UPLOADED}/#{params[:Type]}"<br />
修改为:<br />
uploaded = ActionController::Base.relative_url_root.to_s+"#{UPLOADED}/#{params[:Type]}"<br />
2. 将/vendor/plugins/easy_fckeditor/lib/fckeditor.rb中的<br />
js_path = "#{controller.relative_url_root}/javascripts"<br />
修改为：<br />
js_path = "#{ActionController::Base.relative_url_root}/javascripts"<br />
<br />
2. 该plugins版本少定义了一个变量：<br />
会出现如下错误：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">NameError&nbsp;(uninitialized&nbsp;constant&nbsp;FckeditorController::UPLOADED):</span></div>
<br />
修改很简单，只要修改<br />
/vendor/plugins/easy_fckeditor/app/controllers/fckeditor_controller.rb,增加:<br />
UPLOADED = "/uploads"<br />
<br />
完成之后，能够正常上传图片，并预览。<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/martian/aggbug/263634.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/martian/" target="_blank"> Martian  </a> 2009-04-02 22:57 <a href="http://www.blogjava.net/martian/archive/2009/04/02/263634.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>install ruby on rails, sqlite3, sqlite3-ruby under ubuntu8.10</title><link>http://www.blogjava.net/martian/archive/2009/04/01/263360.html</link><dc:creator> Martian  </dc:creator><author> Martian  </author><pubDate>Wed, 01 Apr 2009 06:57:00 GMT</pubDate><guid>http://www.blogjava.net/martian/archive/2009/04/01/263360.html</guid><wfw:comment>http://www.blogjava.net/martian/comments/263360.html</wfw:comment><comments>http://www.blogjava.net/martian/archive/2009/04/01/263360.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/martian/comments/commentRss/263360.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/martian/services/trackbacks/263360.html</trackback:ping><description><![CDATA[<p>nothing but the script I used:</p>
<p>#install Ruby and relative<br />
apt-get install ruby</p>
<br />
#install wget<br />
sudo apt-get install wget<br />
<br />
#install rubygems <br />
wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz<br />
tar xzf rubygems-1.3.1.tgz<br />
cd rubygems-1.3.1<br />
sudo ruby setup.rb<br />
gem -v<br />
1.3.1<br />
<br />
# or update rubygems<br />
sudo gem install rubygems-update -v 1.3.1<br />
<br />
<p>#install Rails and dependencies<br />
gem install rails &#8211;include-dependencies -v=2.2.2</p>
<br />
#install Sqlite3<br />
<p>
apt-get install  sqlite3 swig libsqlite3-ruby libsqlite3-dev</p>
<p>apt-get install ruby1.8-dev libsqlite3-dev (required)</p>
<p><br />
gem install sqlite3-ruby #compile this need libsqlite.h</p>
<img src ="http://www.blogjava.net/martian/aggbug/263360.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/martian/" target="_blank"> Martian  </a> 2009-04-01 14:57 <a href="http://www.blogjava.net/martian/archive/2009/04/01/263360.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>