﻿<?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/lifw/</link><description>一路走来~~</description><language>zh-cn</language><lastBuildDate>Wed, 29 Apr 2026 05:39:04 GMT</lastBuildDate><pubDate>Wed, 29 Apr 2026 05:39:04 GMT</pubDate><ttl>60</ttl><item><title>ddd</title><link>http://www.blogjava.net/lifw/archive/2010/01/26/310863.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Tue, 26 Jan 2010 06:34:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2010/01/26/310863.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/310863.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2010/01/26/310863.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/310863.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/310863.html</trackback:ping><description><![CDATA[<img style="width: 404px; height: 303px" border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/lifw/XYNY_040.JPG" width="404" height="303" /> 
<img src ="http://www.blogjava.net/lifw/aggbug/310863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2010-01-26 14:34 <a href="http://www.blogjava.net/lifw/archive/2010/01/26/310863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>黑莓手机实用快捷键 blackberry日常使用快捷键分享</title><link>http://www.blogjava.net/lifw/archive/2009/09/28/296710.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Mon, 28 Sep 2009 00:37:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2009/09/28/296710.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/296710.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2009/09/28/296710.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/296710.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/296710.html</trackback:ping><description><![CDATA[摘自：http://www.51blackberry.com/wz_Show.asp?ArticleID=3319
<p align="center"><strong><font color="darkred"><font size="3"><span href="http://www.51blackberry.com/tag.php?name=%BA%DA%DD%AE"  &#="" 111nclick="tagshow(event)"><br />
</span></font></font></strong></p>
<p align="center"><strong><font color="darkred"><font size="3"><span href="http://www.51blackberry.com/tag.php?name=%BA%DA%DD%AE"  &#="" 111nclick="tagshow(event)">黑莓</span><span href="http://www.51blackberry.com/tag.php?name=%CA%D6%BB%FA"  &#="" 111nclick="tagshow(event)">手机</span>实用快捷键 <span href="http://www.51blackberry.com/tag.php?name=blackberry"  &#="" 111nclick="tagshow(event)">blackberry</span>日常使用快捷键分享</font></font></strong></p>
<font size="2">&nbsp;&nbsp;&nbsp; 对于blackberry来说，其blackberry OS <span href="http://www.51blackberry.com/tag.php?name=%CF%B5%CD%B3"  &#="" 111nclick="tagshow(event)">系统</span>已经非常成熟，为了减少<span href="http://www.51blackberry.com/tag.php?name=%D3%C3%BB%A7"  &#="" 111nclick="tagshow(event)">用户</span>日常操作中的麻烦，系统提供了很多的快捷操作方式，熟练的应用这些快捷键进行操作，会为你带去操作便利。下面51blackberry就为国内用户分享一组日常必须的快捷操作使用方法。<br />
&nbsp; &nbsp; <br />
<strong>阅读讯息时</strong>快捷键<br />
下移画面—空格键<br />
上移画面—shift + 空格键<br />
至顶部—T<br />
至底部—B<br />
下一个日期—N<br />
上一个日期—P<br />
移到下一则相关讯息—J<br />
移到上一则相关讯息—K<br />
阅读照片时<br />
放大—3<br />
缩小—9<br />
原尺吋—7<br />
符合萤幕大小—1<br />
移到下一张图片—N<br />
移到上一张图片—P<br />
<br />
<strong>网页瀏览(</strong>英文介面才可用)<br />
首页—H<br />
<span href="http://www.51blackberry.com/tag.php?name=%CA%E4%C8%EB"  &#="" 111nclick="tagshow(event)">输入</span>网址— G<br />
查看书籤—K<br />
新增书籤—A<br />
重新整理—R<br />
搜索网址—P<br />
下移画面—空格键<br />
上移划面—shift + 空格键<br />
至顶部—T<br />
至底部—B<br />
<br />
<strong>文字输入</strong><br />
锁定/解除按键上方数字/符号— alt + 左shift<br />
快速语言切换(母语-中、副语-英)— alt + 右shift<br />
多种整语言选择— alt + Enter<br />
输入其它符号— sym<br />
<span href="http://www.51blackberry.com/tag.php?name=%D3%CA%BC%FE"  &#="" 111nclick="tagshow(event)">邮件</span>输入—可用空格键代替@或 ( . )<br />
<br />
<strong><span href="http://www.51blackberry.com/tag.php?name=%CD%A8%D1%B6%C2%BC"  &#="" 111nclick="tagshow(event)">通讯录</span></strong><br />
多重文字搜寻— 输入(xxx) &#8594; 第一阶段筛选<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 输入(xxx) + 空格 + 输入(yyy) &#8594; 第二阶段筛选<br />
媒体<br />
移到下一首—N<br />
移到上一首—P <br />
&nbsp; &nbsp; 以上只是部分的操作方法，很多快捷操作你会在使用中有所发现。</font>
<img src ="http://www.blogjava.net/lifw/aggbug/296710.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2009-09-28 08:37 <a href="http://www.blogjava.net/lifw/archive/2009/09/28/296710.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web开发工具大集合——每个浏览器都有份的！[转]</title><link>http://www.blogjava.net/lifw/archive/2009/09/27/296586.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Sun, 27 Sep 2009 01:06:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2009/09/27/296586.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/296586.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2009/09/27/296586.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/296586.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/296586.html</trackback:ping><description><![CDATA[摘自：http://www.blogjava.net/Unmi/archive/2009/09/26/296555.html<br />
<br />
<br />
<p>作者：<a href="http://www.klauskomenda.com/">Klaus Komenda</a> ， 翻译：<a href="http://www.butwho.net/">butwho </a><br />
英文原文：<a href="http://www.klauskomenda.com/archives/2008/02/16/collection-of-web-developer-tools-per-browser/">Collection of Web Developer Tools, per Browser</a><br />
原文发现：<a href="http://www.yeeyan.com/articles/source/24832_e18/Collection_of_Web_Developer_Tools_for_major_browse...">译言-Collection of Web Developer Tools for major browsers</a><br />
中文译文：<a href="http://www.butwho.net/2008/05/collection-of-web-developer-tools-per-browser.html">Web开发工具大集合——每个浏览器都有份的！</a></p>
<p>网
站开发者的一大苦恼，就是有太多的浏览器要应付。幸亏世界上有一些聪明的人，能够研究出一大些方便编辑和调试网页代码的好工具。不过，要从不计其数的小工
具里面找出合适的可真不容易。这篇文章列出了几个最好用的web开发工具，并指导你快速地激活、安装、使用他们。 下面是工具列表：</p>
<table small="" sizset="12" sizcache="1" border="1" bordercolor="#cbcac6" cellspacing="0">
    <thead>
        <tr>
            <th>浏览器</th>
            <th>可用的工具 (括号中是应用范围)</th>
        </tr>
    </thead>
    <tbody sizset="12" sizcache="1">
        <tr sizset="12" sizcache="1">
            <td>Firefox</td>
            <td sizset="12" sizcache="1">
            <ul sizset="12" sizcache="1">
                <li>
                <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#wdt">Web Developer Toolbar</a> (多用途)
                </li>
                <li>
                <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#firebug">Firebug</a> (DOM, CSS, JavaScript, 流量)
                </li>
                <li>
                <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#modheaders">Modify Headers</a> (Ajax)
                </li>
                <li>
                <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#poster">Poster</a> (Ajax)
                </li>
                <li>
                <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#xray-mri">XRAY</a>, <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#xray-mri">MRI</a> (CSS)
                </li>
                <li>
                <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#faext">Firefox Accessibility Extension</a>
                </li>
                <li>
                <a href="http://livehttpheaders.mozdev.org/">LiveHTTPHeaders</a>
                </li>
            </ul>
            </td>
        </tr>
        <tr sizset="19" sizcache="1">
            <td>IE6, IE7</td>
            <td sizset="19" sizcache="1">
            <ul sizset="19" sizcache="1">
                <li>
                <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#ie-dev-tb">IE Developer Toolbar</a> (DOM, CSS)
                </li>
                <li>
                <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#wat">Web Accessibility Toolbar</a> (可读性及更多功能)
                </li>
                <li>
                <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#xray-mri">XRAY</a>, <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#xray-mri">MRI</a> (CSS)
                </li>
                <li>
                <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#vwdee">Visual Web Developer Express Edition</a> (JavaScript)
                </li>
                <li>
                <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#msd">Microsoft Script Debugger</a> (JavaScript) </li>
            </ul>
            </td>
        </tr>
        <tr sizset="24" sizcache="1">
            <td>Opera</td>
            <td sizset="24" sizcache="1">
            <ul sizset="24" sizcache="1">
                <li>
                <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#operadevtools">Opera developer tools</a> (DOM, CSS, JavaScript)
                </li>
                <li>
                <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#opera-ec">Opera Error Console</a> (HTML, CSS, JavaScript)
                </li>
                <li>
                <br />
                </li>
                <del>
                <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#xray-mri">XRAY</a>, <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#xray-mri">MRI</a> (CSS)</del>
                <li>
                <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#wat">Web Accessibility Toolbar</a> (可读性及更多功能) </li>
            </ul>
            </td>
        </tr>
        <tr sizset="28" sizcache="1">
            <td>Safari</td>
            <td sizset="28" sizcache="1">
            <ul sizset="28" sizcache="1">
                <li>
                <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#saf-dm">Safari Debug Menu</a> (JavaScript)
                </li>
                <li>
                <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#xray-mri">XRAY</a>, <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#xray-mri">MRI</a> (CSS)
                </li>
                <li>
                <a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#winsp">Web Inspector</a> (Safari 3) (CSS, DOM) </li>
            </ul>
            </td>
        </tr>
    </tbody>
</table>
<h3 id="wdt">Web Developer Toolbar</h3>
<p>Firefox上开发和调试web站点的不二之选。<a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#wdt">Web developer toolbar</a>包含了一系列工具，从cookie管理到CSS调试，从导航线到屏幕标尺，功能简直是多得说不完。 Web开发工具栏 下载地址：<a href="http://chrispederick.com/work/web-developer/">http://chrispederick.com/work/web-developer/</a></p>
<h3 id="firebug">Firebug</h3>
<p>萤火虫 是Firefox上数一数二的好扩展，可作为<a href="http://addons.mozilla.org/firefox/addon/60">web developer toolbar</a>的补充工具。你可以用Firebug在线检查、监控、编辑网页上的HTML、CSS、JavaScript代码。他还提供一个脚本控制台，让JS编辑编的更简单。控制台对象包含了<a href="http://www.getfirebug.com/console.html">一大堆选项</a>，允许你输出代码到控制台然后进行调试。<a href="http://michaelsync.net/">Michael Sync</a>提供<a href="http://michaelsync.net/2007/09/09/firebug-tutorial-logging-profiling-and-commandline-part-i">一个</a>更高级的<a href="http://michaelsync.net/2007/09/15/firebug-tutorial-commandline-api">操作指南</a>，它可以知道你详尽地设置Firebug的选项。另外，Firebug上有一个带宽监视器，能让你清楚地看到某些代码占了多少带宽。 Firebug 下载地址：<a href="http://www.getfirebug.com/">http://www.getfirebug.com/</a></p>
<h3 id="modheaders">Modify Headers</h3>
<p>
<a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#modheaders">Modify headers</a>是一个可以添加、修改和过滤HTTP请求头的工具。你可以用这个工具冒充成移动设备登陆网站，它甚至可以伪造一个Ajax请求。 Modify Headers 下载地址：<a href="http://modifyheaders.mozdev.org/">http://modifyheaders.mozdev.org/</a></p>
<h3 id="poster">Poster</h3>
<p>你可以通过<a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#poster">Poster扩展</a>与Web服务或者其他web资源进行交互，它能让你发送HTTP请求、设置请求实体和内容格式。这可以让你检测Web交互的效果。 Poster下载地址：<a href="http://code.google.com/p/poster-extension/">http://code.google.com/p/poster-extension/</a></p>
<h3 id="xray-mri">XRAY &amp; MRI</h3>
<p>
<a href="http://www.westciv.com/xray/index.html">X光</a>和<a href="http://www.westciv.com/mri/">核磁共振成像</a>是可以应用在IE6+、Webkit和Mozilla为基础的浏览器上的bookmarklets（<a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#Bookmarklets">嘛叫Bookmarklets</a>），包括Safari, Firefox, Camino和Mozilla. Xray 能帮你检测盒模型里的每一个元素，MRI可以测试和应用选择器。 XRay下载地址：<a href="http://www.westciv.com/xray/index.html">http://www.westciv.com/xray/index.html</a> MRI下载地址：<a href="http://www.westciv.com/mri/">http://www.westciv.com/mri/</a></p>
<h3 id="faext">Firefox Accessibility Extension</h3>
<p>
<a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#faext">Mozilla/Firefox无障碍扩展</a>让残疾人士方便地浏览网页内容。开发人员可以用这个扩展检查他们的结构和样式的网页易读性。 Firefox Accessibility Extension下载地址：<a href="http://firefox.cita.uiuc.edu/">http://firefox.cita.uiuc.edu/</a></p>
<h3 id="ie-dev-tb">IE Developer Toolbar</h3>
<p>微软的<a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#ie-dev-tb">英特网探索者开发工具条</a>是IE上最好的DOM检查和CSS调试工具。由于IE具有高市场占有率而又在整个渲染模型上充满缺陷（比如臭名昭著的<a href="http://www.satzansatz.de/cssd/onhavinglayout.html">hasLayout边距重叠BUG</a>），调试IE是web开发必不可少的步骤——没有这个工具条，IE的调试将会成为一场噩梦。虽然IE Developer Toolbar要比Firebug稍微弱智一点，不过他至少能帮你驯服IE这头怪兽。 IE Developer Toolbar下载地址：<a href="http://www.microsoft.com/downloads/details.aspx?familyid=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;displaylang=en">http://www.microsoft.com/downlo&#8230;aylang=en</a></p>
<h3 id="wat">Web Accessibility Toolbar</h3>
<p>
<a href="http://www.visionaustralia.org.au/ais/toolbar/">The Web Accessibility Toolbar</a>（
href="http://www.paciellogroup.com/resources/wat-about.html"&gt;Opera版）可
以检查网站的易读性（当然是可能的易读性，总不能指望电脑能像人一样读网页吧？）此外，这个工具还提供其他功能，比如检查死链接和改变浏览框大小等等。
The Web Accessibility Toolbar下载地址:<a href="http://www.visionaustralia.org.au/ais/toolbar/">http://www.visionaustralia.org.au/ais/toolbar/</a></p>
<h3 id="vwdee">Visual Web Developer Express Edition</h3>
<p>
<a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#ie-dev-tb">IE开发工具栏</a>木有JavaScript调试功能，你得找个别的工具搞JS。你可以用Microsoft Script Debugger（下面将提到）或者免费下载这个重量级的<a href="http://www.microsoft.com/express/vwd/Default.aspx">Visual Web Developer Express Edition</a>。Bernie那儿有这个工具的<a href="http://www.berniecode.com/blog/2007/03/08/how-to-debug-javascript-with-visual-web-developer-express/">教程</a>（当
然是英文的），它详尽地告诉你如何用这个工具调试JavaScript代码。 你也可以用Microsoft Script Editor 编辑
JS代码——不幸的是，这并不是个免费工具（在国内，这似乎不是个大问题）。他被捆绑在Office
2003安装包里，而微软又不提供单独下载。正因为如此，这儿就不多提它了。<a href="http://www.jonathanboutelle.com/">Jonathan Boutelle</a>提供了<a href="http://www.jonathanboutelle.com/mt/archives/2006/01/howto_debug_jav.html">这个工具的一些教程</a>。</p>
<h3 id="msd">Microsoft Script Debugger</h3>
<p>你可以在微软网站上免费<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2f465be0-94fd-4569-b3c4-dffdf19ccd99&amp;displaylang=en">下载这个工具</a>，<a href="http://msdn2.microsoft.com/en-us/library/ms532989.aspx">MSDN上也有一个相关文档</a>。这个工具比Visual Web Developer Express Edition弱很多，不过仍然能处理一些IE上那些让人摸不着头脑的提示，诸如&#8220;缺乏对象&#8221;一类。<a href="http://www.jakehowlett.com/">Jake Howlett</a> 有个<a href="http://www.codestore.net/store.nsf/unid/DOMT-5UBUVW?OpenDocument">《如何使用Microsoft Script Debugger调试JavaScript》</a>的教程。为安全起见，安装脚本调试器之后最好要重新启动一下你的电脑。 Microsoft Script Debugger下载地址：<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2f465be0-94fd-4569-b3c4-dffdf19ccd99&amp;displaylang=en">http://www.microsoft.com/do..laylang=en</a></p>
<h3 id="operadevtools">Opera developer tools</h3>
<p>Opera有<a href="http://dev.opera.com/tools/">两个开发工具</a>：Opera 开发控制台(Opera Developer Console)和Dom快照工具(DOM Snapshot)。从截图来看，他们都很有前途。这个工具算是Opera 9以上版本用的<a title="？" href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/#Bookmarklets">bookmarklets</a>。不过我没能让他们在Opera 9.10上成功运作。 Opera开发工具下载地址：<a href="http://dev.opera.com/tools/">http://dev.opera.com/tools/</a></p>
<h3 id="opera-ec">Opera Error Console</h3>
<p>错误控制台是Opera的一个内置功能，可以在<strong>工具-高级-错误控制台</strong>中激活这个它。它能弹窗显示当前网页上的错误或者警告信息，或者你可以过滤某种类型的信息，比如HTML、CSS、XML或者Javascript警告。你可以在opera网站找到<a href="http://dev.opera.com/articles/view/how-to-debug-javascript-problems-with-op/">错误控制台的详细教程</a>。</p>
<h3 id="saf-dm">Safari Debug Menu</h3>
<p>Safari的debug能力很弱，但至少显示一个Javascript控制台能让Javascript调试变得简单点儿（这与Firebug和Opera错误控制台类似）。在Apple网站的开发部门，有一个<a href="http://developer.apple.com/internet/safari/faq.html#anchor14">常见问题文档</a>说明如何启用隐藏的调试菜单。 在Mac OS X下，打开一个终端然后输入：</p>
<pre>				<code>defaults write com.apple.Safari IncludeDebugMenu 1</code><br />
</pre>
<p>在
windows下，用文本编辑器打开Preferences.plist，这个文件的位置往往是C:Documents and
SettingsUSERNAMEApplication DataApple
ComputerSafariPreferences.plist，在文件最后添加： <code>&lt;key&gt;IncludeDebugMenu&lt;/key&gt; &lt;true/&gt;</code> 在Safari 1.3及以上版本，你可以进入Debug菜单然后钩选&#8220;记录Javascript意外&#8221;的选项。然后选择&#8220;显示JavaScript Console&#8221;。这就可以用控制台记录Javascript错误。</p>
<h3 id="winsp">Web Inspector</h3>
<p>要在Mac OS上激活Safari Web Inspector (Safari 3及以上可用)，打开终端窗口然后输入</p>
<pre>				<code>defaults write com.apple.Safari WebKitDeveloperExtras -bool true</code><br />
</pre>
<p>在windows中，打开Documents and Settings*你的用户名*Application DataApple ComputerSafariWebKitPreferences.plist，添加以下内容：</p>
<pre>				<code>&lt;key&gt;WebKitDeveloperExtras&lt;/key&gt;<br />
<br />
&lt;true/&gt;</code><br />
</pre>
<p>然后退出Safari并重新打开，你将在菜单中看到一个&#8220;检查元素&#8221;选项，就是它了！</p>
<h3 id="bookmarklets">**知识扩充：嘛叫bookmarklets?</h3>
<p>具体说来，俺也不大清楚，新名词啊？在<a href="http://blog.roodo.com/foreverfish/archives/1041068.html">这儿</a>找到一个解释：</p>
<blockquote>
<p>所
謂的Bookmarklet，簡單的說，就是一個內含簡單
JavaScript程式碼的書籤。使用的方法和書籤一樣，不同的地方是：書籤是用來記錄瀏覽的位置，而bookmarklet則是記錄某些程序或是方
法。
另一方面，bookmarklet在本質上可說是將JavaScript語言類比為一通訊協定(protocol)，就像http或是ftp一樣，並需要
透過瀏覽器來進行解譯，因此，bookmarklet必需依靠瀏覽器才能發揮功用。</p>
</blockquote>
<p>好像说，Greasemonkey之类的玩意儿就跟bookmarklet相关？<br />
<br />
原文：<a href="http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/">http://www.weborn.org/collection-of-web-developer-tools-per-browser-466/</a></p>
<br />
<img src ="http://www.blogjava.net/lifw/aggbug/296586.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2009-09-27 09:06 <a href="http://www.blogjava.net/lifw/archive/2009/09/27/296586.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OA之歌</title><link>http://www.blogjava.net/lifw/archive/2009/09/26/296487.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Sat, 26 Sep 2009 01:28:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2009/09/26/296487.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/296487.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2009/09/26/296487.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/296487.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/296487.html</trackback:ping><description><![CDATA[<pre>来自：http://www.family168.com/oa/requirement/song.html<br />
<br />
<br />
<br />
一定得选最复杂的设计<br />
<br />
建就得建最高档次的oa<br />
<br />
不用测试直接上线<br />
<br />
占用内存最少的功能也得用四百兆<br />
<br />
什么分布式事务啊、状态同步啊、并发控制啊<br />
<br />
能用的全用上<br />
<br />
<br />
<br />
页面用Ajax，逻辑用EJB<br />
<br />
都塞到应用服务器中<br />
<br />
一个图片要在程序里转七圈才能输出<br />
<br />
甭管有事没事先封装了，再对人说<br />
<br />
"Encapsulation makes everyting become possible"<br />
<br />
一口地道的美国口音<br />
<br />
倍有面子<br />
<br />
<br />
<br />
数据存储用的是Oracle<br />
<br />
要集群运作的那种<br />
<br />
光做一个留言板就得用几十张数据表<br />
<br />
<br />
<br />
再配上最豪华的体系结构<br />
<br />
从表现层到逻辑层全用上<br />
<br />
就是一个字 "难"<br />
<br />
实现一个用户登陆也得花个八千行代码<br />
<br />
<br />
<br />
服务器上跑得都是weblogic、websphere<br />
<br />
你要用一jboss，都不好意思跟人家打招呼<br />
<br />
<br />
<br />
你说这样的oa，一个功能得拆分多少层<br />
<br />
我觉着怎么着也得五层吧<br />
<br />
五层？那是视图<br />
<br />
十五层起<br />
<br />
你别嫌多，还不能简化<br />
<br />
你得研究开发者的心理<br />
<br />
愿意拆分五层的开发者<br />
<br />
根本不在乎再多拆分十层<br />
<br />
<br />
<br />
什么叫oa开发你知道吗<br />
<br />
成功oa就是做什么功能<br />
<br />
都做最难的，不是做最好的<br />
<br />
所以我们做oa的口号就是<br />
<br />
不求最好，但求最难<br />
<br />
</pre>
<img src ="http://www.blogjava.net/lifw/aggbug/296487.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2009-09-26 09:28 <a href="http://www.blogjava.net/lifw/archive/2009/09/26/296487.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2.1.6 + freemarker2.3.15 访问 request  session 方法</title><link>http://www.blogjava.net/lifw/archive/2009/09/25/296445.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Fri, 25 Sep 2009 08:33:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2009/09/25/296445.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/296445.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2009/09/25/296445.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/296445.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/296445.html</trackback:ping><description><![CDATA[request：<br />
${request.getRequestURI()}<br />
<br />
session:<br />
${Session["SPRING_SECURITY_LAST_EXCEPTION"]}<br />
<br />
<img src ="http://www.blogjava.net/lifw/aggbug/296445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2009-09-25 16:33 <a href="http://www.blogjava.net/lifw/archive/2009/09/25/296445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jasperReport的一些参数</title><link>http://www.blogjava.net/lifw/archive/2009/08/04/289815.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Tue, 04 Aug 2009 09:27:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2009/08/04/289815.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/289815.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2009/08/04/289815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/289815.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/289815.html</trackback:ping><description><![CDATA[参考自：http://hi.baidu.com/275989036/blog/item/a31feb33ee826a45ad4b5fb2.html
<br/ />
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 9pt;"><strong><span style="font-size: 18pt;">Exporter常用参数说明</span></strong> </span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong>net.sf.jasperreports.engine.JRExporterParameter. JASPER_PRINT</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">net.sf.jasperreports.engine.JasperPrint</span><span style="font-size: 9pt;">的对象，</span><span style="font-size: 9pt;">exporter</span><span style="font-size: 9pt;">在导出报表前会做检测</span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRExporterParameter. JASPER_PRINT_LIST</strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是包含了</span><span style="font-size: 9pt;">n</span><span style="font-size: 9pt;">个</span><span style="font-size: 9pt;">net.sf.jasperreports.engine.JasperPrint</span><span style="font-size: 9pt;">对象的</span><span style="font-size: 9pt;">java.util.List</span><span style="font-size: 9pt;">，</span><span style="font-size: 9pt;">exporter</span>在导出报表前会做检测 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRExporterParameter.INPUT_STREAM</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">net.sf.jasperreports.engine.JasperPrint</span><span style="font-size: 9pt;">被序列化对象的输入流，</span><span style="font-size: 9pt;">exporter</span>在导出报表前会做检测 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRExporterParameter.INPUT_URL</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是包含</span><span style="font-size: 9pt;">net.sf.jasperreports.engine.JasperPrint</span><span style="font-size: 9pt;">被序列化对象的</span><span style="font-size: 9pt;">URL</span><span style="font-size: 9pt;">，</span><span style="font-size: 9pt;">exporter</span>在导出报表前会做检测 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRExporterParameter.INPUT_FILE_NAME</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是存储了</span><span style="font-size: 9pt;">net.sf.jasperreports.engine.JasperPrint</span><span style="font-size: 9pt;">被序列化对象的文件路径，</span><span style="font-size: 9pt;">exporter</span>在导出报表前会做检测 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong>注意：以上几个参数不能全部为空 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_STRING_BUFFER</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.StringBuffer</span>的对象，存储已经产生出的指定格式报表的内容 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_WRITER</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.io.Writer</span><span style="font-size: 9pt;">的对象，将指定格式报表的内容发送到一个字符流，例如</span><span style="font-size: 9pt;">Servlet</span><span style="font-size: 9pt;">的</span>PrintWriter </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_STREAM</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.io.OutputStream</span><span style="font-size: 9pt;">的对象，将指定格式报表的内容发送到一个输出流，例如</span>ServletOutputStream </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_FILE</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.io.FILE</span><span style="font-size: 9pt;">的对象，将指定格式报表的内容存储到文件里面</span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong>&#216;<font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRExporterParameter.OUTPUT_FILE_NAME</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.String</span>的对象，将指定格式报表的内容存储到文件里面 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRExporterParameter.CHARACTER_ENCODING</strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.String</span>的对象，指定格式报表的内容编码 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JExcelApiExporterParameter.IS_FONT_SIZE_FIX_ENABLED</strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.Boolean</span><span style="font-size: 9pt;">的对象，是否允许自动修正</span><span style="font-size: 9pt;">Excel</span><span style="font-size: 9pt;">每个栏位的大小</span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.Boolean</span><span style="font-size: 9pt;">的对象，每一页是否用一个</span>Sheet </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRXlsExporterParameter. IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.Boolean</span><span style="font-size: 9pt;">的对象，是否移除行与行之间的空行</span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.Boolean</span>的对象，页面的背景是否为白的 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRXlsExporterParameter.SHEET_NAMES</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.String</span><span style="font-size: 9pt;">的对象，</span><span style="font-size: 9pt;">Sheet</span>的名字 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRCsvExporterParameter.FIELD_DELIMITER</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.String</span>的对象，栏位之间的分隔符 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRCsvExporterParameter.RECORD_DELIMITER</strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.String</span>的对象，栏位之间的分隔符 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.Boolean</span><span style="font-size: 9pt;">的对象，是否输出图片到目录</span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRHtmlExporterParameter.IMAGES_DIR_NAME</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.String</span><span style="font-size: 9pt;">的对象，图片目录的绝对路径</span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRHtmlExporterParameter.IMAGES_DIR</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.io.File</span>的对象，图片目录 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>net.sf.jasperreports.engine.JRHtmlExporterParameter.IMAGES_URI</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.String</span><span style="font-size: 9pt;">的对象，通过</span><span style="font-size: 9pt;">Web</span><span style="font-size: 9pt;">访问时图片的</span><span style="font-size: 9pt;">URI</span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -1cm; text-align: left;" align="left"><span style="font-size: 18pt;"><strong>2.5</strong></span><span style="font-size: 7pt;"><font face="Times New Roman"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <span style="font-size: 18pt;">JasperReport内置的常用参数说明</span></strong> </font></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong>这些参数是放到java.util.Map，在填充报表的时候使用</strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>REPORT_CONNECTION</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.sql.Connection</span><span style="font-size: 9pt;">对象，在用</span><span style="font-size: 9pt;">Report Query</span>的时候调用 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>REPORT_DATASOURCE</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是实现了接口</span><span style="font-size: 9pt;">net.sf.jasperreports.engine.JRDataSource</span>的对象，在填充报表的时候调用 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>IS_IGNORE_PAGINATION</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.Boolean</span>对象，报表是否忽略分页 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>REPORT_MAX_COUNT</strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是</span><span style="font-size: 9pt;">java.lang.Integer</span>对象，报表显示的最大记录数 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>DRAWING_SUPPLIER</strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数是实现了接口</span><span style="font-size: 9pt;">org.jfree.chart.plot.DrawingSupplier</span><span style="font-size: 9pt;">对象，定义自己的填充色</span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">这个参数不是原来</span><span style="font-size: 9pt;">JasperReport</span><span style="font-size: 9pt;">定义的，是后来加上的</span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -1cm; text-align: left;" align="left"><span style="font-size: 18pt;"><strong>2.6</strong></span><strong><span style="font-size: 7pt;"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font></span><span style="font-size: 18pt;">JasperReport内置的常用变量说明 </span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>PAGE_NUMBER</strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><span style="font-size: 9pt;"><strong>当前页面的页码，即第几页</strong></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>REPORT_COUNT</strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong>整个报表填充完成后，总的记录数 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><span style="font-size: 7pt;"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font></span></strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; text-align: left;" align="left"><strong><span style="font-size: 9pt;">&#216;</span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font>COLUMN_COUNT</strong></p>
<strong><span style="font-size: 9pt;">当前记录的行数，每个页面的计数会复位后重新计算。</span></strong>

<img src ="http://www.blogjava.net/lifw/aggbug/289815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2009-08-04 17:27 <a href="http://www.blogjava.net/lifw/archive/2009/08/04/289815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>亢龙有悔-阿朱送给大家的几句话</title><link>http://www.blogjava.net/lifw/archive/2009/08/03/289668.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Mon, 03 Aug 2009 14:03:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2009/08/03/289668.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/289668.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2009/08/03/289668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/289668.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/289668.html</trackback:ping><description><![CDATA[1.能救你自己的只有你自己；你自己都不救你自己，那么没有人会救你。<br />
2.没有不可能。如果你对这句话质疑，那么送给你另一句话：一切都没有可能，别白费力气了，龙生龙，凤生凤，老鼠的儿子会打洞，你就认命吧。<br />
3.这个世界没有机会。机会永远是别人的。除非你自己给自己创造机会。但很有可能，你自己创造出来的机会也会被别人抢走，所以你要时时看好你的机会，抓住你的机会。<br />
<br />
<img src ="http://www.blogjava.net/lifw/aggbug/289668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2009-08-03 22:03 <a href="http://www.blogjava.net/lifw/archive/2009/08/03/289668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jasperReport+ireport 设计中文乱码问题</title><link>http://www.blogjava.net/lifw/archive/2009/08/03/289556.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Mon, 03 Aug 2009 03:34:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2009/08/03/289556.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/289556.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2009/08/03/289556.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/289556.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/289556.html</trackback:ping><description><![CDATA[需要iTextAsian.jar<br />
PDF font name: STSong-Light;<br />
PDF embedeed encoding前的勾选上<br />
pdfEncoding ：UniGB-UCS2-V (Chinese Simplified)
<img src ="http://www.blogjava.net/lifw/aggbug/289556.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2009-08-03 11:34 <a href="http://www.blogjava.net/lifw/archive/2009/08/03/289556.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>致新员工书-任正非（1994.12.25）</title><link>http://www.blogjava.net/lifw/archive/2009/07/31/289316.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Fri, 31 Jul 2009 12:21:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2009/07/31/289316.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/289316.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2009/07/31/289316.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/289316.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/289316.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 您有幸加入了华为公司，我们也有幸获得了与您合作的机会。我们将在相互尊重、相互理解和共同信任的基础上，与您一起渡过在公司工作的岁月。这种尊重、理解和信任是愉快地进行共同奋斗的桥梁与纽带。 <br />
<br />
&nbsp;&nbsp;&nbsp; 华为公司不单需要有高层次、高素质的科技人才和管理人才，同时还必须有一个能被这些人才认同的价值体系，这就是说要建立一个共同拥有的企业文化。华为的企业
文化是建立在民族优良传统文化基础上的企业文化，同时，这个文化是开放的、包容的，不断吸纳世界上好的优良文化和管理的。如果把这个文化封闭起来，以狭隘
的民族自尊心，狭隘的华为自豪感，狭隘的自我品牌意识为主导，排斥别的先进文化，那么华为一定会失败的。这个企业文化粘合全体员工团结合作，走群体奋斗的
道路。有了这个平台，你的聪明才智方能很好发挥，并有所成就。没有责任心，缺乏自我批判精神，不善于合作，不能群体奋斗的人，等于丧失了在华为进步的机
会。那样您会空耗了宝贵的光阴，还不如在试用期中，重新决定您的选择。进入华为并不意味着高待遇。对新来的员工，因为没有考评记录，起点较低，晋升也许没
有您期望得那么快，为此深感歉意。公司管理是一个矩阵系统，运作起来就是一个求助网。希望您们成为这个大系统中一个开放的子系统，积
极、有效地既求助于他人，同时又给予他人支援，这样您就能充分地利用公司资源，您就能借助别人提供的基础，吸取别人的经验，很快进入角色，很快进步。求助
没有什么不光彩的，做不好事才不光彩，求助是参与群体奋斗的最好形式。如果封闭自己，怕工分不好算，想单打独斗，搞出点名堂来，是万万不可能的。就算您搞
出来，也需要较长时间，也许到那时，你的工作成果已没有什么意义了。实践是您水平提高的基础，它充分地检验了您的不足，只有暴露出来，您才会有进步。实践
再实践，尤其对青年学生十分重要。只有实践后善于用理论去归纳总结，才会有飞跃的提高。要摆正自己的位置，不怕做小角色，才有可能做大角色。有一句名言：
&#8220;没有记录的公司，迟早是要垮掉的！&#8221;多么尖锐。一个不善于总结的公司会有什么前途，个人不也是如此吗？ <br />
<br />
&nbsp;&nbsp;&nbsp; 我们崇尚雷锋、焦裕禄精神，并在公司的价值评价及价值分配体系中体现：决不让雷锋们、焦裕禄们吃亏，奉献者定当得到合理的回报。我们呼唤英雄。不让雷锋吃亏，本身就是创造让各路英雄脱颖而出的条件。雷锋精神与英雄行为的核心本质就是奉献。雷锋和英雄都不是超纯的人，也没有固定的标准，其标准是随时代变化的。在华为，一丝不苟地做好本职工作就是奉献，就是英雄行为，就是雷锋精神。 <br />
<br />
&nbsp;&nbsp;&nbsp; 实践改造了，也造就了一代华为人。&#8220;您想做专家吗？一律从基层做起&#8221;，已经在公司深入人心。进入公司一周以后，博士、硕士、学士以及在原工作单位取得的地位
均消失，一切凭实际能力与责任心定位，对您个人的评价以及应得到的回报主要取决于您实干中体现出来的贡献度。在华为，您给公司添上一块砖，公司给您提供走
向成功的阶梯。希望您接受命运的挑战，不屈不挠地前进，您也许会碰得头破血流。但不经磨难，何以成才！在华为改变自己命运的方法，只有二个：一、努力奋斗；二、做出良好的贡献。 <br />
<br />
&nbsp;&nbsp;&nbsp; 公司要求每一个员工，要热爱自己的祖国。热爱我们这个刚刚开始振兴的民族。只有背负着民族的希望，才能进行
艰苦的搏击，而无怨无悔。我们总有一天，会在世界舞台上，占据一席之地。无论任何时候、无论任何地点都不要作对不起祖国、对不起民族的事情。要模范遵守国
家法规和社会公德，要严格遵守公司的各项制度与管理规范。对不合理的制度，只有修改以后才可以不遵守。任何人不能超越法律与制度，不贪污、不盗窃、不腐
化。严于律己，帮助别人。 <br />
<br />
&nbsp;&nbsp;&nbsp; 您有时会感到公司没有您想像得公平。真正绝对的公平是没有的，您不能对这方面期望太高。但在努力者面前，机
会总是均等的，只要您不懈地努力，您的主管会了解您的。要承受得起做好事反受委屈，&#8220;烧不死的鸟就是凤凰&#8221;，这是华为人对待委屈和挫折的态度和挑选干部的
准则。没有一定的承受能力，今后如何能做大梁。其实一个人的命运，就掌握在自己手上。生活的评价，是会有误差的，但决不至于黑白颠倒，差之千里。要深信，
在华为，是太阳总会升起，哪怕暂时还在地平线下。您有可能不理解公司而暂时离开，我们欢迎您回来。您更要增加心理的承受能力，连续工龄没有了，与同期伙伴
的位置差距拉大了。我们相信您会加步赶上，但时间对任何人都是一样长的。 <br />
<br />
&nbsp;&nbsp;&nbsp; 世上有许多&#8220;欲速则不达&#8221;的案例，希望您丢掉速成的幻想，学
习日本人踏踏实实、德国人一丝不苟的敬业精神。现实生活中能把某一项技术精通是十分难的。您想提高效益、待遇，只有把精力集中在一个有限的工作面上，不然
就很难熟能生巧。您什么都想会、什么都想做，就意味着什么都不精通，做任何一件事对您都是一个学习和提高的机会，都不是多余的。努力钻进去兴趣自然在。我
们要造就一批业精于勤、行成于思，有真正动手能力和管理能力的干部。机遇偏爱踏踏实实的工作者。 <br />
<br />
&nbsp;&nbsp;&nbsp; 公司永远不会提拔一个没有基层经验的
人做高层管理者。遵循循序渐进的原则，每一个环节对您的人生都有巨大的意义，您要十分认真地去对待现在手中的任何一件工作，十分认真地走好职业生涯的每一
个台阶。您要尊重您的直接领导，尽管您也有能力，甚至更强，否则将来您的部下也不会尊重您，长江后浪总在推前浪。要有系统、有分析地提出您的建议，您是一
个有文化者，草率的提议，对您是不负责任，也浪费了别人的时间。特别是新来者，不要下车伊始，动不动就哇啦哇啦。要深入、透彻地分析，找出一个环节的问
题，找到解决的办法，踏踏实实地一点一点地去做，不要哗众取宠。 <br />
<br />
&nbsp;&nbsp;&nbsp; 公司建立了各级管理团队，在高层开放民主。在公司的授权下，各级部门首长办公会议负责日常运行的管理。部门首长办公会议是实行权威制，一旦决定了要坚决执行，有不同意见可以反映，但必须服从它的决定，以及快速反应。 <br />
<br />
&nbsp;&nbsp;&nbsp; 公司管理决策的原则是从贤不从众。管理的原则是集体负责制。这种建立在统一经营管理理念基础上的民主决策和权威管理的经营管理体制，有利于防止一长制的片面
性，在重大问题上，发挥了集体智慧。这是公司成立10年来没有摔大跟头的因素之一。民主讨论还会进一步扩展，权威管理的作用也会进一步加强，这种民主、集
中的管理，还需长期探索，希望您成为其中一员。 <br />
<br />
&nbsp;&nbsp;&nbsp; 为帮助员工不断超越自我，公司建立了各种培训中心，培训很重要，它是贯彻公司战略意
图、推动管理进步和培训干部的重要手段，是华为公司通向未来、通向明天的重要阶梯。你们要充分利用这个&#8220;大平台&#8221;，努力学习先进的科学技术、管理技能、科
学的思维方法和工作方法，培训也是你们走向成功的阶梯。当然您想获得培训，并不是没有条件的。 <br />
<br />
&nbsp;&nbsp;&nbsp; 物质资源终会枯竭，唯有文化才能生生不
息。一个高新技术企业，不能没有文化，只有文化才能支撑她持续发展，华为的文化就是奋斗文化，我也不能形象地描述什么叫华为文化，我看了&#8220;可可西里&#8221;的电
影，以及残疾人表演的&#8220;千手观音&#8221;，我想他们的精神就叫华为文化吧！对于一个新员工来说，要融入华为文化需要一个艰苦过程，每一位员工都要积极主动、脚踏
实地地在做实的过程中不断去领悟华为文化的核心价值，从而认同直至消化接纳华为的价值观，使自己成为一个既认同华为文化，又能创造价值的华为人；只有每一
批新员工都能尽早地接纳和弘扬华为的文化，才能使华为文化生生不息。 <br />
<br />
&nbsp;&nbsp;&nbsp; 华为文化的特征就是服务文化，谁为谁服务的问题一定要解决。服务的涵义是很广的，总的是为用户服务，但具体来讲，下一道工序就是用户，就是您的&#8220;上帝&#8221;。您必须认真地对待每一道工序和每一个用户。任何时间，任何地点，华为都意味着高品质。希望您时刻牢记。 <br />
<br />
&nbsp;&nbsp;&nbsp; 华为十几年来铸就的成就只有两个字――诚信，诚信是生存之本、发展之源，诚信文化是公司最重要的无形资产。信息安全关系着公司的生死存亡。员工在参与公司产
品研发、生产、销售等过程中，一是不要侵犯了别人的知识产权，二是不要将公司的智力资产泄漏出去甚至据为己有。诚信和信息安全作为对每个员工的最基本要
求，任何人只要违反，都必将受到处罚。 <br />
<br />
&nbsp;&nbsp;&nbsp; 业余时间可安排一些休闲，但还是要有计划地读些书，不要搞不正当的娱乐活动，为了您成为一个高尚的人，望您自律。 <br />
<br />
&nbsp;&nbsp;&nbsp; 我们不赞成您去指点江山，激扬文字。我们以&#8220;产业报国&#8221;的方式去关心、去爱自己的国家。目前，在中国共&nbsp;&nbsp;-&nbsp;&nbsp;产&nbsp;&nbsp;-
党领导下，国家政治稳定、经济繁荣，这就为企业的发展提供了良好的社会环境，我们要十分珍惜。21世纪是历史给予中华民族一次难得的振兴机会，机不可失，
时不再来。&#8220;21世纪究竟属于谁&#8221;，这个问题的实质是国力的较量，国际间的竞争归根到底是在大企业和大企业之间进行。国家综合国力的增强需要无数大企业组
成的产业群去支撑。一个企业要长期保持在国际竞争中的优势，唯一的办法便是拥有自己的竞争力。当华为拥有知识产权的产品以强劲的竞争力冲出亚洲，走向世界
的时候，它代表着一个国家向全世界展示：中国不但过去曾经是文化科技大国，今天、明天、后天&#8230;&#8230;，还会再创辉煌。 <br />
<br />
&nbsp;&nbsp;&nbsp; 希望您加速磨炼，茁壮成长，我们将一起去托起明天的太阳。
<img src ="http://www.blogjava.net/lifw/aggbug/289316.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2009-07-31 20:21 <a href="http://www.blogjava.net/lifw/archive/2009/07/31/289316.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2下freemarker访问静态方法和静态变量 </title><link>http://www.blogjava.net/lifw/archive/2009/07/25/288298.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Sat, 25 Jul 2009 00:55:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2009/07/25/288298.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/288298.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2009/07/25/288298.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/288298.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/288298.html</trackback:ping><description><![CDATA[<div>摘自：http://blog.csdn.net/lovelyxiaoyu/archive/2009/05/15/4189011.aspx</div>
<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;">${stack.findValue(</span><span style="color: #000000;">"</span><span style="color: #000000;">@package.ClassName@method</span><span style="color: #000000;">"</span><span style="color: #000000;">)}<br />
${stack.findValue(</span><span style="color: #000000;">"</span><span style="color: #000000;">@package.ClassName@property</span><span style="color: #000000;">"</span><span style="color: #000000;">)}<br />
因为&nbsp;stack&nbsp;是webwork结合&nbsp;freemarker&nbsp;后在&nbsp;ftl&nbsp;中可以用的，其他的还有&nbsp;${base}等等</span></div>

<img src ="http://www.blogjava.net/lifw/aggbug/288298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2009-07-25 08:55 <a href="http://www.blogjava.net/lifw/archive/2009/07/25/288298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java写大数据到 excel文件</title><link>http://www.blogjava.net/lifw/archive/2009/07/11/286406.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Sat, 11 Jul 2009 15:21:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2009/07/11/286406.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/286406.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2009/07/11/286406.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/286406.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/286406.html</trackback:ping><description><![CDATA[来自：javaeye网站<br/ />
<div>biguan 写道</div>
<div>
<div>tidus2005 写道</div>
<div>
<div>biguan 写道</div>
<div>我同事最近要把1000万条记录从数据库导到excel里，在我的帮助下解决了。<br />
呵呵。原创的。<br />
因每个excel最多放5万条，所以他把这1000万条记录记录放到了200个excel文件里。用时40分钟。<br />
采用基本的jdbc技术+io流。<br />
1.先进一个excel文件。填上要的表头和两条记录。然后另存为网页a.html。<br />
2.用记事本打开网页a.html，就看到源代码。把源代码分成三部分：头+记录行+尾。<br />
3.用jdbc访问数据库，循环遍历，每5万条，用io流写文件，格式为"xxx.xls&#8221;。<br />
a.html的头代码+记录行代码（已经被5万条替换）+尾代码。</div>
<br />
<br />
<br />
没有看太懂你的意思， 用html是干什么？<br />
</div>
<br />
用java的io写txt格式的文件，大家都会吧？ <br />
<br />
其实，也可以用java的io写xls格式的文件的。关键是你得按一定的excel文件格式写，才能保证生成的是excel文件。 <br />
<br />
这个格式怎样得到呢？方法是这样： <br />
<br />
你先建一个excel文件，如a.xls。填上两条伪数据。然后另存为网页，即htm格式，如a.htm。 <br />
<br />
然后，用记事本打开htm格式的a.htm，这样excel文件格式代码就暴露在你面前。 <br />
<br />
剩下的事，呵呵，就是把a.htm源代码的伪数据部分，替成数据库里的数据，然后把替换后的整个a.htm源代码，用java的io写成一个<strong>后缀为xls的文件</strong>。就打完收工了。 <br />
<br />
注意：为了不给内存增加压力，要把a.htm源代码分成三部分：头（伪数据部分 前的代码） + 伪数据部分 + 尾（伪数据部分 后的代码）。 <br />
先把 头 写到文件，并flush。然后是 伪数据部分 ,替一条数据库里的记录就写到文件里，并flush。最后把 尾 写到文件，并flush。 </div>
<br />
<br />
呵呵，你的方法很好啊，其实我本来也想到直接用io生成XLS文件的，不会我是直接用记事本打开的，结果看到乱码 - -<br />
<br />
还有写io你提到了重点，就是要经常flush，不然数据大就OOM了。<br />
<br />
我的方法也主要就是拼字符串，还有就是从数据库读取的数据采用分页的形式，用list分次读取出来，结束采用list.clear()一下，及时把资源释放。

<img src ="http://www.blogjava.net/lifw/aggbug/286406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2009-07-11 23:21 <a href="http://www.blogjava.net/lifw/archive/2009/07/11/286406.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2的Result Type</title><link>http://www.blogjava.net/lifw/archive/2009/06/18/283008.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Thu, 18 Jun 2009 03:15:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2009/06/18/283008.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/283008.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2009/06/18/283008.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/283008.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/283008.html</trackback:ping><description><![CDATA[转自：http://savefrom.javaeye.com/blog/305413
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">.&nbsp;chain&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用来处理Action链&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">4</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.opensymphony.xwork2.ActionChainResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">6</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">7</span><span style="color: rgb(0, 0, 0);">.&nbsp;dispatcher&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">8</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">9</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用来转向页面，通常处理JSP&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">10</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">11</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.ServletDispatcherResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">12</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">13</span><span style="color: rgb(0, 0, 0);">.&nbsp;freemaker&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">14</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">15</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;处理FreeMarker模板&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">16</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">17</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.views.freemarker.FreemarkerResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">18</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">19</span><span style="color: rgb(0, 0, 0);">.&nbsp;httpheader&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">20</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">21</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;控制特殊HTTP行为的结果类型&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">22</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">23</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.HttpHeaderResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">24</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">25</span><span style="color: rgb(0, 0, 0);">.&nbsp;redirect&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">26</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">27</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;重定向到一个URL&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">28</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">29</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.ServletRedirectResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">30</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">31</span><span style="color: rgb(0, 0, 0);">.&nbsp;redirectAction&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">32</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">33</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;重定向到一个Action&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">34</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">35</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.ServletActionRedirectResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">36</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">37</span><span style="color: rgb(0, 0, 0);">.&nbsp;stream&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">38</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">39</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;向浏览器发送InputSream对象，通常用来处理文件下载，还可用于返回AJAX数据&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">40</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">41</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.StreamResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">42</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">43</span><span style="color: rgb(0, 0, 0);">.&nbsp;velocity&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">44</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">45</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;处理Velocity模板&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">46</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">47</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.VelocityResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">48</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">49</span><span style="color: rgb(0, 0, 0);">.&nbsp;xslt&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">50</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">51</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;处理XML</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">XLST模板&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">52</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">53</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.views.xslt.XSLTResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">54</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">55</span><span style="color: rgb(0, 0, 0);">.&nbsp;plainText&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">56</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">57</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;显示原始文件内容，例如文件源代码&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">58</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">59</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.PlainTextResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">60</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">61</span><span style="color: rgb(0, 0, 0);">.&nbsp;redirect</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">action&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">62</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">63</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;重定向到一个Action&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">64</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">65</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.ServletActionRedirectResult&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">66</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">67</span><span style="color: rgb(0, 0, 0);">.&nbsp;plaintext&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">68</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">69</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;显示原始文件内容，例如文件源代码&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">70</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">71</span><span style="color: rgb(0, 0, 0);">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.PlainTextResult&nbsp; <br />
</span></div>
<img src ="http://www.blogjava.net/lifw/aggbug/283008.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2009-06-18 11:15 <a href="http://www.blogjava.net/lifw/archive/2009/06/18/283008.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Strtus2 Convention Plugin </title><link>http://www.blogjava.net/lifw/archive/2009/06/17/282840.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Wed, 17 Jun 2009 05:49:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2009/06/17/282840.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/282840.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2009/06/17/282840.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/282840.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/282840.html</trackback:ping><description><![CDATA[<br />
转载自：http://blog.163.com/lennon.wang/blog/static/2135606200942215038914/<br />
<br />
<br />
<span style="font-size: small;">1.官方介绍的地址： <br />
<br />
<a href="http://struts.apache.org/2.1.6/docs/convention-plugin.html" target="_blank">http://struts.apache.org/2.1.6/docs/convention-plugin.html</a>
<br />
<br />
<br />
2.struts.xml文件配置 <br />
<br />
只挑选几个重要的常量说明： <br />
<br />
(1) &lt;constant
name="struts.locale" value="zh_CN"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant
name="struts.i18n.encoding" value="UTF-8"/&gt; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
struts2.1.6&nbsp;
现在只需要一个struts.xml文件就可以了。以前配struts.locale=zh_CN，struts.i18n.encoding＝UTF-
8，应用起动时会报一个警告，说没有配置locale，必须要在struts.properties里面配置才不会报错，现在这个问题已经解决了，所有配
置都可以在xml文件中指定了。 <br />
<br />
<br />
(2) &lt;constant name="struts.action.extension"
value="action,do,,"/&gt; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
扩展名可以指定为空。这样地址栏比较好看。但也会有个问题，就是一些其他servlet映射，如cxf，我们会映射地址为/services/*，现在这
个地址也变成struts2控制范围的地址了，如果按默认的配置会报找不到action的错误。解决办法是修改mapper类。这在以后文章中会提到。
<br />
<br />
<br />
(3)&nbsp; &lt;constant name="struts.enable.DynamicMethodInvocation"
value="true"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant
name="struts.enable.SlashesInActionNames" value="true"/&gt; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
开启动态方法。要实现零配置，就是需要动态方法调用。开启action名称可以有
&#8220;/&#8221;，一个请求地址有多个&#8220;/&#8221;，struts2就不会再使用类路径扫描的命名空间，只会使用配置的名称。所以既想action名称里使用&#8220;/&#8221;，又想用struts2默认搜索的命名空间，只能自己修改一下convention插件的实现类了。
<br />
<br />
<br />
(4) &lt;constant name="struts.ui.theme" value="simple"/&gt;
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不用dojo的及struts2复杂标签样式的就把主题设置为simple，这样可以不加载多余的模板。 <br />
<br />
<br />
(5)
&lt;constant name="struts.devMode" value="true"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant
name="struts.i18n.reload" value="true"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant
name="struts.configuration.xml.reload" value="true"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant
name="struts.convention.classes.reload" value="true" /&gt; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
开启开发者模式，在平时开发时修改action的annotation配置可以不重启，但是修改struts.xml文件还是要重启。修改类的具体内容，debug模式下可以不重启，或是使用javarebel，这个不在讨论范围。
<br />
<br />
<br />
(6)&nbsp; &lt;constant name="struts.convention.result.path"
value="/WEB-INF/pages/"/&gt; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定结果页面路径。
convention插件会自动在此路径中寻找文件。放到WEB-INF的目的的保护文件资源，只能通过程序内部跳转才能访问，我们的权限拦截器或其他权限处理只要加到action上就可以了。
<br />
<br />
<br />
(7) &lt;constant name="struts.convention.action.suffix"
value="Action"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant
name="struts.convention.action.name.lowercase" value="true"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;
&lt;constant name="struts.convention.action.name.separator" value="_"/&gt;
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 一个action名字的获取。比如为HelloWorldAction。按照配置，actionName为hello_world。
<br />
<br />
<br />
(8)&lt;constant name="struts.convention.action.disableScanning"
value="false"/&gt; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 是否不扫描类。一定要设为false，否则convention插件不起作用，零配置也没有意义。
<br />
<br />
<br />
(9)&lt;constant name="struts.convention.default.parent.package"
value="default"/&gt; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;
设置默认的父包，一般我们都设置一个default包继承自struts-default。大部分类再继承default。如果有特殊的类需要特殊的包，只能在action中再指定父包了。
<br />
<br />
<br />
(10) &lt;constant name="struts.convention.package.locators"
value="action"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constant
name="struts.convention.package.locators.disable" value="false"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;constant name="struts.convention.package.locators.basePackage" value=""/&gt;
<br />
<br />
确定搜索包的路径。只要是结尾为action的包都要搜索。basePackage按照默认不用配置，如果配置，只会找以此配置开头的包。locators及locators.basePackage都是一组以逗号分割的字符串。
<br />
<br />
<br />
(11)&nbsp; &lt;constant
name="struts.convention.exclude.packages"
value="org.apache.struts.*,org.apache.struts2.*,org.springframework.web.struts.*,org.springframework.web.struts2.*,org.hibernate."/&gt;
<br />
<br />
排除哪些包不搜索。按默认配置即可。逗号分割字符串。 <br />
<br />
<br />
(12)&nbsp; &lt;constant
name="struts.convention.action.includeJars" value="" /&gt;
<br />
<br />
包括哪些jar包中的action。逗号分割字符串。 <br />
<br />
<br />
(13)&lt;constant
name="struts.convention.relative.result.types"
value="dispatcher,freemarker,velocity"/&gt;
<br />
<br />
默认返回的结果类型搜索。按顺序先找相关的dispatcher的jsp文件是否存在。然后再找freemarker，再找velocity。
<br />
<br />
<br />
(14)&lt;constant name="struts.convention.result.flatLayout"
value="true"/&gt; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
如果此值设为true，如果一个action的命名空间为/login，名称为HelloWorldAction。result返回值是success，
默认会找到/WEB-INF/pages/login/hello_world.jsp（如果有hello_world_success.jsp就找这个
文件，连接符&#8220;_&#8221;是在&lt;constant name="struts.convention.action.name.separator"
value="_"/&gt;中配置的）。如果有一个action的result返回值是&#8220;error&#8221;，就会找/WEB-INF/pages
/login/hello_world_error.jsp。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
如果此值设为false，如果一个action的命名空间为/login，名称为HelloWorldAction。result返回值是success，默认会找到/WEB-
INF/pages/login/hello_world/index.jsp（如果有success.jsp就找这个文件）。如果有一个action的result返回值是&#8220;error&#8221;，就会找/WEB-INF/pages
/login/hello_world/error.jsp。 <br />
<br />
<br />
(15) &lt;constant
name="struts.convention.action.mapAllMatches" value="false"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;constant name="struts.convention.action.checkImplementsAction"
value="false"/&gt; <br />
&nbsp;&nbsp; &lt;constant
name="struts.mapper.alwaysSelectFullNamespace" value="false"/&gt; <br />
&nbsp;&nbsp;
&lt;constant name="struts.convention.redirect.to.slash" value="true"/&gt;
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这几个配置没有太多的实际意义，本着最小检查的原则就可以。
<br />
<br />
<br />
(16)默认拦截器配置，已经简化了许多，一般不需要chain和
fileupload。modelDriven也没什么用，如果我们要使用restfull插件会有用。其实最简单只要一个params就可以了。我加入
exception是为了开发时的异常。servletConfig是为了包装一下request,reponse等对象，staticParams是为
了可以配置${}形式参数。actionMappingParams是struts2.1新增的，我初步认为是可以在action配置中传参数，这个还有
些疑问。</span>
<br />
<br />
<br />
<span style="font-size: small;">1.action配置 <br />
<br />
&nbsp;&nbsp;
按照第一篇中的配置，设置locator为action，则默认一个类的命名空间为： <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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 命名空间
<br />
com.example.action.MainAction&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;&nbsp;&nbsp;&nbsp; /
<br />
com.example.action.products.Display -&gt;&nbsp;&nbsp;&nbsp; /products <br />
<br />
&nbsp;&nbsp;&nbsp; 完整url为：
<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;&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;&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;
完整url <br />
com.example.action.MainAction&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;&nbsp;&nbsp;
-&gt; /main
<br />
com.example.action.products.Display&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; -&gt;
/products/display <br />
com.example.action.company.ShowCompanyDetailsAction -&gt;
/company/details/show_company_details <br />
<br />
<br />
<br />
3.action类写法 <br />
&nbsp;&nbsp;&nbsp;
如果要实现基本零配置，命名空间和action名称按照默认的类路径搜索。默认执行方法是execute。方法返回值是success，就会找。</span>
<br />
<br />
<div>
<div>
<div>Java代码 <a title="复制代码" href="http://corradignw.javaeye.com/blog/353600#"><img title="Strtus2 Convention Plugin  - 王佳 - 王佳的blog" alt="复制代码" src="http://corradignw.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol>
    <li><span>package<span>&nbsp;com.example.action;
    &nbsp;&nbsp;</span></span></li>
    <li>&nbsp;&nbsp;</li>
    <li>import<span>&nbsp;com.opensymphony.xwork2.ActionSupport;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;</li>
    <li>public&nbsp;class&nbsp;HelloWorld&nbsp;extends&nbsp;ActionSupport&nbsp;{ &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private<span>&nbsp;String&nbsp;message;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getMessage()&nbsp;{ &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<span>&nbsp;message;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public<span>&nbsp;String&nbsp;execute()&nbsp;{
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;=&nbsp;"Hello&nbsp;World!&nbsp;excute"; &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<span>&nbsp;SUCCESS;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public<span>&nbsp;String&nbsp;edit()&nbsp;{
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;=&nbsp;"Hello&nbsp;World!&nbsp;edit"; &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;"xyz"; &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public<span>&nbsp;String&nbsp;delete()&nbsp;{
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;=&nbsp;"Hello&nbsp;World!&nbsp;delete"; &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;"depp"; &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;">package com.example.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorld extends ActionSupport {
private String message;
public String getMessage() {
return message;
}
public String execute() {
message = "Hello World! excute";
return SUCCESS;
}
public String edit() {
message = "Hello World! edit";
return "xyz";
}
public String delete() {
message = "Hello World! delete";
return "depp";
}
}</pre>
<br />
<br />
<span style="font-size: small;"><br />
&nbsp;&nbsp;&nbsp; 返回结果对应：
<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
实际url(WEB-INF/pages) <br />
/hello_world&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;
/hello_world.jsp或/hello_world_success.jsp
<br />
/hello_world!edit&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; /hello_world_xyz.jsp
<br />
/hello_world!delete&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; /hello_world_depp.jsp
<br />
<br />
&nbsp;&nbsp;&nbsp; 基本的零配置就是这样，如果要有redirect、chain等跳转方式，interceptor的配置，就要加入annotation。
<br />
<br />
<br />
2.action类中的annotation
<br />
<br />
convention插件的annotation都在annotation这个包中，基本和xml配置相对应。 <br />
<br />
&nbsp;&nbsp;&nbsp;
annotation&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 作用域
<br />
ParentPackage&nbsp;&nbsp;
指定继承的包(struts2)名&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包，类
<br />
Namespaces&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 给一个action指定多个命名空间(一般不用)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包，类
<br />
Namespace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定一个命名空间(一般不用，按默认的类路径即可)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包，类，Namespaces注解中
<br />
actions&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
给一个action指定多个名称&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 方法
<br />
action&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
指定一个action名称&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
类，方法，actions注解中 <br />
InterceptorRefs 一组拦截器集合(只能是名称，必须先在xml文件中配置好)&nbsp; 类，action注解中&nbsp;
<br />
InterceptorRef&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;&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;
类，InterceptorRefs注解中 <br />
ResultPath&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
结果映射的路径(已经在struts.xml文件中指定)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包，类 <br />
Results&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;&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;&nbsp;&nbsp; 类，action注解中
<br />
Result&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;
类，Results注解中 <br />
<br />
&nbsp;&nbsp;&nbsp; 需要注意：
<br />
<br />
1）包(java)级别是在package-info.java这个文件中配置，可以配置整个包的定义，但是命名空间就不能按默认的类路径扫描了，必须也要显式的配置。所以这个文件最好不要使用。
<br />
<br />
2）不在包(java)级别配置就要在类(java)级别配置，可能每个类都要写一句ParentPackage，指定继承的包(struts2)，以获得父包中的拦截器配置及其他公用配置。如果没有特殊的拦截器配置则不用配置ParentPackage。
<br />
<br />
3）最好把annotation配到类级别，因为这样action名称及命名空间都可用默认的类路径扫描，不用我们显式的配置。只要配置
特殊的result和拦截器即可。类中的其他方法使用动态方法调用的方式使用同一个配置。我们知道struts2所有配置都是启动加载到map中的，减少
配置，会提高一定性能。而动态方法这种模式是零配置必不可少的，但我很不喜欢叹号出现在地址栏中，所以在后面的文章中我会结合restful插件及自己修
改源代码实现意义上的动态方法调用，但形式上是别的方式，地址栏会比较美观。</span>
<br />
<div>
<div>
<div>Java代码 <a title="复制代码" href="http://corradignw.javaeye.com/blog/353600#"><img title="Strtus2 Convention Plugin  - 王佳 - 王佳的blog" alt="复制代码" src="http://corradignw.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol>
    <li><span>package<span>&nbsp;com.example.action;
    &nbsp;&nbsp;</span></span></li>
    <li>&nbsp;&nbsp;</li>
    <li>import<span>&nbsp;com.opensymphony.xwork2.ActionSupport;
    &nbsp;&nbsp;</span></li>
    <li>import<span>&nbsp;org.apache.struts2.convention.annotation.Result;
    &nbsp;&nbsp;</span></li>
    <li>import<span>&nbsp;org.apache.struts2.convention.annotation.Results;
    &nbsp;&nbsp;</span></li>
    <li>import<span>&nbsp;org.apache.struts2.convention.annotation.InterceptorRef;
    &nbsp;&nbsp;</span></li>
    <li>import<span>&nbsp;org.apache.struts2.convention.annotation.InterceptorRefs;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;</li>
    <li>@InterceptorRefs<span>({
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;@InterceptorRef("interceptor-1"), &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;@InterceptorRef("defaultStack") &nbsp;&nbsp;</li>
    <li>}) &nbsp;&nbsp;</li>
    <li>@Results<span>({
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;@Result(name="reload",location="hello_world",type="redirectAction"<span>,params={key1,value1,key2,value2}),
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;@Result(name="chainact",location="hello_world!edit",type="chain") &nbsp;&nbsp;</li>
    <li>}) &nbsp;&nbsp;</li>
    <li>public&nbsp;class&nbsp;HelloWorld&nbsp;extends&nbsp;MyBaseAction&nbsp;{ &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private<span>&nbsp;String&nbsp;message;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getMessage()&nbsp;{ &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<span>&nbsp;message;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public<span>&nbsp;String&nbsp;execute()&nbsp;{
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;=&nbsp;"Hello&nbsp;World!&nbsp;excute"; &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<span>&nbsp;SUCCESS;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public<span>&nbsp;String&nbsp;edit()&nbsp;{
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;=&nbsp;"Hello&nbsp;World!&nbsp;edit"; &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<span>&nbsp;RELOAD;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public<span>&nbsp;String&nbsp;delete()&nbsp;{
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;=&nbsp;"Hello&nbsp;World!&nbsp;delete"; &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<span>&nbsp;CHAINACT;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;">package com.example.action;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
@InterceptorRefs({
@InterceptorRef("interceptor-1"),
@InterceptorRef("defaultStack")
})
@Results({
@Result(name="reload",location="hello_world",type="redirectAction",params={key1,value1,key2,value2}),
@Result(name="chainact",location="hello_world!edit",type="chain")
})
public class HelloWorld extends MyBaseAction {
private String message;
public String getMessage() {
return message;
}
public String execute() {
message = "Hello World! excute";
return SUCCESS;
}
public String edit() {
message = "Hello World! edit";
return RELOAD;
}
public String delete() {
message = "Hello World! delete";
return CHAINACT;
}
}
</pre>
<br />
<span style="font-size: small;"><br />
4）如果有极其特殊的情况需要为action的每个方法
单独配置，这时就不能用默认的类扫描了，必须是先配置action，指定名称，再在action中配置result和interceptor。这就会使配
置增多，违背的零配置的初衷。有时我们为了性能原因想把拦截器细化到具体的action上，我想如果真是这样，我们还不如再写一个action类。还有
struts2.1.6原有的配置是如果action名称中有&#8220;/&#8221;，会认为这是一个命名空间，不会再按照类扫描的默认值。例如：</span>
<br />
<div>
<div>
<div>Java代码 <a title="复制代码" href="http://corradignw.javaeye.com/blog/353600#"><img title="Strtus2 Convention Plugin  - 王佳 - 王佳的blog" alt="复制代码" src="http://corradignw.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol>
    <li><span>package<span>&nbsp;com.example.action;
    &nbsp;&nbsp;</span></span></li>
    <li>&nbsp;&nbsp;</li>
    <li>import<span>&nbsp;com.opensymphony.xwork2.ActionSupport;
    &nbsp;&nbsp;</span></li>
    <li>import<span>&nbsp;org.apache.struts2.convention.annotation.Action;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;</li>
    <li>public&nbsp;class&nbsp;HelloWorld&nbsp;extends&nbsp;ActionSupport&nbsp;{ &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;@Action("/different/url") &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public<span>&nbsp;String&nbsp;execute()&nbsp;{
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<span>&nbsp;SUCCESS;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;@Action("url") &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;doSomething()&nbsp;{ &nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<span>&nbsp;SUCCESS;
    &nbsp;&nbsp;</span></li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;">package com.example.action;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Action;
public class HelloWorld extends ActionSupport {
@Action("/different/url")
public String execute() {
return SUCCESS;
}
@Action("url")
public String doSomething() {
return SUCCESS;
}
}
</pre>
<br />
<span style="font-size: small;"><br />
&nbsp;&nbsp;&nbsp; 调用方法execute的url为 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
/different/url (命名空间已经更换) <br />
&nbsp;&nbsp;&nbsp; 调用方法doSomething的url为 :&nbsp;&nbsp; /url
<br />
<br />
5）比较别扭的地方就是拦截器的配置，必须用名称，而名称和实际拦截器类的对应关系是在struts.xml文件中声明的，如果用
struts2以前的annotation是可以直接配置拦截器类的，但是我没有和convention插件结合使用，这个问题我正在研究，看看有没有好
的办法。 <br />
<br />
6）还有一种默认的chain跳转，实际是在struts2.1.6中新增的unknownHandleder中设定的，没有什么太大作用，我们可以不使用。而unknownHandleder我们可以自定义为其他，这在后面的文章中会有说明。
<br />
<br />
<br />
</span><span style="font-size: small;">1.Convention插件的主要实现浅析
<br />
<br />
1.1&nbsp; PackageBasedActionConfigBuilder 这个类最重要，是整个程序的入口。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;
1.1.1&nbsp;
buildActionConfigs方法进行初始化配置，其中findActions扫描类路径，我没有深入研究这个方法具体是怎么找到所有类的。只是
找到全部类后，和我们的配置文件中限定的范围匹配、过滤，存入一个set中。然后buildConfiguration(set)循环分析这些类。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 1.1.2&nbsp;
buildConfiguration方法，首先创建一个map类型的packageConfigs。键为包（struts2）名，值为PackageConfig.Builder对象，这个对象可以创建PackageConfig对象。
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后循环找到的类，分析包名（java），determineActionNamespace方法分析命名空间，得到一个list对象。
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 再循环所有命名空间，determineActionName方法分析类名称、类的默认方法（这个是写死在程序中的，就是execute方法）。
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getPackageConfig方法分析得到PackageConfig.Builder对象。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
getActionAnnotations方法分析得到action类方法的annotation配置。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
循环每个方法的配置，调用createActionConfig方法分析，把
results，interceptors，exceptionMappings等配置放入ActionConfig.Builder对象，再把
ActionConfig对象（由ActionConfig.Builder生成）放入PackageConfig.Builder中。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buildIndexActions创建默认索引action。这个好像用处不大。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
最后把PackageConfig对象放入Configuration对象中，这是最顶级的配置。我们在任何时间和地点都可以得到Configuration对象，并对其进行分析。
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 1.1.3&nbsp;&nbsp;
determineActionNamespace方法是确定一个action类在web应用中的命名空间，先找这个类的Namespace注解，找到后
放入一个存储命名空间的list。再找Namespaces注解，一个action可以有多个命名空间。如果有注解则按照注解来确定一个action的命
名空间，如果没有，则分析这个action所在包（java）的路径，按照struts2.xml中配置的规则来确定。这个规则就是截取到定义的
locator，在这个locator之后的包（java）全部作为命名空间，类名作为action名称。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 1.1.4&nbsp;&nbsp;
determineActionName方法是确定一个action类在web应用中的名称。由ActionNameBuilder（接口）的方法来实
现，这个接口的具体实现类，插件默认为SEOActionNameBuilder。被称为搜索引擎友好的名称。会把action类的name按单词分解，
然后用连接符连起来。默认连接符是"-"，我们可以设置为"_"。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 1.1.5&nbsp;&nbsp;
getPackageConfig方法是确定一个action类在web应用中的继承的包（struts2）。先找这个类的ParentPackage注
解，如果有注解则按照注解来确定一个action的父包（struts2），如果没有，按照struts.xml中配置的规则来确定。这个规则就是
defaultParentPackage。得到父包（struts2）后要拼成： actionPackage + "#" +
parentPkg.getName() + "#" + actionNamespace 的形式，这是xwork里的规定。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 1.1.6&nbsp;&nbsp;
getActionAnnotations方法是确定一个action类的方法上的annotation配置。先找方法的Actions注解，一个方法可
以有多个action映射。再找Action注解，放入一个map中，键是方法名，值是存储一组acton映射的list对象。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.1.7&nbsp;&nbsp;
createActionConfig方法构造ActionConfig.Builder对象，逐一判断
interceptors，results，exceptionMappings，都是从类一级开始判断是否有此注解，再从方法的action注解中寻
找。InterceptorMapBuilder，ResultMapBuilder是两个接口，提供通过注解构造Interceptor和Result
的方法，插件分别提供了默认的实现DefaultInterceptorMapBuilder和DefaultResultMapBuilder。而
buildExceptionMappings只是本类中的一个方法。 <br />
<br />
1.2&nbsp; DefaultInterceptorMapBuilder <br />
&nbsp;&nbsp;&nbsp;&nbsp;
先找action类是否存在InterceptorRefs注解，再看是否存在InterceptorRef注解，再看action注解中是否定义了InterceptorRefs。
<br />
&nbsp;&nbsp;&nbsp;&nbsp;
还用到了StringTools的createParameterMap方法把注解中的params（形式为{key1,value1,key2,value2,......}）转化成一个map。
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
buildInterceptorList方法利用了xwork中的InterceptorBuilder的一个静态方法constructInterceptorReference把拦截器注入到配置中。
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
而一个action所继承的父包中的拦截器，或是默认拦截器，并不在这个类中构造。而是由xwork根据包（struts2）的继承关系加载（actionPackage
+ "#" + parentPkg.getName() + "#" + actionNamespace
这是xwork里规定的形式，已经由PackageBasedActionConfigBuilder 配置）。 <br />
<br />
1.3
DefaultResultMapBuilder <br />
&nbsp;&nbsp;&nbsp;
1.3.1&nbsp;
build方法，确定defaultResultPath，构造包含ResultConfig的map对象，再通过扩展名获得一个包含
ResultTypeConfig的map对象。createFromResources方法获得默认返回结果页面，然后查找action注解中的
results配置，再找类级别的Results注解，再找类级别的Result注解，相同的肯定会覆盖。createFromAnnotations。
<br />
<br />
&nbsp;&nbsp;&nbsp; 1.3.2&nbsp;
createFromResources方法中使用servletContext.getResourcePaths方法寻找页面。如果
struts.xml中配置flatLayout为true则直接找到以命名空间为名称的文件夹，在此文件夹中寻找页面，如果flatLayout为
false，则会找到以命名空间为名称的文件夹，再找到此文件夹中的以action名称命名的子文件夹，在这个文件夹中寻找页面。 <br />
<br />
&nbsp;&nbsp;&nbsp; 1.3.3&nbsp;
makeResults方法找默认的返回页面，如果没有路径没有包含resultcode（定义的字符串）的页面，则按默认顺序寻找
success，input，error。比如hello_world.jsp文件（flatLayout为true，连接符为"_"），如果没有
hello_world_success.jsp，hello_world_input.jsp，hello_world_error.jsp文件，同
时"success"，"input"，"error"，又没有显式的配置，只是作为结果字符串返回，则程序默认会用hello_world.jsp来匹
配三种结果。如果结果字符串resultcode是"edit"，同时又没有显式的配置，则必会找hello_world_edit.jsp。 <br />
<br />
&nbsp;&nbsp;&nbsp; 1.3.4&nbsp; createFromAnnotations这个方法就是把注解转换成ResultConfig配置。 <br />
<br />
1.4
ConventionsServiceImpl <br />
&nbsp;&nbsp;&nbsp;
是result配置的辅助类。determineResultPath方法先判断struts.xml文件中的配置，再判断action类的注解中是否有ResultPath，如果有将覆盖struts.xml中配置。
<br />
&nbsp;&nbsp;&nbsp;&nbsp; getResultTypesByExtension方法提供一个map对象，默认的result结果返回。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
其实通过看这些方法，我们也基本了解了struts2的整个配置过程，非常繁琐，很多的判断确实很耗费资源，使用xml配置也一样。我们也知道所有配置信息都是应用启动时加载，存入map中常驻内存。所以我们应该尽可能减少配置，多使用动态方法调用。
<br />
<br />
1.5&nbsp; ConventionUnknownHandler
是UnknownHandler接口的一个实现，用来处理找不到相应配置的情况。在struts2.1的dtd中新增了一个&lt;unknown-handler-stack&gt;元素，可以配置一组handler。
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handleUnknownAction方法处理找不到action的情况。这个我感觉用处不大。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
handleUnknownResult方法处理找不到result的情况。这个方法可以有很多扩展。比如我想定义一种返回值形式：redirect-&gt;xxx.do?ad=12或chain-&gt;xxx.do。用这种形式比写注解要方便的多。
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handleUnknownActionMethod方法处理找不到action中方法的情况。这个默认没有实现。</span>
<img src ="http://www.blogjava.net/lifw/aggbug/282840.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2009-06-17 13:49 <a href="http://www.blogjava.net/lifw/archive/2009/06/17/282840.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转：解决Maven中OutOfMemory错误</title><link>http://www.blogjava.net/lifw/archive/2009/06/10/281045.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Wed, 10 Jun 2009 01:01:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2009/06/10/281045.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/281045.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2009/06/10/281045.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/281045.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/281045.html</trackback:ping><description><![CDATA[<h3 class="type_original" title="原创">转自：http://juvenshun.javaeye.com/blog/240257</h3>
---------------------------------------------------------------------------<br />
<h3 class="type_original" title="原创"><a href="http://juvenshun.javaeye.com/blog/240257">解决Maven中OutOfMemory错误</a></h3>
<strong>关键字: maven outofmemoryerror</strong>
<p>当Maven项目很大，或者你运行诸如 mvn site 这样的命令的时候，maven运行需要很大的内存，在默认配置下，就可能遇到java的堆溢出。如：</p>
<div class="quote_title"> </div>
<div class="quote_div">[INFO] Building jar:
/home/dl9pf/svn/mindquarry/mindquarry-jcr/mindquarry-jcr-changes/target/mindquarry-migration-with-dependencies.jar<br />
[INFO] ------------------------------------------------------------------------<br />
[ERROR] FATAL ERROR<br />
[INFO] ------------------------------------------------------------------------<br />
[INFO] Java heap space<br />
[INFO] ------------------------------------------------------------------------<br />
[INFO] Trace<br />
java.lang.OutOfMemoryError: Java heap space<br />
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:99)<br />
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:518)<br />
...<br />
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)<br />
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)<br />
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)<br />
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)<br />
[INFO] ------------------------------------------------------------------------<br />
[INFO] Total time: 7 minutes 14 seconds<br />
[INFO] Finished at: Wed Sep 05 07:44:55 CEST 2007<br />
[INFO] Final Memory: 37M/63M<br />
[INFO] ------------------------------------------------------------------------
</div>
<p>解决的方法是调整java的堆大小的值。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2><span style="font-size: small;"><strong><span>Windows环境中</span>
</strong>
</span>
</h2>
<p><span style="font-size: small;"><strong>
</strong></span>
<strong> 找到文件<em>%M2_HOME%\bin\mvn.bat</em>
，这就是启动Maven的脚本文件，在该文件中你能看到有一行注释为：</strong></p>
<p><strong>&nbsp; @REM set MAVEN_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE...</strong></p>
<p><strong>它的意思是你可以设置一些Maven参数，我们就在注释下面加入一行：</strong></p>
<div class="quote_title"><strong> </strong></div>
<div class="quote_div"><strong>set MAVEN_OPTS= -Xms128m -Xmx512m</strong></div>
<p><strong>之后，当你运行Maven命令如 mvn -version 的时候，你会看到如下的输出：</strong></p>
<div class="quote_title"><strong> </strong></div>
<div class="quote_div"><strong>E:\test&gt;mvn -version<br />
<br />
E:\test&gt;set MAVEN_OPTS= -Xms128m -Xmx512m<br />
Maven version: 2.0.9<br />
Java version: 1.6.0_07<br />
OS name: "windows 2003" version: "5.2" arch: "x86" Family: "windows"</strong></div>
<p><strong>我们看到，配置的Maven选项生效了，OutOfMemoryError也能得以相应的解决。</strong></p>
<p><strong>&nbsp;</strong></p>
<p><strong>&nbsp;</strong></p>
<h2><span style="font-size: small;"><strong><strong><span>Linux环境中</span>
</strong>
</strong></span>
</h2>
<p><span style="font-size: small;"><strong><strong>
</strong></strong></span>
<strong><strong>也可以通过设置环境变量解决该问题， 如，编辑文件<em> /etc/profile</em>
如下</strong></strong></p>
<div class="quote_title"><strong><strong> </strong></strong></div>
<div class="quote_div"><strong><strong>MAVEN_OPTS=-Xmx512m<br />
export JAVA_HOME MAVEN_HOME MAVEN_OPTS JAVA_BIN PATH CLASSPATH</strong></strong></div>
<p><strong><strong>&nbsp;</strong></strong></p>
<p><strong><strong>&nbsp;</strong></strong></p>
<h2><strong><strong><strong><span style="font-size: small;">如果你使用Hudson</span>
</strong>
</strong></strong></h2>
<p><strong><strong><strong>
</strong>
</strong></strong></p>
<p><strong><strong>用 Hudson + Maven做持续集成，并不幸也遇到了类似的错误，那么上述两种方式都将不再起作用了，因为Hudson使用自己的maven-agent来启动Maven，不会去调用Maven的脚本，自然相应的配置也就无效了。</strong></strong></p>
<p><strong><strong>好在Hudson也给为我们提供了配置点，在Hudson的项目配置页面中，有一块Build区域，这里我们已经
设置了Root
Pom和Goals。注意该区域的右下角有一个"Advanced..."按钮，点击会看到MAVEN_OPTS输入框，这里输入"-Xmx512m"就
OK了。</strong></strong></p>
<p><strong><strong>&nbsp;</strong></strong></p>
<h2><strong><strong>m2eclipse中</strong></strong></h2>
<p><strong><strong>类似以上的方法都会失效，所幸m2eclipse提供了配置点。步骤如下：</strong></strong></p>
<p><strong><strong>项目上右击 -&gt; Run As -&gt; Run Configurations -&gt; Maven Build 上右击 -&gt; New</strong></strong></p>
<p><strong><strong>这时会看到一个maven运行配置对话框，这里面其它的配置我不多解释了，为了解决内存溢出的问题，我们可以选择第二个TAB: JRE，然后在VM arguments中输入配置如：-Xms128m -Xmx512m。</strong></strong></p>
<img src ="http://www.blogjava.net/lifw/aggbug/281045.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2009-06-10 09:01 <a href="http://www.blogjava.net/lifw/archive/2009/06/10/281045.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>maven的基本用法</title><link>http://www.blogjava.net/lifw/archive/2009/06/09/280810.html</link><dc:creator>老文</dc:creator><author>老文</author><pubDate>Tue, 09 Jun 2009 03:16:00 GMT</pubDate><guid>http://www.blogjava.net/lifw/archive/2009/06/09/280810.html</guid><wfw:comment>http://www.blogjava.net/lifw/comments/280810.html</wfw:comment><comments>http://www.blogjava.net/lifw/archive/2009/06/09/280810.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lifw/comments/commentRss/280810.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lifw/services/trackbacks/280810.html</trackback:ping><description><![CDATA[<font face="Thorndale AMT, serif">mvn
install -Dmaven.test.skip=true</font>
<img src ="http://www.blogjava.net/lifw/aggbug/280810.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lifw/" target="_blank">老文</a> 2009-06-09 11:16 <a href="http://www.blogjava.net/lifw/archive/2009/06/09/280810.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>