﻿<?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-Java Blog for Alex Wan-文章分类-J2EE</title><link>http://www.blogjava.net/alexwan/category/32009.html</link><description>Let life be beautiful like summer flowers and death like autumn leaves.</description><language>zh-cn</language><lastBuildDate>Sat, 07 Jun 2008 03:03:23 GMT</lastBuildDate><pubDate>Sat, 07 Jun 2008 03:03:23 GMT</pubDate><ttl>60</ttl><item><title>tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法</title><link>http://www.blogjava.net/alexwan/articles/206480.html</link><dc:creator>万洪泉</dc:creator><author>万洪泉</author><pubDate>Sat, 07 Jun 2008 02:27:00 GMT</pubDate><guid>http://www.blogjava.net/alexwan/articles/206480.html</guid><wfw:comment>http://www.blogjava.net/alexwan/comments/206480.html</wfw:comment><comments>http://www.blogjava.net/alexwan/articles/206480.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alexwan/comments/commentRss/206480.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alexwan/services/trackbacks/206480.html</trackback:ping><description><![CDATA[<p>在tomcat5下jsp中出现此错误一般都是在jsp中使用了输出流（如输出图片验证码，文件下载等），<br />
没有妥善处理好的原因。<br />
具体的原因就是<br />
在tomcat中jsp编译成servlet之后在函数_jspService(HttpServletRequest request, HttpServletResponse response)的最后<br />
有一段这样的代码<br />
finally {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);<br />
&nbsp;&nbsp;&nbsp; }<br />
这里是在释放在jsp中使用的对象，会调用response.getWriter(),因为这个方法是和<br />
response.getOutputStream()相冲突的！所以会出现以上这个异常。</p>
<p>然后当然是要提出解决的办法，其实挺简单的（并不是和某些朋友说的那样--<br />
将jsp内的所有空格和回车符号所有都删除掉），</p>
<p>在使用完输出流以后调用以下两行代码即可：<br />
out.clear();<br />
out = pageContext.pushBody();</p>
<p>最后这里是一个输出彩色验证码例子（这样的例子几乎随处可见）<br />
imag.jsp</p>
<p>&lt;%@ page&nbsp; import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %&gt;<br />
&lt;%@ page import="java.io.OutputStream" %&gt;<br />
&lt;%!<br />
Color getRandColor(int fc,int bc){<br />
Random random = new Random();<br />
if(fc&gt;255) fc=255;<br />
if(bc&gt;255) bc=255;<br />
int r=fc+random.nextInt(bc-fc);<br />
int g=fc+random.nextInt(bc-fc);<br />
int b=fc+random.nextInt(bc-fc);<br />
return new Color(r,g,b);<br />
}<br />
%&gt;<br />
&lt;%<br />
try{<br />
response.setHeader("Pragma","No-cache");<br />
response.setHeader("Cache-Control","no-cache");<br />
response.setDateHeader("Expires", 0);<br />
int width=60, height=20;<br />
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);<br />
OutputStream os=response.getOutputStream();<br />
Graphics g = image.getGraphics();<br />
Random random = new Random();<br />
g.setColor(getRandColor(200,250));<br />
g.fillRect(0, 0, width, height);</p>
<p>g.setFont(new Font("Times New Roman",Font.PLAIN,18));<br />
g.setColor(getRandColor(160,200));<br />
for (int i=0;i&lt;155;i++)<br />
{<br />
int x = random.nextInt(width);<br />
int y = random.nextInt(height);<br />
int xl = random.nextInt(12);<br />
int yl = random.nextInt(12);<br />
g.drawLine(x,y,x+xl,y+yl);<br />
}<br />
String sRand="";<br />
for (int i=0;i&lt;4;i++){<br />
String rand=String.valueOf(random.nextInt(10));<br />
sRand+=rand;<br />
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));<br />
g.drawString(rand,13*i+6,16);<br />
}<br />
session.setAttribute("rand",sRand);<br />
g.dispose();</p>
<p>ImageIO.write(image, "JPEG",os);<br />
os.flush();<br />
os.close();<br />
os=null;<br />
response.flushBuffer();<br />
out.clear();<br />
out = pageContext.pushBody();<br />
}<br />
catch(IllegalStateException e)<br />
{<br />
System.out.println(e.getMessage());<br />
e.printStackTrace();<br />
}%&gt;</p>
<p><br />
如有不足之处，欢迎斧正！&nbsp;</p>
<img src ="http://www.blogjava.net/alexwan/aggbug/206480.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alexwan/" target="_blank">万洪泉</a> 2008-06-07 10:27 <a href="http://www.blogjava.net/alexwan/articles/206480.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jxl读写excel的简单例子</title><link>http://www.blogjava.net/alexwan/articles/206479.html</link><dc:creator>万洪泉</dc:creator><author>万洪泉</author><pubDate>Sat, 07 Jun 2008 02:26:00 GMT</pubDate><guid>http://www.blogjava.net/alexwan/articles/206479.html</guid><wfw:comment>http://www.blogjava.net/alexwan/comments/206479.html</wfw:comment><comments>http://www.blogjava.net/alexwan/articles/206479.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alexwan/comments/commentRss/206479.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alexwan/services/trackbacks/206479.html</trackback:ping><description><![CDATA[jxltest.java<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.File;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.FileOutputStream;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;jxl.Workbook;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;jxl.format.BorderLineStyle;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;jxl.format.VerticalAlignment;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;jxl.write.Label;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;jxl.write.Number;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;jxl.write.WritableFont;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;jxl.write.WritableSheet;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;jxl.write.WritableWorkbook;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;jxltest<br />
<img id="Codehighlighter1_317_2684_Open_Image" onclick="this.style.display='none'; Codehighlighter1_317_2684_Open_Text.style.display='none'; Codehighlighter1_317_2684_Closed_Image.style.display='inline'; Codehighlighter1_317_2684_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_317_2684_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_317_2684_Closed_Text.style.display='none'; Codehighlighter1_317_2684_Open_Image.style.display='inline'; Codehighlighter1_317_2684_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_317_2684_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_317_2684_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String&nbsp;[]&nbsp;args)<br />
<img id="Codehighlighter1_359_2681_Open_Image" onclick="this.style.display='none'; Codehighlighter1_359_2681_Open_Text.style.display='none'; Codehighlighter1_359_2681_Closed_Image.style.display='inline'; Codehighlighter1_359_2681_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_359_2681_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_359_2681_Closed_Text.style.display='none'; Codehighlighter1_359_2681_Open_Image.style.display='inline'; Codehighlighter1_359_2681_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_359_2681_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_359_2681_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />String&nbsp;templatePath&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">c:\\template.xls</span><span style="color: #000000">"</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">模板文件名</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">String&nbsp;outFileStr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">c:\\test.xls</span><span style="color: #000000">"</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">测试文件名(输出文件)</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">try</span><span style="color: #000000"><br />
<img id="Codehighlighter1_467_2598_Open_Image" onclick="this.style.display='none'; Codehighlighter1_467_2598_Open_Text.style.display='none'; Codehighlighter1_467_2598_Closed_Image.style.display='inline'; Codehighlighter1_467_2598_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_467_2598_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_467_2598_Closed_Text.style.display='none'; Codehighlighter1_467_2598_Open_Image.style.display='inline'; Codehighlighter1_467_2598_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_467_2598_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_467_2598_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">创建小字体：Arial,大小为8号,非粗体，非斜体</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">WritableFont&nbsp;wf&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;WritableFont(WritableFont.ARIAL,&nbsp;</span><span style="color: #000000">8</span><span style="color: #000000">,WritableFont.NO_BOLD,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">字体颜色为红色</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">wf.setColour(jxl.format.Colour.RED);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">创建大字体：Arial,大小为18号,粗体，非斜体</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">WritableFont&nbsp;Bwf&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;WritableFont(WritableFont.ARIAL,&nbsp;</span><span style="color: #000000">18</span><span style="color: #000000">,WritableFont.NO_BOLD,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />Bwf.setColour(jxl.format.Colour.RED);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">创建单元格格式：设置水平对齐为向右对齐</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">jxl.write.WritableCellFormat&nbsp;RwcfF&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;jxl.write.WritableCellFormat(wf);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />RwcfF.setAlignment(jxl.write.Alignment.RIGHT);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">创建单元格格式：设置水平对齐为向左对齐</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">jxl.write.WritableCellFormat&nbsp;LwcfF&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;jxl.write.WritableCellFormat(wf);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />LwcfF.setAlignment(jxl.write.Alignment.LEFT);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">创建单元格格式：设置水平对齐为居中对齐</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">jxl.write.WritableCellFormat&nbsp;CwcfF&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;jxl.write.WritableCellFormat(wf);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />CwcfF.setAlignment(jxl.write.Alignment.CENTRE);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />jxl.write.WritableCellFormat&nbsp;CBwcfF&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;jxl.write.WritableCellFormat(Bwf);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />CBwcfF.setAlignment(jxl.write.Alignment.CENTRE);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">设置垂直对齐为居中对齐</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">CBwcfF.setVerticalAlignment(VerticalAlignment.CENTRE);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">设置顶部边框线为实线(默认是黑色－－也可以设置其他颜色)</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">CBwcfF.setBorder(jxl.format.Border.TOP,&nbsp;BorderLineStyle.MEDIUM);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">设置右边框线为实线</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">CBwcfF.setBorder(jxl.format.Border.RIGHT,&nbsp;BorderLineStyle.MEDIUM);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">设置顶部框线为实线</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">CBwcfF.setBorder(jxl.format.Border.BOTTOM,&nbsp;BorderLineStyle.MEDIUM);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />jxl.write.WritableCellFormat&nbsp;CMwcfF&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;jxl.write.WritableCellFormat(wf);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />CMwcfF.setAlignment(jxl.write.Alignment.LEFT);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">设置垂直对齐为向上对齐</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">CMwcfF.setVerticalAlignment(VerticalAlignment.TOP);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />CMwcfF.setWrap(</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />File&nbsp;tFile&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;File(templatePath);</span><span style="color: #008000">//</span><span style="color: #008000">创建模板文件对象</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">File&nbsp;outFile&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;File(outFileStr);</span><span style="color: #008000">//</span><span style="color: #008000">创建输出文件对象<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">创建文件输出流对象</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">FileOutputStream&nbsp;os&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileOutputStream(outFile);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">模板工作簿对象</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">Workbook&nbsp;tBook&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Workbook.getWorkbook(tFile);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">输出工作簿对象</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">WritableWorkbook&nbsp;wbook&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Workbook.createWorkbook(os,&nbsp;tBook);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">在坐标为(0,0)的单元格写入"测试"字符串使用8号红色小字体，向右对齐</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">wsheet.addCell(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Label(</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">test</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;RwcfF));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">在坐标为(1,1)的单元格写入"test"字符串使用8号红色小字体，向左对齐</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">wsheet.addCell(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Label(</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">test</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;LwcfF));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">在坐标为(2,2)的单元格写入"测试test"字符串使用8号红色小字体，居中对齐</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">wsheet.addCell(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Label(</span><span style="color: #000000">2</span><span style="color: #000000">,</span><span style="color: #000000">2</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">测试test</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;CMwcfF));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">在坐标为(3,3)的单元格写入2.00使用18号红色大字体，居中对齐</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">wsheet.addCell(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Number(</span><span style="color: #000000">23</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">14</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">2.00</span><span style="color: #000000">,&nbsp;CBwcfF));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">写入</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">wbook.write();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />wbook.close();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />tBook.close();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">关闭文件输出流</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">os.close();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">catch</span><span style="color: #000000">(Exception&nbsp;e)<br />
<img id="Codehighlighter1_2619_2678_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2619_2678_Open_Text.style.display='none'; Codehighlighter1_2619_2678_Closed_Image.style.display='inline'; Codehighlighter1_2619_2678_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2619_2678_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2619_2678_Closed_Text.style.display='none'; Codehighlighter1_2619_2678_Open_Image.style.display='inline'; Codehighlighter1_2619_2678_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_2619_2678_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2619_2678_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />System.out.println(e.getMessage());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />e.printStackTrace();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/alexwan/aggbug/206479.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alexwan/" target="_blank">万洪泉</a> 2008-06-07 10:26 <a href="http://www.blogjava.net/alexwan/articles/206479.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 常用的与时间戳(Timestamp)相关的函数总结TimestampUtil  </title><link>http://www.blogjava.net/alexwan/articles/206477.html</link><dc:creator>万洪泉</dc:creator><author>万洪泉</author><pubDate>Sat, 07 Jun 2008 02:24:00 GMT</pubDate><guid>http://www.blogjava.net/alexwan/articles/206477.html</guid><wfw:comment>http://www.blogjava.net/alexwan/comments/206477.html</wfw:comment><comments>http://www.blogjava.net/alexwan/articles/206477.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alexwan/comments/commentRss/206477.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alexwan/services/trackbacks/206477.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: TimestampUtil.javapackage&nbsp;util;import&nbsp;java.sql.Timestamp;import&nbsp;java.util.Calendar;public&nbsp;class&nbsp;TimestampUtil&nbsp;{&nbsp;public&nbsp;final&nbsp;static&nbsp;int&...&nbsp;&nbsp;<a href='http://www.blogjava.net/alexwan/articles/206477.html'>阅读全文</a><img src ="http://www.blogjava.net/alexwan/aggbug/206477.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alexwan/" target="_blank">万洪泉</a> 2008-06-07 10:24 <a href="http://www.blogjava.net/alexwan/articles/206477.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用的与字符串相关的函数总结StringUtil </title><link>http://www.blogjava.net/alexwan/articles/206476.html</link><dc:creator>万洪泉</dc:creator><author>万洪泉</author><pubDate>Sat, 07 Jun 2008 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/alexwan/articles/206476.html</guid><wfw:comment>http://www.blogjava.net/alexwan/comments/206476.html</wfw:comment><comments>http://www.blogjava.net/alexwan/articles/206476.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alexwan/comments/commentRss/206476.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alexwan/services/trackbacks/206476.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: StringUtil.java package&nbsp;util;import&nbsp;java.util.Arrays;import&nbsp;java.sql.Timestamp;public&nbsp;class&nbsp;StringUtil&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;<a href='http://www.blogjava.net/alexwan/articles/206476.html'>阅读全文</a><img src ="http://www.blogjava.net/alexwan/aggbug/206476.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alexwan/" target="_blank">万洪泉</a> 2008-06-07 10:23 <a href="http://www.blogjava.net/alexwan/articles/206476.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat数据源读取的简单例子 </title><link>http://www.blogjava.net/alexwan/articles/206475.html</link><dc:creator>万洪泉</dc:creator><author>万洪泉</author><pubDate>Sat, 07 Jun 2008 02:21:00 GMT</pubDate><guid>http://www.blogjava.net/alexwan/articles/206475.html</guid><wfw:comment>http://www.blogjava.net/alexwan/comments/206475.html</wfw:comment><comments>http://www.blogjava.net/alexwan/articles/206475.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alexwan/comments/commentRss/206475.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alexwan/services/trackbacks/206475.html</trackback:ping><description><![CDATA[<p>应朋友的要求写下这篇文章，实现一个简单的例子，用于读取tomcat数据源</p>
<p>BaseDAO.java</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.sql.Connection;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.sql.PreparedStatement;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.sql.SQLException;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.naming.Context;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.naming.InitialContext;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.naming.NamingException;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.sql.DataSource;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;BaseDAO<br />
<img id="Codehighlighter1_247_1162_Open_Image" onclick="this.style.display='none'; Codehighlighter1_247_1162_Open_Text.style.display='none'; Codehighlighter1_247_1162_Closed_Image.style.display='inline'; Codehighlighter1_247_1162_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_247_1162_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_247_1162_Closed_Text.style.display='none'; Codehighlighter1_247_1162_Open_Image.style.display='inline'; Codehighlighter1_247_1162_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_247_1162_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_247_1162_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;DataSource&nbsp;pool&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Context&nbsp;env&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">private&nbsp;Connection&nbsp;conn&nbsp;=&nbsp;null;</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;String&nbsp;tableName</span><span style="color: #000000">=</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;BaseDAO()&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;AppException</span><span style="color: #008000">//</span><span style="color: #008000">构造</span><span style="color: #008000"><br />
<img id="Codehighlighter1_435_760_Open_Image" onclick="this.style.display='none'; Codehighlighter1_435_760_Open_Text.style.display='none'; Codehighlighter1_435_760_Closed_Image.style.display='inline'; Codehighlighter1_435_760_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_435_760_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_435_760_Closed_Text.style.display='none'; Codehighlighter1_435_760_Open_Image.style.display='inline'; Codehighlighter1_435_760_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_435_760_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_435_760_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(pool&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br />
<img id="Codehighlighter1_476_605_Open_Image" onclick="this.style.display='none'; Codehighlighter1_476_605_Open_Text.style.display='none'; Codehighlighter1_476_605_Closed_Image.style.display='inline'; Codehighlighter1_476_605_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_476_605_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_476_605_Closed_Text.style.display='none'; Codehighlighter1_476_605_Open_Image.style.display='inline'; Codehighlighter1_476_605_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span id="Codehighlighter1_476_605_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_476_605_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;env&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(Context)&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;InitialContext().lookup(</span><span style="color: #000000">"</span><span style="color: #000000">java:comp/env</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;pool&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(DataSource)env.lookup(</span><span style="color: #000000">"</span><span style="color: #000000">jdbc/</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">appid</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">数据源id</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">(NamingException&nbsp;ne)&nbsp;<br />
<img id="Codehighlighter1_638_757_Open_Image" onclick="this.style.display='none'; Codehighlighter1_638_757_Open_Text.style.display='none'; Codehighlighter1_638_757_Closed_Image.style.display='inline'; Codehighlighter1_638_757_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_638_757_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_638_757_Closed_Text.style.display='none'; Codehighlighter1_638_757_Open_Image.style.display='inline'; Codehighlighter1_638_757_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span id="Codehighlighter1_638_757_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_638_757_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;env&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;pool&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;System.out.println(ne.getMessage());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;AppException(ne.getMessage());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Connection&nbsp;getConn()&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;AppException</span><span style="color: #008000">//</span><span style="color: #008000">获取连接</span><span style="color: #008000"><br />
<img id="Codehighlighter1_820_1027_Open_Image" onclick="this.style.display='none'; Codehighlighter1_820_1027_Open_Text.style.display='none'; Codehighlighter1_820_1027_Closed_Image.style.display='inline'; Codehighlighter1_820_1027_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_820_1027_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_820_1027_Closed_Text.style.display='none'; Codehighlighter1_820_1027_Open_Image.style.display='inline'; Codehighlighter1_820_1027_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_820_1027_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_820_1027_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br />
<img id="Codehighlighter1_830_948_Open_Image" onclick="this.style.display='none'; Codehighlighter1_830_948_Open_Text.style.display='none'; Codehighlighter1_830_948_Closed_Image.style.display='inline'; Codehighlighter1_830_948_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_830_948_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_830_948_Closed_Text.style.display='none'; Codehighlighter1_830_948_Open_Image.style.display='inline'; Codehighlighter1_830_948_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span id="Codehighlighter1_830_948_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_830_948_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(pool&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;AppException(</span><span style="color: #000000">"</span><span style="color: #000000">Data&nbsp;source&nbsp;invalid!</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;pool.getConnection();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">(SQLException&nbsp;e)&nbsp;<br />
<img id="Codehighlighter1_977_1024_Open_Image" onclick="this.style.display='none'; Codehighlighter1_977_1024_Open_Text.style.display='none'; Codehighlighter1_977_1024_Closed_Image.style.display='inline'; Codehighlighter1_977_1024_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_977_1024_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_977_1024_Closed_Text.style.display='none'; Codehighlighter1_977_1024_Open_Image.style.display='inline'; Codehighlighter1_977_1024_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span id="Codehighlighter1_977_1024_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_977_1024_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;AppException(e.getMessage());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;closeConn(Connection&nbsp;conn)</span><span style="color: #008000">//</span><span style="color: #008000">关闭连接</span><span style="color: #008000"><br />
<img id="Codehighlighter1_1078_1160_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1078_1160_Open_Text.style.display='none'; Codehighlighter1_1078_1160_Closed_Image.style.display='inline'; Codehighlighter1_1078_1160_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1078_1160_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1078_1160_Closed_Text.style.display='none'; Codehighlighter1_1078_1160_Open_Image.style.display='inline'; Codehighlighter1_1078_1160_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_1078_1160_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1078_1160_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br />
<img id="Codehighlighter1_1088_1127_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1088_1127_Open_Text.style.display='none'; Codehighlighter1_1088_1127_Closed_Image.style.display='inline'; Codehighlighter1_1088_1127_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1088_1127_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1088_1127_Closed_Text.style.display='none'; Codehighlighter1_1088_1127_Open_Image.style.display='inline'; Codehighlighter1_1088_1127_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span id="Codehighlighter1_1088_1127_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1088_1127_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(conn&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;conn.close();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;e)<br />
<img id="Codehighlighter1_1153_1157_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1153_1157_Open_Text.style.display='none'; Codehighlighter1_1153_1157_Closed_Image.style.display='inline'; Codehighlighter1_1153_1157_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1153_1157_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1153_1157_Closed_Text.style.display='none'; Codehighlighter1_1153_1157_Open_Image.style.display='inline'; Codehighlighter1_1153_1157_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span id="Codehighlighter1_1153_1157_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1153_1157_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />另外AppException的实现如下：<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />AppException.java<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.lang.Exception;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;AppException&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Exception<br />
<img id="Codehighlighter1_1277_1485_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1277_1485_Open_Text.style.display='none'; Codehighlighter1_1277_1485_Closed_Image.style.display='inline'; Codehighlighter1_1277_1485_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1277_1485_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1277_1485_Closed_Text.style.display='none'; Codehighlighter1_1277_1485_Open_Image.style.display='inline'; Codehighlighter1_1277_1485_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_1277_1485_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1277_1485_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_1280_1292_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1280_1292_Open_Text.style.display='none'; Codehighlighter1_1280_1292_Closed_Image.style.display='inline'; Codehighlighter1_1280_1292_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1280_1292_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1280_1292_Closed_Text.style.display='none'; Codehighlighter1_1280_1292_Open_Image.style.display='inline'; Codehighlighter1_1280_1292_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span id="Codehighlighter1_1280_1292_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_1280_1292_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;serialVersionUID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1L</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;AppException(Exception&nbsp;exc)<br />
<img id="Codehighlighter1_1382_1410_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1382_1410_Open_Text.style.display='none'; Codehighlighter1_1382_1410_Closed_Image.style.display='inline'; Codehighlighter1_1382_1410_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1382_1410_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1382_1410_Closed_Text.style.display='none'; Codehighlighter1_1382_1410_Open_Image.style.display='inline'; Codehighlighter1_1382_1410_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span id="Codehighlighter1_1382_1410_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1382_1410_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">super</span><span style="color: #000000">(exc.getCause());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;AppException(String&nbsp;errorMessage)<br />
<img id="Codehighlighter1_1457_1483_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1457_1483_Open_Text.style.display='none'; Codehighlighter1_1457_1483_Closed_Image.style.display='inline'; Codehighlighter1_1457_1483_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1457_1483_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1457_1483_Closed_Text.style.display='none'; Codehighlighter1_1457_1483_Open_Image.style.display='inline'; Codehighlighter1_1457_1483_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span id="Codehighlighter1_1457_1483_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1457_1483_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">super</span><span style="color: #000000">(errorMessage);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span></div>
<br />
<p>其实这一种方式也不是最好的方式，而且依赖tomcat的数据源，开启了连接后一定要记得关闭连接，这样管理起来容易出错，建议可以是使用ibatis替代 </p>
<img src ="http://www.blogjava.net/alexwan/aggbug/206475.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alexwan/" target="_blank">万洪泉</a> 2008-06-07 10:21 <a href="http://www.blogjava.net/alexwan/articles/206475.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中简单的翻页功能的实现（PageManager） </title><link>http://www.blogjava.net/alexwan/articles/206474.html</link><dc:creator>万洪泉</dc:creator><author>万洪泉</author><pubDate>Sat, 07 Jun 2008 02:19:00 GMT</pubDate><guid>http://www.blogjava.net/alexwan/articles/206474.html</guid><wfw:comment>http://www.blogjava.net/alexwan/comments/206474.html</wfw:comment><comments>http://www.blogjava.net/alexwan/articles/206474.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alexwan/comments/commentRss/206474.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alexwan/services/trackbacks/206474.html</trackback:ping><description><![CDATA[<p>package util;<br />
import java.util.List;</p>
<p>public class PageManager<br />
{<br />
&nbsp;&nbsp;&nbsp; private List allRecords = null;//collection储存同一类型的对象的集合<br />
&nbsp;&nbsp;&nbsp; private int currentPage = 0;//当前页码<br />
&nbsp;&nbsp;&nbsp; private int totalPage = 0;//总页数<br />
&nbsp;&nbsp;&nbsp; private int recordPerPage = -1;//每页的对象数<br />
&nbsp;&nbsp;&nbsp; private int totalCount=0;//总的对象数<br />
&nbsp;//初始化<br />
&nbsp;public PageManager(List allRecords, int recordPerPage)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (allRecords == null || recordPerPage &lt; 1) return;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.allRecords = allRecords;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.recordPerPage = recordPerPage;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.totalCount=allRecords.size();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (allRecords.size() % recordPerPage == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.totalPage = allRecords.size() / recordPerPage;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.totalPage = allRecords.size() / recordPerPage + 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currentPage = 0;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //获取所有对象集合<br />
&nbsp;&nbsp;&nbsp; public List getAllRecords()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;return this.allRecords;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;//获取当前页的的对象集合<br />
&nbsp;&nbsp;&nbsp; public List getCurrentPage()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;return getPage(currentPage);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //根据序号获取该对象所在的页的对象集合<br />
&nbsp;&nbsp;&nbsp; public List getThePage(int recordno)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;if (this.allRecords == null || this.allRecords.size() == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currentPage = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int pageNo=1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (recordno &lt; 1) pageNo = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (recordno &gt; this.allRecords.size()) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;pageNo = this.totalPage;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;pageNo=recordno/this.recordPerPage+1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currentPage = pageNo;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int pageStart = (pageNo - 1) * this.recordPerPage;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int pageEnd = pageStart + this.recordPerPage - 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (pageEnd &gt; this.allRecords.size() - 1) pageEnd = this.allRecords.size() - 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List result =this.allRecords.subList(pageStart, pageEnd+1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; //根据页码获取改页的对象集合<br />
&nbsp;&nbsp;&nbsp; public List getPage(int pageNo)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (this.allRecords == null || this.allRecords.size() == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currentPage = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (pageNo &lt; 1) pageNo = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (pageNo &gt; this.totalPage) pageNo = this.totalPage;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currentPage = pageNo;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int pageStart = (pageNo - 1) * this.recordPerPage;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int pageEnd = pageStart + this.recordPerPage - 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (pageEnd &gt; this.allRecords.size() - 1) pageEnd = this.allRecords.size() - 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List result =this.allRecords.subList(pageStart, pageEnd+1); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //获取下一页的对象集合<br />
&nbsp;&nbsp;&nbsp; public List getNextPage()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return getPage(this.currentPage + 1);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; //获取上一页的对象集合<br />
&nbsp;&nbsp;&nbsp; public List getPreviousPage()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return getPage(this.currentPage - 1);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; //获取第一页的对象集合&nbsp;<br />
&nbsp;&nbsp;&nbsp; public List getFirstPage()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return getPage(1);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; //获取最后一页的对象集合<br />
&nbsp;&nbsp;&nbsp; public List getLastPage()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return getPage(this.totalPage);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; //获取总页数<br />
&nbsp;public int getTotalPage() {<br />
&nbsp;&nbsp;return totalPage;<br />
&nbsp;}<br />
&nbsp;//获取当前页码&nbsp;<br />
&nbsp;public int getCurrentPageCount()<br />
&nbsp;{<br />
&nbsp;&nbsp;return this.currentPage;<br />
&nbsp;}<br />
&nbsp;//获取对象总数<br />
&nbsp;public int getTotalCount() {<br />
&nbsp;&nbsp;return totalCount;<br />
&nbsp;}</p>
<p><br />
}<br />
</p>
<img src ="http://www.blogjava.net/alexwan/aggbug/206474.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alexwan/" target="_blank">万洪泉</a> 2008-06-07 10:19 <a href="http://www.blogjava.net/alexwan/articles/206474.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在appfuse构建的项目中集成velocity的步骤和碰到的问题</title><link>http://www.blogjava.net/alexwan/articles/206470.html</link><dc:creator>万洪泉</dc:creator><author>万洪泉</author><pubDate>Sat, 07 Jun 2008 01:54:00 GMT</pubDate><guid>http://www.blogjava.net/alexwan/articles/206470.html</guid><wfw:comment>http://www.blogjava.net/alexwan/comments/206470.html</wfw:comment><comments>http://www.blogjava.net/alexwan/articles/206470.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alexwan/comments/commentRss/206470.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alexwan/services/trackbacks/206470.html</trackback:ping><description><![CDATA[<p>使用Velocity无非也就是为了能够真正的实现mvc分层，使得各个团队成员(美工，程序员)可以各尽所长。</p>
<p>在appfuse构建的项目中集成velocity的步骤和碰到的问题&nbsp;:</p>
<p>1:修改web.xml使得项目支持velocity</p>
<p>(1)定义名为velocity的servlet：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">velocity</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.velocity.tools.view.servlet.VelocityViewServlet<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.apache.velocity.toolbox</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/WEB-INF/toolbox.xml</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.apache.velocity.properties</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/WEB-INF/classes/velocity.properties<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">load-on-startup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">10</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">load-on-startup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
(2)定义对应velocity的servlet-mapping：<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">velocity</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">*.vm</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span></div>
<br />
(3)将velocity纳入到编码过滤的filter(一般都已经定义经典SetCharacterEncoding)：<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">SetCharacterEncoding</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">*.vm</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span></div>
2:在项目的web/WEB-INF文件夹中创建并编辑文件toolbox.xml,通常的内容如下：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">toolbox</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tool</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">key</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">link</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">key</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">request</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.apache.velocity.tools.struts.StrutsLinkTool</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tool</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tool</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">key</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">text</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">key</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">request</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.apache.velocity.tools.struts.MessageTool</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tool</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tool</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">key</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">errors</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">key</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">request</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.apache.velocity.tools.struts.ErrorsTool</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tool</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tool</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">key</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">form</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">key</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">request</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.apache.velocity.tools.struts.FormTool</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tool</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tool</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">key</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">tiles</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">key</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">request</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.apache.velocity.tools.struts.TilesTool</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tool</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tool</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">key</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">validator</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">key</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">request</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">scope</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.apache.velocity.tools.struts.ValidatorTool</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tool</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">toolbox</span><span style="color: #0000ff">&gt;</span></div>
<br />
3：在项目的build/web/classes文件夹中创建并编辑文件velocity.properties,通常的内容：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">input.encoding&nbsp;=&nbsp;UTF-8<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />#out.encoding&nbsp;=&nbsp;UTF-8<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />default.contentType=text/html;&nbsp;charset=UTF-8</span></div>
<br />
<p>－－－以上三步其实就是普通java web项目集成velocity的必须要做的工作了。<br />
－－－下面是使用appfuse中的appgen生成velocity代码的要做的工作，这里只做了从table出发的生成过程。</p>
<p>4：在项目中extras/appgen/src中创建模板，这里假设创建的两个文件是List_vm.xdt和Form_vm.xdt<br />
模板的具体内容就要结合xdoclet，velocity和html来编写，不是一个简单的工作！</p>
<p>5：编辑extras/appgen下的build.xml文件，使得在使用ant install-detailed的时候能生成数据表对应的vm文件.</p>
<p>(1):在名为gen的target中添加template,原文件有以下的代码：</p>
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;Form&nbsp;JSP&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">template&nbsp;</span><span style="color: #ff0000">templateFile</span><span style="color: #0000ff">="${template.dir}/Form_jsp.xdt"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;acceptAbstractClasses</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prefixWithPackageStructure</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destinationFile</span><span style="color: #0000ff">="${gen.dir}/web/pages/{0}FormTemp.jsp"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;List&nbsp;JSP&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">template&nbsp;</span><span style="color: #ff0000">templateFile</span><span style="color: #0000ff">="${template.dir}/List_jsp.xdt"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;acceptAbstractClasses</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prefixWithPackageStructure</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destinationFile</span><span style="color: #0000ff">="${gen.dir}/web/pages/{0}ListTemp.jsp"</span><span style="color: #0000ff">/&gt;</span></div>
我们要在这个后面添加以下代码(如果不使用jsp作为view层可以使用替换的方式把原文件的这部分内容处理掉)：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;Form&nbsp;VM&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">template&nbsp;</span><span style="color: #ff0000">templateFile</span><span style="color: #0000ff">="${template.dir}/Form_vm.xdt"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;acceptAbstractClasses</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prefixWithPackageStructure</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destinationFile</span><span style="color: #0000ff">="${gen.dir}/web/vms/{0}FormTemp.vm"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;List&nbsp;VM&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">template&nbsp;</span><span style="color: #ff0000">templateFile</span><span style="color: #0000ff">="${template.dir}/List_VM.xdt"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;acceptAbstractClasses</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prefixWithPackageStructure</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destinationFile</span><span style="color: #0000ff">="${gen.dir}/web/vms/{0}ListTemp.vm"</span><span style="color: #0000ff">/&gt;</span></div>
<br />
<p>这里，templateFile里指定模板文件，destinationFile指定生成的临时文件。</p>
<p>(2):在名字同样为gen的target中添加move任务，原文件中有以下代码：</p>
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;Make&nbsp;first&nbsp;character&nbsp;of&nbsp;JSP&nbsp;filenames&nbsp;lowercase&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">move&nbsp;</span><span style="color: #ff0000">file</span><span style="color: #0000ff">="${build.dir}/${gen.dir}/web/pages/${model.name}ListTemp.jsp"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tofile</span><span style="color: #0000ff">="${build.dir}/${gen.dir}/web/pages/${app.module.slash.after}${model.name.lowercase}List.jsp"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">move&nbsp;</span><span style="color: #ff0000">file</span><span style="color: #0000ff">="${build.dir}/${gen.dir}/web/pages/${model.name}FormTemp.jsp"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tofile</span><span style="color: #0000ff">="${build.dir}/${gen.dir}/web/pages/${app.module.slash.after}${model.name.lowercase}Form.jsp"</span><span style="color: #0000ff">/&gt;</span></div>
<br />
我们要在这个后面添加以下代码(如果不使用jsp作为view层可以使用替换的方式把原文件的这部分内容处理掉):<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;Make&nbsp;first&nbsp;character&nbsp;of&nbsp;Velocity&nbsp;filenames&nbsp;lowercase&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">move&nbsp;</span><span style="color: #ff0000">file</span><span style="color: #0000ff">="${build.dir}/${gen.dir}/web/vms/${model.name}ListTemp.vm"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tofile</span><span style="color: #0000ff">="${build.dir}/${gen.dir}/web/vms/${app.module.slash.after}${model.name.lowercase}List.vm"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">move&nbsp;</span><span style="color: #ff0000">file</span><span style="color: #0000ff">="${build.dir}/${gen.dir}/web/vms/${model.name}FormTemp.vm"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tofile</span><span style="color: #0000ff">="${build.dir}/${gen.dir}/web/vms/${app.module.slash.after}${model.name.lowercase}Form.vm"</span><span style="color: #0000ff">/&gt;</span></div>
<p>这样生成的临时文件就会被重命名(有点怀疑这样做的必要性，暂且先这样做吧)。</p>
<p>(3):在名为merge-common的target中添加copy任务，原文件中有如下代码</p>
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;copy&nbsp;jsp&nbsp;files&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">echo</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Copying&nbsp;all&nbsp;web&nbsp;files&nbsp;into&nbsp;main&nbsp;project,&nbsp;overwrite="${overwrite}"</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">echo</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">copy&nbsp;</span><span style="color: #ff0000">todir</span><span style="color: #0000ff">="../../web/pages"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">fileset&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${generated.dir}/web/pages"</span><span style="color: #ff0000">&nbsp;includes</span><span style="color: #0000ff">="**/${model.name.lowercase}*.jsp"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">copy</span><span style="color: #0000ff">&gt;</span></div>
<br />
我们要在这个后面添加以下代码(如果不使用jsp作为view层可以使用替换的方式把原文件的这部分内容处理掉)： <br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;copy&nbsp;velocity&nbsp;files&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">echo</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Copying&nbsp;all&nbsp;velocity&nbsp;files&nbsp;into&nbsp;main&nbsp;project,&nbsp;overwrite="${overwrite}"</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">echo</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">copy&nbsp;</span><span style="color: #ff0000">todir</span><span style="color: #0000ff">="../../web/vms"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">fileset&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${generated.dir}/web/vms"</span><span style="color: #ff0000">&nbsp;includes</span><span style="color: #0000ff">="**/${model.name.lowercase}*.vm"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">copy</span><span style="color: #0000ff">&gt;</span></div>
<br />
<p>这样在使用ant install-detailed命令时就会把生成的文件复制到项目的web/vms文件夹下了。</p>
<p>7:修改项目的根目录下的build.xml：</p>
<p>(1)修改名为copy-web-files的target，使得运行ant deploy时可以将vm文件复制到部署项目的WEB-INFO文件夹下(放在WEB-INF下是为了防止直接访问 )。<br />
参考的源代码：</p>
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;Copy&nbsp;JSP&nbsp;Pages&nbsp;under&nbsp;WEB-INF/pages&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">copy&nbsp;</span><span style="color: #ff0000">todir</span><span style="color: #0000ff">="${webapp.target}/WEB-INF"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">fileset&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${basedir}/web"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">include&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="pages/**/*.jsp"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">fileset</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">fileset&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${struts.dir}"</span><span style="color: #ff0000">&nbsp;includes</span><span style="color: #0000ff">="*.xml"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">fileset&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${basedir}/web/WEB-INF"</span><span style="color: #ff0000">&nbsp;includes</span><span style="color: #0000ff">="**/*-resources.xml"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filterset&nbsp;</span><span style="color: #ff0000">refid</span><span style="color: #0000ff">="db.variables"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">copy</span><span style="color: #0000ff">&gt;</span></div>
<br />
可以在这个任务后面添加一个任务：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">fileset&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${basedir}/web"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">include&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="vms/**/*.vm"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">fileset</span><span style="color: #0000ff">&gt;</span></div>
<br />
<p>另外，如果不再使用jsp做为view层可以把匹配jsp的fileset节点去掉，这样就不会复制多余的文件到部署的项目中了。</p>
<p>(2)同名的target 中修改另外一个copy任务(顺数第二个)，源代码：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">copy&nbsp;</span><span style="color: #ff0000">todir</span><span style="color: #0000ff">="${webapp.target}"</span><span style="color: #ff0000">&nbsp;includeEmptyDirs</span><span style="color: #0000ff">="no"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">fileset&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${basedir}/web"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">include&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="**"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">exclude&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="pages/**"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">exclude&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="**/classes/**"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">exclude&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="**/*-resources.xml"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">fileset</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">copy</span><span style="color: #0000ff">&gt;</span></div>
<br />
在fileset中添加一个节点：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">exclude&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="vms/**"</span><span style="color: #0000ff">/&gt;</span></div>
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">这样就不会把vms文件夹下的文件当成是普通文件那样复制了<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />8：在struts-config.xml修改forwards，使得它们指向特定的vm。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />ps:基本上就是这么多的步骤，遗漏的地方，欢迎补充！<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
 <img src ="http://www.blogjava.net/alexwan/aggbug/206470.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alexwan/" target="_blank">万洪泉</a> 2008-06-07 09:54 <a href="http://www.blogjava.net/alexwan/articles/206470.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>appfuse构建项目的常见问题 </title><link>http://www.blogjava.net/alexwan/articles/206468.html</link><dc:creator>万洪泉</dc:creator><author>万洪泉</author><pubDate>Sat, 07 Jun 2008 01:44:00 GMT</pubDate><guid>http://www.blogjava.net/alexwan/articles/206468.html</guid><wfw:comment>http://www.blogjava.net/alexwan/comments/206468.html</wfw:comment><comments>http://www.blogjava.net/alexwan/articles/206468.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alexwan/comments/commentRss/206468.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alexwan/services/trackbacks/206468.html</trackback:ping><description><![CDATA[<p>&nbsp;1． 如何在翻页的时候才读取下面的数据？ <br />
2． 怎样对使用同一个FormBean的多个Form进行客户端校验？ <br />
3． 怎样优化Hibernate的效率？《Hibernate In Action》中提供了多种策略，有些时候应该使用lazy，有些时候应该使用outer-join。 <br />
4． 在什么时机生成导出文件？目前我是在查询的Action中同时生成了导出文件，否则，到了下一页，我就不知道查询条件了，当然，如果把拼装后的HQL存储在Session或者Hidden中也可以解决这个问题，但是这样就破坏了DAO的封装，要把DAO封装后的HQL发送给Action，然后发送的到Web界面层，所以目前我还在犹豫生成导出文件的时机选择在哪里？ <br />
5． 什么时候应该自己获取数据库连接，执行native SQL？具体需要注意些什么？ <br />
6． SiteMesh的模板优化？ <br />
7． DisplayTag的底层实现？</p>
<p>8.如何使用velocity作为view层？</p>
<p>这个框架的优点是：如果熟悉了开发流程，可以大幅度的提高开发速度，如果业务不是很复杂，使用AppGen可以生成60%左右的代码，而且程序可维护性好，因为作者使用了多个设计模式对各个层面进行了封装，所以不同的模块代码风格出奇的一致，有利于开发人员快速上手，也有利于接收其他开发人员遗留的代码。</p>
<br />
<hr />
<p>在appgen中修改build.xml的target可以控制生成那些代码，另外还可以修改模板，使得appgen生成更接近自己需要的代码。要利用好这些优点的前提是，程序员本身对ant要有相当的了解。</p>
<img src ="http://www.blogjava.net/alexwan/aggbug/206468.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alexwan/" target="_blank">万洪泉</a> 2008-06-07 09:44 <a href="http://www.blogjava.net/alexwan/articles/206468.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>appfuse下使用ibatis的一般步骤和若干问题</title><link>http://www.blogjava.net/alexwan/articles/206466.html</link><dc:creator>万洪泉</dc:creator><author>万洪泉</author><pubDate>Sat, 07 Jun 2008 01:41:00 GMT</pubDate><guid>http://www.blogjava.net/alexwan/articles/206466.html</guid><wfw:comment>http://www.blogjava.net/alexwan/comments/206466.html</wfw:comment><comments>http://www.blogjava.net/alexwan/articles/206466.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alexwan/comments/commentRss/206466.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alexwan/services/trackbacks/206466.html</trackback:ping><description><![CDATA[appfuse下使用ibatis的一般步骤和若干问题：<br />
1：在生成的项目的extras/ibatis下运行ant install<br />
刷新项目，出现两个错误：<br />
Project ngucs is missing required library: 'lib/ibatis-2.1.7/jta.jar'<br />
The project cannot be built until build path errors are resolved<br />
两种方法解决可以这个问题：<br />
(1)打开.classpath文件，将下面这一行删除(因为在hibernate的配置中已经引用了jta.jar)<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">classpathentry&nbsp;</span><span style="color: #ff0000">kind</span><span style="color: #0000ff">="lib"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="lib/ibatis-2.1.7/jta.jar"</span><span style="color: #0000ff">/&gt;</span></div>
(2)将lib/hibernate-3.1.3/lib/jta.jar拷贝到lib/ibatis-2.1.7/,刷新项目。<br />
2：如果不使用hibernate相关的操作，那么将和hibernate相关的文件(包括配置文件)和包删除，以防发生混淆<br />
3:修改在生成的项目extras/appgen文件的build.xml<br />
将
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">target&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="merge-config"</span><span style="color: #ff0000">&nbsp;depends</span><span style="color: #0000ff">="merge-tests,merge-menu,merge-hibernate,merge-ibatis"</span><span style="color: #0000ff">&gt;</span></div>
中的&#8220;merge-hibernate,&#8221;去掉，这样在appgen下运行ant install-detailed的时候就不会生成hibernate相关的文件了！<br />
4：生成文件不一定都能通过编译，原因有很多种，常见的原因有：<br />
(1)数据表设计时对主键的类型的错误设计，通常是太短了，建议主键都使用bigserial类型，如果使用serial，在生成的文件中多处会出现对int类型一些操作！使用bigserial对应生成的类型是Integer这样就不会有错了！－－对应这种错误，如果不能修改数据的设计的话就只好修改代码咯！快捷的方法是将model中主键对应的成员变量的类型改成Integer,在其他地方(xml,dao,servic,action)对这个成员变量的引用(一般通过取值函数)也做相应的类型修改就可以了。<br />
5：修改完和主键相关的地方后，发现还有几个和form相关的错误，这是因为相应的form还没有生成，回到项目的根目录，使用ant deploy命令就会生成了.<br />
6:关于insert中的selectKey，pgsql中应该是这样放到insert sql语句后面，使用的函数应该是currval('tablename_id_seq')<br />
7：可以在appgen中修改相应的模板(xdt文件－－一般在生成的项目extras/appgen/src中)，使得appgen生成的代码更接近自己的需要的代码，这样就可以减少生成代码后的修改工作。<br />
 <img src ="http://www.blogjava.net/alexwan/aggbug/206466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alexwan/" target="_blank">万洪泉</a> 2008-06-07 09:41 <a href="http://www.blogjava.net/alexwan/articles/206466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>将appfuse应用于pgsql的时候碰到的若干问题</title><link>http://www.blogjava.net/alexwan/articles/appfuse_pgsql.html</link><dc:creator>万洪泉</dc:creator><author>万洪泉</author><pubDate>Sat, 07 Jun 2008 01:39:00 GMT</pubDate><guid>http://www.blogjava.net/alexwan/articles/appfuse_pgsql.html</guid><wfw:comment>http://www.blogjava.net/alexwan/comments/206465.html</wfw:comment><comments>http://www.blogjava.net/alexwan/articles/appfuse_pgsql.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alexwan/comments/commentRss/206465.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alexwan/services/trackbacks/206465.html</trackback:ping><description><![CDATA[入门参考文章<br />
<a href="http://www.ibm.com/developerworks/cn/java/j-lo-appfuse/index.html">http://www.ibm.com/developerworks/cn/java/j-lo-appfuse/index.html</a><br />
将appfuse应用于pgsql的时候碰到的若干问题：
<p>ant new之后在用eclipse打开项目会有五个错误－－原因是.classpath文件里面声明了五个src类型的文件夹</p>
<p>碰到的数据库相关问题－－－－原因在于使用的是pgsql<br />
在建立的项目文件夹里ant setup的时候会出错，原因在于数据库的设置错误：<br />
解决的方法：<br />
将build.properties里面关于数据库设置的内容释放出来，并根据自己的需要修改各个key对应的value<br />
另外:如果还引用database.name还要添加database.name=postgres这样一个属性，否则会报错说database.name不存在<br />
运行 ant test-all<br />
会出现另外一个错误：role "test" doesn't exist.<br />
解决的方法：<br />
将properties.xml中的<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="database.username"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="test"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="database.password"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="test"</span><span style="color: #0000ff">/&gt;</span></div>
改成<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="database.username"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="postgres"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="database.password"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">=""</span><span style="color: #0000ff">/&gt;</span></div>
<p>再运行 ant test-all<br />
&nbsp;在开启tomcat的时候会出错（如果tomcat设置和默认的不同）<br />
默认的定义在properties.xml的这几项设置<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="tomcat.server"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="localhost"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="tomcat.manager.url"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="http://${tomcat.server}:${http.port}/manager"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="tomcat.username"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="admin"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="tomcat.password"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="admin"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
只要将这几项改成和真实的tomcat设置,下面是我的例子：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="tomcat.server"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="localhost"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="tomcat.manager.url"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="http://${tomcat.server}:8686/manager"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="tomcat.username"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="admin"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="tomcat.password"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">=""</span><span style="color: #0000ff">/&gt;</span></div>
再次运行ant test-all,到最后还是会有错，这是因为国际化文件的乱码问题（中文），而且这个乱码不是所有字符都乱码<br />
而是，只有个别文字乱码－－当然具体原因我也不知道，能做的就是按照上下文进行编辑了！<br />
资源文件所在位置：web/WEB-INF/classes<br />
在这里我使用的Properties Editor，比较方便（我可以提供一份已修改好的资源作为参考）！<br />
<br />
&lt;其实这里如果用ant deploy命令是可以启动项目的啦,只是登陆页面测试的结果和期待的结果用一样&gt;<br />
<p>另外切换到英文的时候也会找不到国际化的内容，反而装载了中文的资源文件的内容；这里是因为<br />
ApplicationResources_en.properties文件是空的，估计原因是在装载资源文件的顺序上的原因吧，<br />
我发现ApplicationResources.properties并不是空的，原则上是不会去装载中文的资源文件啊。<br />
解决这个问题只要将ApplicationResources.properties的内容拷贝到ApplicationResources_en.properties<br />
就可以了（这里有一种治标不治本的味道）。</p>
<p>在初生成版本的用户列表里面也又乱码的问题(中文的情况下)，在表头和表尾的地方！<br />
这样编辑另外一个文件：<br />
displaytag_zh_cn.properties－－路径为web/WEB-INF/classes<br />
切换到英文版的时候发现又装载了中文的资源内容，检查原来是缺失了这个文件：<br />
displaytag_en.properties<br />
创建一个文件并使用编辑之！<br />
具体的内容可以参考<br />
</p>
<p><a href="http://displaytag.sourceforge.net/configuration.html">http://displaytag.sourceforge.net/configuration.html</a><br />
<br />
</p>
<p>现在在项目目录下运行ant deploy然后访问，就可以出现一个基本正常的期望站点了。 </p>
<p>By the way:ant deploy命令有时候会出现tomcat使用cpu占用率非常高的现象（导致卡机），至少我自己就发生了几次。:(</p>
<p>现在让我们来尝试一下新的工具：AppGen代码生成：<br />
创建数据表，生成代码，关联hibernate文件，这些都不累赘了，因为前面所说的入门文章里面都有说了，照做便是！<br />
不过这里也出现了问题，在我们运行回到项目文件夹里ant deploy之后，去访问刚生成的文件的添加页面的时候，你会发现有问题。</p>
<p>No form found under 'mytablenameForm' in locale 'zh_CN'<br />
解决这个问题有两种方法：<br />
(1)在build/yourapp/WEB-INF/pages/下找到你生成的文件中的form.jsp文件，去掉script标签内的内容,并去除form的检验<br />
(2)在build/yourapp/WEB-INF的validation.xml文件中加入你对应的那个form，当然这里需要至少检查一个field!<br />
选择哪种方法依具体情况而定.</p>
<p>再运行ant deploy，在之前出错的地方就不再出错了！</p>
<p>关于新生成表的国际化：<br />
AppGen生成代码的时候只在 ApplicationResources.properties种添加了相关的元素<br />
我们要做的工作就需要修改ApplicationResources_en.properties(直接拷贝)和<br />
ApplicationResources_zh_CN.properties(拷贝并编辑)才能实现国际化</p>
<p>&nbsp;</p>
<p><br />
小小的总结一下：<br />
Appfuse的优点：当然是快了，生成的代码非常清晰，人工干预比较少，部署方便。</p>
<p>目前的现实：appfuse的模板(主要是在国际化方面)似乎本身还有有点问题，出现不少乱码。</p>
<p>团队的问题：使用ant,对程序员的要求比较高，特别是习惯了用可视化ide编程的程序员，对这种方式比较抵触。</p>
<p>&nbsp;</p>
<p>－－后来我发现可以在AppFuse的目录下（web/WEB_INF/classes）替换掉之前的原文件，在生成的件就不会乱码了<br />
哦啊啊啊啊－－我打开解压后appfuse一看，偶的神仙的，appfuse解压之后就是一个eclipse项目----如果我之间去编辑解压后的<br />
appfuse，然后在用ant命令(或直接在eclipse用)生成项目，又会怎么样呢?真又一种迫不及待要试一下的感觉！&nbsp;</p>
<p><br />
<br />
&nbsp;</p>
 <img src ="http://www.blogjava.net/alexwan/aggbug/206465.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alexwan/" target="_blank">万洪泉</a> 2008-06-07 09:39 <a href="http://www.blogjava.net/alexwan/articles/appfuse_pgsql.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>appfuse中生成以S结尾的数据表对应的代码出错的解决方案 </title><link>http://www.blogjava.net/alexwan/articles/appfuse.html</link><dc:creator>万洪泉</dc:creator><author>万洪泉</author><pubDate>Sat, 07 Jun 2008 01:28:00 GMT</pubDate><guid>http://www.blogjava.net/alexwan/articles/appfuse.html</guid><wfw:comment>http://www.blogjava.net/alexwan/comments/206463.html</wfw:comment><comments>http://www.blogjava.net/alexwan/articles/appfuse.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/alexwan/comments/commentRss/206463.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/alexwan/services/trackbacks/206463.html</trackback:ping><description><![CDATA[首先使用appfuse是应该尽量避免以S结尾的单词来作为数据表名，但是很多时候并不是这样的。数据表的名字不能改变的时候我们只能从其他方面想办法了！<br />
在google搜索相关的信息，只找到这一篇文章是有用的，并给予我修改的思路。<br />
<br />
<a href="http://jira.codehaus.org/browse/MIDDLEGEN-13?page=com.atlassian.jira.plugin.system.issuetabpanels:changehistory-tabpanel">http://jira.codehaus.org/browse/MIDDLEGEN-13?page=com.atlassian.jira.plugin.system.issuetabpanels:changehistory-tabpanel</a><br />
The algorithm for creating singular versions of table names doesn't account for singular words that end in "s". For example, a table called MumbleFooStatus becomes MumbleFooStatu <br />
Suggestion #1: in Util.singularise(), check for a vowel other than "e" before a final "s".
<p>Suggestion #2: change the default behaviour to not singularise tablenames. I think it's bad form for a tool to change the names of my data objects without my consent.</p>
<p>Workarounds: specify table names in build.xml, or if you're using the hibernate plugin, fix the table names in the &lt;dbname&gt;-prefs.properties generated by the plugin and re-run middlegen.</p>
<p>第二点中提到改变middlegen的默认行为让其不去单数化数据表名。</p>
<p>我们要做的有几个步骤(粗略的看了middlegen源码做的修改):<br />
1:下载middlegen源码，下载地址<br />
<a href="http://sourceforge.net/project/downloading.php?group_id=36044&amp;use_mirror=jaist&amp;filename=middlegen-2.1-src.zip&amp;92651696">http://sourceforge.net/project/downloading.php?group_id=36044&amp;use_mirror=jaist&amp;filename=middlegen-2.1-src.zip</a><br />
2:解压并编辑MiddlegenTask.java中的代码<br />
把<br />
private static boolean _singularize = true;<br />
改成<br />
private static boolean _singularize = false;<br />
3:重新编译并打包成jar,在middlegen的根目录下输入命令行命令：ant jar即可<br />
4:将新的middlegen-2.1.jar替换目标项目(已生成)中extras\middlegen\lib\middlegen-2.1的middlegen-2.1.jar<br />
这样，在生成以S结尾的数据表名对应的代码就不会出错了！<br />
但是这样做始终有不好的地方：在表示对象复数的地方就会出现不尽人意的代码了，但是不管怎么样，代码还是生成出来了，后期的工作就可以依靠手动去修改。<br />
所以还是尽量去遵循不以S结尾的单词作为数据表名。&nbsp;</p>
<p class="right articalinfo"><span id="Post.ascx_ViewPost_PreviousAndNextEntriesDown">
<h3><a href="http://blog.csdn.net/alexwan/archive/2007/11/30/1908493.aspx"></a></h3>
</span><script type="text/javascript">document.write("<img src="http://counter.csdn.net/pv.aspx?id=24" border="0" width="0" height="0"  alt="" />");</script><img height="0" src="http://counter.csdn.net/pv.aspx?id=24" width="0" border="0"  alt="" /> <script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shCore.js"></script><script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushCSharp.js"></script><script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushXml.js"></script><script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushCpp.js"></script><script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushCss.js"></script><script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushDelphi.js"></script><script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushJava.js"></script><script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushJScript.js"></script><script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushPhp.js"></script><script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushPython.js"></script><script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushRuby.js"></script><script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushSql.js"></script><script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushVb.js"></script><script language="javascript">
//window.onload = function(){
dp.SyntaxHighlighter.ClipboardSwf = 'http://hi.images.csdn.net/flash/syntaxhighlighter/clipboard.swf';
dp.SyntaxHighlighter.HighlightAll('code');
//}
</script></p>
 <img src ="http://www.blogjava.net/alexwan/aggbug/206463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/alexwan/" target="_blank">万洪泉</a> 2008-06-07 09:28 <a href="http://www.blogjava.net/alexwan/articles/appfuse.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>