﻿<?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-火焰出林工作室-文章分类-J2EE</title><link>http://www.blogjava.net/blameswood/category/26349.html</link><description>程序人生:JAVA Web之路</description><language>zh-cn</language><lastBuildDate>Thu, 27 Mar 2008 22:16:36 GMT</lastBuildDate><pubDate>Thu, 27 Mar 2008 22:16:36 GMT</pubDate><ttl>60</ttl><item><title>Log4j配置 </title><link>http://www.blogjava.net/blameswood/articles/189084.html</link><dc:creator>火焰出林</dc:creator><author>火焰出林</author><pubDate>Thu, 27 Mar 2008 09:38:00 GMT</pubDate><guid>http://www.blogjava.net/blameswood/articles/189084.html</guid><wfw:comment>http://www.blogjava.net/blameswood/comments/189084.html</wfw:comment><comments>http://www.blogjava.net/blameswood/articles/189084.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blameswood/comments/commentRss/189084.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blameswood/services/trackbacks/189084.html</trackback:ping><description><![CDATA[<p align="left"><strong><u>Log4j配置<br />
</u></strong>所需文件：1、jar包 ： commons-logging.jar 、log4j-1.2.8.jar 、taglibs-log.jar<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、配置文件：commons-logging.properties 、log4j.properties<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3、标签文件：taglibs-log.tag<br />
<br />
<strong>commons-logging.properties</strong>文件内容：</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;##set&nbsp;Log&nbsp;as&nbsp;Log4J<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.commons.logging.Log</span><span style="color: #000000">=</span><span style="color: #000000">org.apache.commons.logging.impl.Log4JCategoryLog<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;##&nbsp;set&nbsp;Log&nbsp;as&nbsp;SimpleLog<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#org.apache.commons.logging.Log</span><span style="color: #000000">=</span><span style="color: #000000">org.apache.commons.logging.impl.SimpleLog</span></div>
<p align="left"><br />
<strong>log4j.properties</strong>文件内容：</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">#ConversionPattern参数的格式含义<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />#格式名&nbsp;含义<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />#</span><span style="color: #000000">%</span><span style="color: #000000">c&nbsp;输出日志信息所属的类的全名<br />
<img id="Codehighlighter1_99_119_Open_Image" onclick="this.style.display='none'; Codehighlighter1_99_119_Open_Text.style.display='none'; Codehighlighter1_99_119_Closed_Image.style.display='inline'; Codehighlighter1_99_119_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_99_119_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_99_119_Closed_Text.style.display='none'; Codehighlighter1_99_119_Open_Image.style.display='inline'; Codehighlighter1_99_119_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />#</span><span style="color: #000000">%</span><span style="color: #000000">d&nbsp;输出日志时间点的日期或时间，默认格式为ISO8601，也可以在其后指定格式，比如：</span><span style="color: #000000">%</span><span style="color: #000000">d</span><span id="Codehighlighter1_99_119_Open_Text"><span style="color: #000000">{yyy</span><span style="color: #000000">-</span><span style="color: #000000">MM</span><span style="color: #000000">-</span><span style="color: #000000">dd&nbsp;HH:mm:ss&nbsp;}</span></span><span style="color: #000000">，输出类似：</span><span style="color: #000000">2002</span><span style="color: #000000">-</span><span style="color: #000000">10</span><span style="color: #000000">-</span><span style="color: #000000">18</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">22</span><span style="color: #000000">：</span><span style="color: #000000">10</span><span style="color: #000000">：</span><span style="color: #000000">28</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />#</span><span style="color: #000000">%</span><span style="color: #000000">f&nbsp;输出日志信息所属的类的类名<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />#</span><span style="color: #000000">%</span><span style="color: #000000">l&nbsp;输出日志事件的发生位置，即输出日志信息的语句处于它所在的类的第几行<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />#</span><span style="color: #000000">%</span><span style="color: #000000">m&nbsp;输出代码中指定的信息，如log(message)中的message<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />#</span><span style="color: #000000">%</span><span style="color: #000000">n&nbsp;输出一个回车换行符，Windows平台为&#8220;\r\n&#8221;，Unix平台为&#8220;\n&#8221;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />#</span><span style="color: #000000">%</span><span style="color: #000000">p&nbsp;输出优先级，即DEBUG，INFO，WARN，ERROR，FATAL。如果是调用debug()输出的，则为DEBUG，依此类推<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />#</span><span style="color: #000000">%</span><span style="color: #000000">r&nbsp;输出自应用启动到输出该日志信息所耗费的毫秒数<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />#</span><span style="color: #000000">%</span><span style="color: #000000">t&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="" />##&nbsp;LOGGERS&nbsp;##<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />#define&nbsp;a&nbsp;logger&nbsp;named&nbsp;helloAppLogger<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />log4j.rootLogger</span><span style="color: #000000">=</span><span style="color: #000000">info,console,file<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;APPENDERS&nbsp;##<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />#&nbsp;define&nbsp;an&nbsp;appender&nbsp;named&nbsp;console,&nbsp;which&nbsp;is&nbsp;set&nbsp;to&nbsp;be&nbsp;a&nbsp;ConsoleAppender<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />log4j.appender.console</span><span style="color: #000000">=</span><span style="color: #000000">org.apache.log4j.ConsoleAppender<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;define&nbsp;an&nbsp;appender&nbsp;named&nbsp;file,&nbsp;which&nbsp;is&nbsp;set&nbsp;to&nbsp;be&nbsp;a&nbsp;RollingFileAppender<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />log4j.appender.file</span><span style="color: #000000">=</span><span style="color: #000000">org.apache.log4j.RollingFileAppender<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />log4j.appender.file.File</span><span style="color: #000000">=</span><span style="color: #000000">dada.txt<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;LAYOUTS&nbsp;##<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />#&nbsp;assign&nbsp;a&nbsp;SimpleLayout&nbsp;to&nbsp;console&nbsp;appender<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />log4j.appender.console.layout</span><span style="color: #000000">=</span><span style="color: #000000">org.apache.log4j.SimpleLayout<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />#&nbsp;assign&nbsp;a&nbsp;PatternLayout&nbsp;to&nbsp;file&nbsp;appender<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="" />log4j.appender.file.layout</span><span style="color: #000000">=</span><span style="color: #000000">org.apache.log4j.PatternLayout<br />
<img id="Codehighlighter1_1067_1087_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1067_1087_Open_Text.style.display='none'; Codehighlighter1_1067_1087_Closed_Image.style.display='inline'; Codehighlighter1_1067_1087_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1067_1087_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1067_1087_Closed_Text.style.display='none'; Codehighlighter1_1067_1087_Open_Image.style.display='inline'; Codehighlighter1_1067_1087_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />log4j.appender.file.layout.ConversionPattern</span><span style="color: #000000">=%</span><span style="color: #000000">d</span><span id="Codehighlighter1_1067_1087_Open_Text"><span style="color: #000000">{yyyy</span><span style="color: #000000">-</span><span style="color: #000000">MM</span><span style="color: #000000">-</span><span style="color: #000000">dd&nbsp;hh:mm:ss}</span></span><span style="color: #000000">&nbsp;[</span><span style="color: #000000">%</span><span style="color: #000000">c]:</span><span style="color: #000000">%</span><span style="color: #000000">p&nbsp;</span><span style="color: #000000">-%</span><span style="color: #000000">c</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">%</span><span style="color: #000000">m</span><span style="color: #000000">%</span><span style="color: #000000">n</span></div>
<br />
<strong>新建log4j配置文件载入servlet类:<br />
</strong>
<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"><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.log4j.PropertyConfigurator;<br />
<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Log4j&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;HttpServlet&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&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;String&nbsp;CONTENT_TYPE&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">text/html;&nbsp;charset=GBK</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Initialize&nbsp;global&nbsp;variables</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;init()&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;ServletException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;String&nbsp;prefix&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.getServletContext().getRealPath(</span><span style="color: #000000">"</span><span style="color: #000000">/</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;String&nbsp;file&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.getInitParameter(</span><span style="color: #000000">"</span><span style="color: #000000">log4j</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">载入log4j配置文件</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">prefix</span><span style="color: #000000">+</span><span style="color: #000000">file);<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(file</span><span style="color: #000000">!=</span><span style="color: #0000ff">null</span><span style="color: #000000">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PropertyConfigurator.configure(prefix</span><span style="color: #000000">+</span><span style="color: #000000">file);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Clean&nbsp;up&nbsp;resources</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;destroy()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<strong>web.xml</strong>文件:<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"><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">log4j</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000">derek.log4j.Log4j</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">init</span><span style="color: #000000">-</span><span style="color: #000000">param</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">log4j</span><span style="color: #000000">&lt;/</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">WEB</span><span style="color: #000000">-</span><span style="color: #000000">INF\classes\log4j.properties</span><span style="color: #000000">&lt;/</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">init</span><span style="color: #000000">-</span><span style="color: #000000">param</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">load</span><span style="color: #000000">-</span><span style="color: #000000">on</span><span style="color: #000000">-</span><span style="color: #000000">startup</span><span style="color: #000000">&gt;</span><span style="color: #000000">1</span><span style="color: #000000">&lt;/</span><span style="color: #000000">load</span><span style="color: #000000">-</span><span style="color: #000000">on</span><span style="color: #000000">-</span><span style="color: #000000">startup</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">log4j</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">&gt;/</span><span style="color: #000000">log4j</span><span style="color: #000000">&lt;/</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">&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"><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.log4j.Logger;<br />
<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Log4jTest&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Log4jTest()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Logger&nbsp;log&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Logger.getLogger(</span><span style="color: #0000ff">this</span><span style="color: #000000">.getClass().getName());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.info(</span><span style="color: #000000">"</span><span style="color: #000000">log4jDemo</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log4jTest&nbsp;log4jtest&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Log4jTest();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<img src ="http://www.blogjava.net/blameswood/aggbug/189084.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blameswood/" target="_blank">火焰出林</a> 2008-03-27 17:38 <a href="http://www.blogjava.net/blameswood/articles/189084.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate配置文件 </title><link>http://www.blogjava.net/blameswood/articles/189083.html</link><dc:creator>火焰出林</dc:creator><author>火焰出林</author><pubDate>Thu, 27 Mar 2008 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/blameswood/articles/189083.html</guid><wfw:comment>http://www.blogjava.net/blameswood/comments/189083.html</wfw:comment><comments>http://www.blogjava.net/blameswood/articles/189083.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blameswood/comments/commentRss/189083.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blameswood/services/trackbacks/189083.html</trackback:ping><description><![CDATA[<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"><span style="color: #000000">&lt;?</span> <span style="color: #000000">xml&nbsp;version</span> <span style="color: #000000">=</span> <span style="color: #000000">'</span> <span style="color: #000000">1.0</span> <span style="color: #000000">'</span> <span style="color: #000000">&nbsp;encoding</span> <span style="color: #000000">=</span> <span style="color: #000000">'</span> <span style="color: #000000">UTF-8</span> <span style="color: #000000">'</span> <span style="color: #000000">?&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #000000">&lt;!</span> <span style="color: #000000">DOCTYPE&nbsp;hibernate</span> <span style="color: #000000">-</span> <span style="color: #000000">configuration&nbsp;PUBLIC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">"</span> <span style="color: #000000">-//Hibernate/Hibernate&nbsp;Configuration&nbsp;DTD&nbsp;3.0//EN</span> <span style="color: #000000">"</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">"</span> <span style="color: #000000">http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<br />
</span><span style="color: #000000">&lt;!--</span> <span style="color: #000000">&nbsp;Generated&nbsp;by&nbsp;MyEclipse&nbsp;Hibernate&nbsp;Tools.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">--&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span> <span style="color: #000000">hibernate</span> <span style="color: #000000">-</span> <span style="color: #000000">configuration</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<br />
</span><span style="color: #000000">&lt;</span> <span style="color: #000000">session</span> <span style="color: #000000">-</span> <span style="color: #000000">factory</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">myeclipse.connection.profile</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">MSSQL</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">connection.url</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">jdbc:jtds:sqlserver:</span> <span style="color: #008000">//</span> <span style="color: #008000">192.168.56.32:1433/itdb&lt;/property&gt;</span> <span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">connection.username</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;dada</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">connection.password</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">dada</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">connection.driver_class</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">net.sourceforge.jtds.jdbc.Driver</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">dialect</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">org.hibernate.dialect.SQLServerDialect</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">session_factory_name</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">DerekSessionFactory</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">show_sql</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #0000ff">false</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">hibernate.jdbc.fetch_size</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">50</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">hibernate.jdbc.batch_size</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">20</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">mapping&nbsp;resource</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">hbm/OvertimeAdmin.hbm.xml</span> <span style="color: #000000">"</span> <span style="color: #000000">&nbsp;</span> <span style="color: #000000">/&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">mapping&nbsp;resource</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">hbm/OvertimeAgent.hbm.xml</span> <span style="color: #000000">"</span> <span style="color: #000000">&nbsp;</span> <span style="color: #000000">/&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">mapping&nbsp;resource</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">hbm/OvertimePermit.hbm.xml</span> <span style="color: #000000">"</span> <span style="color: #000000">&nbsp;</span> <span style="color: #000000">/&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">mapping&nbsp;resource</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">hbm/OvertimeRecord.hbm.xml</span> <span style="color: #000000">"</span> <span style="color: #000000">&nbsp;</span> <span style="color: #000000">/&gt;</span> <span style="color: #000000"><br />
<br />
</span><span style="color: #000000">&lt;/</span> <span style="color: #000000">session</span> <span style="color: #000000">-</span> <span style="color: #000000">factory</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<br />
</span><span style="color: #000000">&lt;/</span> <span style="color: #000000">hibernate</span> <span style="color: #000000">-</span> <span style="color: #000000">configuration</span> <span style="color: #000000">&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"><span style="color: #000000">&lt;?</span><span style="color: #000000">xml&nbsp;version</span><span style="color: #000000">=</span><span style="color: #000000">'</span><span style="color: #000000">1.0</span><span style="color: #000000">'</span><span style="color: #000000">&nbsp;encoding</span><span style="color: #000000">=</span><span style="color: #000000">'</span><span style="color: #000000">UTF-8</span><span style="color: #000000">'</span><span style="color: #000000">?&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;!</span><span style="color: #000000">DOCTYPE&nbsp;hibernate</span><span style="color: #000000">-</span><span style="color: #000000">configuration&nbsp;PUBLIC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">-//Hibernate/Hibernate&nbsp;Configuration&nbsp;DTD&nbsp;3.0//EN</span><span style="color: #000000">"</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<br />
</span><span style="color: #000000">&lt;!--</span><span style="color: #000000">&nbsp;Generated&nbsp;by&nbsp;MyEclipse&nbsp;Hibernate&nbsp;Tools.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">hibernate</span><span style="color: #000000">-</span><span style="color: #000000">configuration</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">session</span><span style="color: #000000">-</span><span style="color: #000000">factory</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">myeclipse.connection.profile</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">MSSQL</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;<strong>&nbsp;&nbsp;</strong></span><strong><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">connection.datasource</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">java:comp</span><span style="color: #000000">/</span><span style="color: #000000">env</span><span style="color: #000000">/</span><span style="color: #000000">jdbc</span><span style="color: #000000">/</span><span style="color: #000000">itdb</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span></strong><span style="color: #000000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">connection.driver_class</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">net.sourceforge.jtds.jdbc.Driver</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">dialect</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">org.hibernate.dialect.SQLServerDialect</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">session_factory_name</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">DerekSessionFactory</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">show_sql</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #0000ff">false</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">hibernate.jdbc.fetch_size</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">50</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">hibernate.jdbc.batch_size</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">20</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">mapping&nbsp;resource</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">hbm/OvertimeAdmin.hbm.xml</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">mapping&nbsp;resource</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">hbm/OvertimeAgent.hbm.xml</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">mapping&nbsp;resource</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">hbm/OvertimePermit.hbm.xml</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">mapping&nbsp;resource</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">hbm/OvertimeRecord.hbm.xml</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
<br />
</span><span style="color: #000000">&lt;/</span><span style="color: #000000">session</span><span style="color: #000000">-</span><span style="color: #000000">factory</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<br />
</span><span style="color: #000000">&lt;/</span><span style="color: #000000">hibernate</span><span style="color: #000000">-</span><span style="color: #000000">configuration</span><span style="color: #000000">&gt;</span></div>
<img src ="http://www.blogjava.net/blameswood/aggbug/189083.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blameswood/" target="_blank">火焰出林</a> 2008-03-27 17:36 <a href="http://www.blogjava.net/blameswood/articles/189083.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL表达式 </title><link>http://www.blogjava.net/blameswood/articles/189079.html</link><dc:creator>火焰出林</dc:creator><author>火焰出林</author><pubDate>Thu, 27 Mar 2008 09:34:00 GMT</pubDate><guid>http://www.blogjava.net/blameswood/articles/189079.html</guid><wfw:comment>http://www.blogjava.net/blameswood/comments/189079.html</wfw:comment><comments>http://www.blogjava.net/blameswood/articles/189079.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blameswood/comments/commentRss/189079.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blameswood/services/trackbacks/189079.html</trackback:ping><description><![CDATA[<div class="postbody">
<li>
<ol>
    <li><a name="A1"></a><font color="#ff6600"><strong>EL脚本语言的配置和支持： </strong></font><br />
    对于一个单个JSP页面，你可以使用定义page指令来设置jsp页面是否支持EL。默认是支持EL(如果要页面不支持EL，请设置为<span class="myp11"><font id="zoom0">isELIgnored=true;</font></span> </li>
</ol>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" valign="middle" align="center" bgcolor="#e6e6e6" height="18">
            <ol>
                <li><span class="myp11"><font id="zoom">&lt;%@ page isELIgnored＝"true|false"%&gt;</font> </span></li>
            </ol>
            </td>
        </tr>
    </tbody>
</table>
<ol>
    <li>对于整个JSP应用程序，要修改WEB.XML配置(tomcat5.0.16默认是支持EL的);
    <li><font color="#0066cc">&lt;jsp-property-group&gt;</font>&nbsp;<br />
    &lt;description&gt; For config the ICW sample application &lt;/description&gt; <br />
    &lt;display-name&gt;JSPConfiguration&lt;/display-name&gt; <br />
    &lt;url-pattern&gt;/jsp/datareset.jsp&lt;/url-pattern&gt; <br />
    &lt;el-ignored&gt;true&lt; /<ccid_code> el-ignored&gt; <br />
    &lt;page-encoding&gt;ISO-8859-1&lt;/page-encoding&gt; <br />
    &lt;scripting-invalid&gt;true&lt;/scripting-invalid&gt;<br />
    &lt;include-prelude&gt;/jsp/prelude.jspf&lt;/include-prelude&gt; <br />
    &lt;include-coda&gt;/jsp/coda.jspf&lt;/include-coda&gt;<br />
    <font color="#0066cc">&lt;/jsp-property-group&gt;</font></ccid_code> </li>
</ol>
<li>
<ol>
    <li><a name="A2"></a><font color="#ff6600"><strong>算术运算符演示：</strong> </font><br />
    以下是EL运算符列表，其中empty可以检查某个值是否为空 </li>
</ol>
<table class="clear" cellspacing="1" cellpadding="2" width="75%" align="center" bgcolor="#dddddd" border="0">
    <tbody>
        <tr align="center" bgcolor="#ffffff">
            <td>
            <ol>
                <li><strong>运算符</strong> </li>
            </ol>
            </td>
            <td><strong>说明</strong> </td>
            <td><strong>运算符</strong> </td>
            <td><strong>说明</strong> </td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>
            <p>+</p>
            </td>
            <td>
            <p>加</p>
            </td>
            <td>&gt; 或 gt</td>
            <td>大于</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>
            <p>-</p>
            </td>
            <td>
            <p>减</p>
            </td>
            <td>&lt;= 或 le</td>
            <td>小于等于</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>
            <p>*</p>
            </td>
            <td>
            <p>乘</p>
            </td>
            <td>&gt;= 或 ge</td>
            <td>大于等于</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>
            <p>/ 或 div</p>
            </td>
            <td>
            <p>除</p>
            </td>
            <td>&amp;&amp; 或 and</td>
            <td>逻辑与</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>
            <p>% 或 mod</p>
            </td>
            <td>
            <p>模（求余）</p>
            </td>
            <td>|| 或 or</td>
            <td>逻辑或</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>
            <p>== 或 =</p>
            </td>
            <td>
            <p>等于</p>
            </td>
            <td>! 或 not</td>
            <td>逻辑非</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>
            <p>!= 或 !=</p>
            </td>
            <td>
            <p>不等于</p>
            </td>
            <td>empty</td>
            <td>检查是否为空值</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>
            <p>&lt; 或 lt</p>
            </td>
            <td>
            <p>小于</p>
            </td>
            <td>a ? b : c</td>
            <td>条件运算符</td>
        </tr>
    </tbody>
</table>
<ol>
    <li>EL表达式使用简单,在网页中"\${}"表示是EL表达式。\${1+1} 显示为 2 </li>
</ol>
<table cellspacing="1" cellpadding="5" width="75%" align="center" bgcolor="#dddddd" border="0">
    <tbody>
        <tr align="center" bgcolor="#ffffff">
            <td>
            <ol>
                <li><strong>EL算术表达式</strong> </li>
            </ol>
            </td>
            <td><strong>运算结果</strong> </td>
            <td><strong>EL 关系运算表达式</strong> </td>
            <td><strong>运算结果</strong> </td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>${1}</td>
            <td>1</td>
            <td>${1 &lt; 2}</td>
            <td>true</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>${1 + 2}</td>
            <td>3</td>
            <td>${1 lt 2}</td>
            <td>true</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>${1.2 + 2.3}</td>
            <td>3.5</td>
            <td>${1 &gt; (4/2)}</td>
            <td>false</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>${-4 - 2}</td>
            <td>-6</td>
            <td>${4.0 &gt;= 3}</td>
            <td>true</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>${21 * 2}</td>
            <td>42</td>
            <td>${4.0 ge 3}</td>
            <td>true</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>${10%4}</td>
            <td>2</td>
            <td>${100.0 eq 100}</td>
            <td>true</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>${10 mod 4}</td>
            <td>2</td>
            <td>${(10*10) != 100}</td>
            <td>false</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>${(1==2) ? 3 : 4}</td>
            <td>4</td>
            <td>${(10*10) ne 100}</td>
            <td>false</td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<li>
<ol>
    <li><a name="A3"></a><strong><font color="#ff6600">隐含对象数据演示：</font> </strong>
    <li>EL 表达式定义了11个隐含对象,使用这11个对象可以很方便的读取到session,cookie,HttpHeader,用户提交表单<code>(</code>param)等 </li>
</ol>
<table class="clear" cellspacing="1" cellpadding="2" width="75%" align="center" bgcolor="#dddddd" border="0">
    <tbody>
        <tr bgcolor="#ffffff">
            <td width="30%">
            <ol>
                <li>
                <div style="text-align: center" align="center"><strong>隐含对象</strong> </div>
                </li>
            </ol>
            </td>
            <td>
            <p style="text-align: center" align="center"><strong>内容</strong> </p>
            </td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>
            <p>applicationScope</p>
            </td>
            <td>
            <p style="layout-grid-mode: char">应用程序范围内的scoped变量组成的集合</p>
            </td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>
            <p>cookie</p>
            </td>
            <td>
            <p style="layout-grid-mode: char">所有cookie组成的集合</p>
            </td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>
            <p>header</p>
            </td>
            <td>
            <p style="layout-grid-mode: char">HTTP请求头部，字符串</p>
            </td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>
            <p>headerValues</p>
            </td>
            <td>
            <p style="layout-grid-mode: char">HTTP请求头部，字符串集合</p>
            </td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>
            <p>initParam</p>
            </td>
            <td>
            <p style="layout-grid-mode: char">全部应用程序参数名组成的集合</p>
            </td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>
            <p>pageContext</p>
            </td>
            <td>
            <p style="layout-grid-mode: char">当前页面的javax.servlet.jsp.PageContext对象</p>
            </td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>
            <p>pageScope</p>
            </td>
            <td>
            <p style="layout-grid-mode: char">页面范围内所有对象的集合</p>
            </td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>
            <p>param</p>
            </td>
            <td>
            <p style="layout-grid-mode: char">所有请求参数字符串组成的集合</p>
            </td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>
            <p>paramValues</p>
            </td>
            <td>
            <p style="layout-grid-mode: char">所有作为字符串集合的请求参数</p>
            </td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>
            <p>requestScope</p>
            </td>
            <td>
            <p style="layout-grid-mode: char">所有请求范围的对象的集合</p>
            </td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>
            <p>sessionScope</p>
            </td>
            <td>
            <p style="layout-grid-mode: char">所有会话范围的对象的集合</p>
            </td>
        </tr>
    </tbody>
</table>
<ol>
    <li>下面是获取HTTP访问头部数据和用户提交数据的示例 </li>
</ol>
<table cellspacing="1" cellpadding="5" width="75%" align="center" bgcolor="#dddddd" border="0">
    <tbody>
        <tr bgcolor="#ffffff">
            <td width="30%">
            <ol>
                <li>EL表达式 </li>
            </ol>
            </td>
            <td>运算结果</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>${header["host"]}<br />
            </td>
            <td>这里得到HTTP连接头部的host值</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>${header["accept"]}</td>
            <td>这里获得HTTP头部的accept值</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>${header["user-agent"]}</td>
            <td>这里获得HTTP头部的user-agent值</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td colspan="2" height="24"><a name="B4"></a>以下可以读取用户提交的信息,假设用户提交信息为 ?name=myname&amp;alies=now.net.cn(这里有两种访问方式,一种是使用[]来进行访问,另外一种是使用" "来进行访问，两种访问效果是一样的。)</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>${param["name"] }</td>
            <td>&nbsp;myname</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>${param.name} </td>
            <td>&nbsp;myname</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td>${param["alies"] }</td>
            <td>&nbsp;now.net.cn</td>
        </tr>
        <tr bgcolor="#ffffff">
            <td height="4">${param.alies}</td>
            <td height="4">now.net.cn</td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p>eg:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff0000"> ${empty(requestScope.backpath)?'admin_TcAction.do?method=findFinish':requestScope.backpath}</font></p>
</li>
</div>
<img src ="http://www.blogjava.net/blameswood/aggbug/189079.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blameswood/" target="_blank">火焰出林</a> 2008-03-27 17:34 <a href="http://www.blogjava.net/blameswood/articles/189079.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate one-to-many学习笔记 </title><link>http://www.blogjava.net/blameswood/articles/189078.html</link><dc:creator>火焰出林</dc:creator><author>火焰出林</author><pubDate>Thu, 27 Mar 2008 09:33:00 GMT</pubDate><guid>http://www.blogjava.net/blameswood/articles/189078.html</guid><wfw:comment>http://www.blogjava.net/blameswood/comments/189078.html</wfw:comment><comments>http://www.blogjava.net/blameswood/articles/189078.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blameswood/comments/commentRss/189078.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blameswood/services/trackbacks/189078.html</trackback:ping><description><![CDATA[<div class="postbody"><font color="#0000ff">EmylinkUpcode&nbsp; 1...................n&nbsp; EmylinkUlink</font>&nbsp;&nbsp; 一对多关系<br />
<br />
1.hbm.xml描述<br />
&nbsp; EmylinkUpcode.hbm.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">
<p><span style="color: #000000">&lt;?xml version="1.0"?&gt;<br />
&lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"<br />
"<a href="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd</a>" &gt;<br />
&lt;hibernate-mapping package="hbm"&gt;<br />
&nbsp;&lt;class&nbsp;name="EmylinkUpcode" table="emylink_upcode"&gt;<br />
&nbsp;&nbsp;&lt;id<br />
&nbsp;&nbsp;&nbsp;name="id"&nbsp;type="integer"&nbsp;column="plink_code"<br />
&nbsp;&nbsp;&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;generator class="org.hibernate.id.IncrementGenerator"/&gt;<br />
&nbsp;&nbsp;&lt;/id&gt;</span></p>
<p><span style="color: #000000">&nbsp;&nbsp;&lt;property<br />
&nbsp;&nbsp;&nbsp;name="account"<br />
&nbsp;&nbsp;&nbsp;column="account"<br />
&nbsp;&nbsp;&nbsp;type="string"<br />
&nbsp;&nbsp;&nbsp;not-null="true"<br />
&nbsp;&nbsp;&nbsp;length="20"<br />
&nbsp;&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;property<br />
&nbsp;&nbsp;&nbsp;name="plinkName"<br />
&nbsp;&nbsp;&nbsp;column="plink_name"<br />
&nbsp;&nbsp;&nbsp;type="string"<br />
&nbsp;&nbsp;&nbsp;not-null="true"<br />
&nbsp;&nbsp;&nbsp;length="50"<br />
&nbsp;&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;property<br />
&nbsp;&nbsp;&nbsp;name="plinkExplain"<br />
&nbsp;&nbsp;&nbsp;column="plink_explain"<br />
&nbsp;&nbsp;&nbsp;type="string"<br />
&nbsp;&nbsp;&nbsp;not-null="false"<br />
&nbsp;&nbsp;&nbsp;length="100"<br />
&nbsp;&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;property<br />
&nbsp;&nbsp;&nbsp;name="typeCode"<br />
&nbsp;&nbsp;&nbsp;column="type_code"<br />
&nbsp;&nbsp;&nbsp;type="string"<br />
&nbsp;&nbsp;&nbsp;not-null="false"<br />
&nbsp;&nbsp;&nbsp;length="8"<br />
&nbsp;&nbsp;/&gt;<br />
&nbsp;<br />
&nbsp;&nbsp;&lt;set name="emylinkUlinks" inverse="true" <font color="#ff0000">lazy="true"&nbsp; </font><font color="#800080">cascade="all"</font>&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &lt;key column="plink_code"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;one-to-many class="EmylinkUlink"/&gt;<br />
&nbsp;&nbsp;&lt;/set&gt;</span></p>
<p><span style="color: #000000">&nbsp;&lt;/class&gt;&nbsp;<br />
&lt;/hibernate-mapping&gt;<br />
</span></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: 36.26%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; height: 122px; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">操作级联（<font color="#800080">cascade</font>）关系。<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="" />all&nbsp;:&nbsp;所有情况下均进行级联操作。<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />none：所有情况下均不进行级联操作。<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />save</span><span style="color: #000000">-</span><span style="color: #000000">update:在执行save</span><span style="color: #000000">-</span><span style="color: #000000">update时<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="" />delete：在执行delete时进行级联操作。</span></div>
</div>
<br />
&nbsp;EmylinkUlink.hbm.xml
<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">
<p>&lt;?xml version="1.0"?&gt;<br />
&lt;!DOCTYPE hibernate-mapping PUBLIC<br />
&nbsp;"-//Hibernate/Hibernate Mapping DTD//EN"<br />
&nbsp;"<a href="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd</a>" &gt;</p>
<p>&lt;hibernate-mapping package="hbm"&gt;<br />
&nbsp;&lt;class<br />
&nbsp;&nbsp;name="EmylinkUlink"<br />
&nbsp;&nbsp;table="emylink_ulink"<br />
&nbsp;&gt;<br />
&nbsp;&nbsp;&lt;id<br />
&nbsp;&nbsp;&nbsp;name="id"<br />
&nbsp;&nbsp;&nbsp;type="integer"<br />
&nbsp;&nbsp;&nbsp;column="id"<br />
&nbsp;&nbsp;&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;generator class="org.hibernate.id.IncrementGenerator"/&gt;<br />
&nbsp;&nbsp;&lt;/id&gt;</p>
<p>&nbsp;&nbsp;&lt;property<br />
&nbsp;&nbsp;&nbsp;name="account"<br />
&nbsp;&nbsp;&nbsp;column="account"<br />
&nbsp;&nbsp;&nbsp;type="string"<br />
&nbsp;&nbsp;&nbsp;not-null="true"<br />
&nbsp;&nbsp;&nbsp;length="20"<br />
&nbsp;&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;property<br />
&nbsp;&nbsp;&nbsp;name="link"<br />
&nbsp;&nbsp;&nbsp;column="link"<br />
&nbsp;&nbsp;&nbsp;type="string"<br />
&nbsp;&nbsp;&nbsp;not-null="true"<br />
&nbsp;&nbsp;&nbsp;length="200"<br />
&nbsp;&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;property<br />
&nbsp;&nbsp;&nbsp;name="linkName"<br />
&nbsp;&nbsp;&nbsp;column="link_name"<br />
&nbsp;&nbsp;&nbsp;type="string"<br />
&nbsp;&nbsp;&nbsp;not-null="true"<br />
&nbsp;&nbsp;&nbsp;length="20"<br />
&nbsp;&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;property<br />
&nbsp;&nbsp;&nbsp;name="explain"<br />
&nbsp;&nbsp;&nbsp;column="explain"<br />
&nbsp;&nbsp;&nbsp;type="string"<br />
&nbsp;&nbsp;&nbsp;not-null="false"<br />
&nbsp;&nbsp;&nbsp;length="500"<br />
&nbsp;&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;property<br />
&nbsp;&nbsp;&nbsp;name="indate"<br />
&nbsp;&nbsp;&nbsp;column="indate"<br />
&nbsp;&nbsp;&nbsp;type="date"<br />
&nbsp;&nbsp;&nbsp;not-null="true"<br />
&nbsp;&nbsp;&nbsp;length="16"<br />
<font color="#a52a2a">&nbsp;&nbsp; insert="false"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //不参与插入操作<br />
&nbsp;&nbsp; update="false"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //不参与更新操作<br />
</font>&nbsp;&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;property<br />
&nbsp;&nbsp;&nbsp;name="sort"<br />
&nbsp;&nbsp;&nbsp;column="sort"<br />
&nbsp;&nbsp;&nbsp;type="string"<br />
&nbsp;&nbsp;&nbsp;not-null="false"<br />
&nbsp;&nbsp;&nbsp;length="3"<br />
&nbsp;&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;property<br />
&nbsp;&nbsp;&nbsp;name="private"<br />
&nbsp;&nbsp;&nbsp;column="private"<br />
&nbsp;&nbsp;&nbsp;type="string"<br />
&nbsp;&nbsp;&nbsp;not-null="false"<br />
&nbsp;&nbsp;&nbsp;length="1"<br />
&nbsp;&nbsp;/&gt;<br />
&nbsp;&nbsp;&lt;many-to-one<br />
&nbsp;&nbsp;&nbsp;name="plinkCode"<br />
&nbsp;&nbsp;&nbsp;column="plink_code"<br />
&nbsp;&nbsp;&nbsp;class="EmylinkUpcode"<br />
&nbsp;&nbsp;&nbsp;not-null="true"<br />
&nbsp;&nbsp;&gt;<br />
&nbsp;&nbsp;&lt;/many-to-one&gt;<br />
&nbsp;&lt;/class&gt;&nbsp;<br />
&lt;/hibernate-mapping&gt;</p>
</div>
<br />
2.POJO对象<br />
&nbsp; EmylinkUpcode.java
<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">//</span><span style="color: #008000">略<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;primary&nbsp;key</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;java.lang.Integer&nbsp;id;<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;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;fields</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;java.lang.String&nbsp;account;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;java.lang.String&nbsp;plinkName;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;java.lang.String&nbsp;plinkExplain;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;java.lang.String&nbsp;typeCode;<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;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;collections</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;java.util.Set</span><span style="color: #000000">&lt;</span><span style="color: #000000">hbm.EmylinkUlink</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;emylinkUlinks;<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: #008000">//</span><span style="color: #008000">略</span></div>
<br />
&nbsp; EmylinkUlink.java
<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">//</span><span style="color: #008000">略</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;hashCode&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Integer.MIN_VALUE;<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;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;primary&nbsp;key</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;java.lang.Integer&nbsp;id;<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;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;fields</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;java.lang.String&nbsp;account;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;java.lang.String&nbsp;link;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;java.lang.String&nbsp;linkName;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;java.lang.String&nbsp;explain;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;java.util.Date&nbsp;indate;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;java.lang.String&nbsp;sort;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;java.lang.String&nbsp;m_private;<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;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;many&nbsp;to&nbsp;one</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;hbm.EmylinkUpcode&nbsp;plinkCode;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">略</span></div>
<br />
通过EmylinkUpcode加载EmylinkUlink(<font color="#ffa500" size="2">注意EmylinkUpcode.hbm.xml中声明了延迟加载</font>)<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"><span style="color: #000000">Session&nbsp;session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;EmylinkSessionFactory.currentSession();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;q&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;session.createQuery(</span><span style="color: #000000">"</span><span style="color: #000000">from&nbsp;EmylinkUpcode&nbsp;where&nbsp;account='derek'</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;l&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;q.list();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EmylinkUpcode&nbsp;eu&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&nbsp;(EmylinkUpcode)l.get(</span><span style="color: #000000">0</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(eu.getPlinkName());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Hibernate.initialize(eu.getEmylinkUlinks());</span><span style="color: #008000">//</span><span style="color: #008000">当延迟加载lazy=true时，强制加载及联对象</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;ul&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;eu.getEmylinkUlinks();&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator</span><span style="color: #000000">&lt;</span><span style="color: #000000">EmylinkUlink</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;it&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ul.iterator();</span><span style="color: #008000">//</span><span style="color: #008000">lazy=true并且不使用强制加载，则此时才真真及联加载</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(it.hasNext()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(it.next().getLinkName());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;EmylinkSessionFactory.closeSession();&nbsp;&nbsp;<br />
</span></div>
<p><font color="#ff0000">* 延迟加载</font>&nbsp;&nbsp;&nbsp;<br />
&nbsp; &nbsp;如果lazy=true(延迟加载), 加载EmylinkUpcode时,hibernate不会立即加载EmylinkUlink,只有当(Iterator<span style="color: #000000">&lt;</span><span style="color: #000000">EmylinkUlink</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;it&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ul.iterator();</span>)执行时,hibernate才加载EmylinkUlink实例;&nbsp;如果在加载前就关闭session,则报异常<font color="#ff0000">LazyInitializationException&nbsp;<font color="#000000">;&nbsp;可以使用</font></font><font color="#0000ff">Hibernate.initialize(Object o)</font><font color="#000000">强制及联加载<br />
<br />
<u><font color="#c60a00">*J2SE5.0</font><font color="#800080">的泛型 </font></u></font><font color="#0000ff"></font></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"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setEmylinkUlinks&nbsp;(java.util.Set</span><span style="color: #000000">&lt;</span><span style="color: #000000">hbm.EmylinkUlink</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;emylinkUlinks)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.emylinkUlinks&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;emylinkUlinks;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<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"><span style="color: #000000">Iterator</span><span style="color: #000000">&lt;</span><span style="color: #000000">EmylinkUlink</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;it&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ul.iterator();</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(it.hasNext()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EmylinkUlink&nbsp;el&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;it.next();</span><span style="color: #008000">//</span><span style="color: #008000">无需进行强制类型转换</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(el.getLinkName());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<p><font size="2">emylinkUlinks集合中只能存放EmylinkUlink对象，从集合中获取对象无需再类型转换<br />
</font>&nbsp;<br />
struts+spring+hibernate关于hibernate中lazy="true"的问题。web.xml中用&nbsp;&nbsp;&nbsp;</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"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">filter</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">openSessionInViewFilter</span><span style="color: #000000">&lt;/</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000">org.springframework.orm.hibernate.support.OpenSessionInViewFilter</span><span style="color: #000000">&lt;/</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">filter</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">openSessionInViewFilter</span><span style="color: #000000">&lt;/</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">&gt;*</span><span style="color: #000000">.</span><span style="color: #0000ff">do</span><span style="color: #000000">&lt;/</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">&gt;</span></div>
<p>&nbsp; 它的原理就是：打开页面的时候打开session，一直到页面装载完毕才关闭session，这样就解决了lazy="true"时session&nbsp;&nbsp; is&nbsp;&nbsp; closed的问题。<br />
&nbsp; 关于OpenSessionInViewFilter 延迟加载失效问题 <a href="http://www.javaeye.com/topic/15057">http://www.javaeye.com/topic/15057</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OpenSessionInView的效率问题&nbsp; <a href="http://www.javaeye.com/topic/17501" target="blank">http://www.javaeye.com/topic/17501</a><br />
</p>
</div>
<img src ="http://www.blogjava.net/blameswood/aggbug/189078.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blameswood/" target="_blank">火焰出林</a> 2008-03-27 17:33 <a href="http://www.blogjava.net/blameswood/articles/189078.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下配置cvs服务器 </title><link>http://www.blogjava.net/blameswood/articles/189077.html</link><dc:creator>火焰出林</dc:creator><author>火焰出林</author><pubDate>Thu, 27 Mar 2008 09:32:00 GMT</pubDate><guid>http://www.blogjava.net/blameswood/articles/189077.html</guid><wfw:comment>http://www.blogjava.net/blameswood/comments/189077.html</wfw:comment><comments>http://www.blogjava.net/blameswood/articles/189077.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blameswood/comments/commentRss/189077.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blameswood/services/trackbacks/189077.html</trackback:ping><description><![CDATA[<div class="postbody">
<p>一 CVS<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>的安装： <br />
1。查看你的操作系统上是否安装了CVS：<br />
#&gt; rpm -qa|grep cvs </p>
<p>如果没有安装你可以在Redhat 第2张光盘上找到<br />
<br />
2。建立cvs用户组： </p>
<p>#&gt; groupadd cvs </p>
<p>3。建立cvs组的cvsroot用户和所属的目录： </p>
<p>#&gt; useradd -g cvs -G cvs &#8211;d /cvsroot cvsroot </p>
<p>4。为cvsroot用户添加密码： </p>
<p>#&gt; passwd cvsroot </p>
<p>5。改变 /cvsroot/ 的目录属性：</p>
<p>#&gt; chmod &#8211;R 770 /cvsroot </p>
<p>6。改变用户登陆身份： </p>
<p>#&gt; su cvsroot </p>
<p>7。开始创建单个项目： </p>
<p>#&gt; cd /cvsroot <br />
#&gt; mkdir project1 <br />
#&gt;mkdir project2 <br />
8。开始建立仓库： </p>
<p>#&gt; cvs &#8211;d /cvsroot/project1 init <br />
#&gt; cvs &#8211;d /cvsroot/project2 init <br />
#&gt; chmod &#8211;R 770 ./project1/ ./project2/ </p>
<p>9。建立CVS服务启动文件，我们使用xinetd方式： </p>
<p>#&gt; [Crtl]+[d] 切换到root用户身份 <br />
#&gt; cd /etc/xinetd.d <br />
#&gt; vi cvspserver </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"><span style="color: #000000">service&nbsp;cvspserver&nbsp;<br />
{&nbsp;<br />
disable&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;no&nbsp;<br />
flags&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;REUSE&nbsp;<br />
socket_type&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;stream&nbsp;<br />
wait&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;no&nbsp;<br />
user&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;root&nbsp;<br />
server</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;</span> <span style="color: #000000">/</span> <span style="color: #000000">usr</span> <span style="color: #000000">/</span> <span style="color: #000000">bin</span> <span style="color: #000000">/</span> <span style="color: #000000">cvs&nbsp;<br />
server_args</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;</span> <span style="color: #000000">-</span> <span style="color: #000000">f&nbsp;</span> <span style="color: #000000">--</span> <span style="color: #000000">allow</span> <span style="color: #000000">-</span> <span style="color: #000000">root</span> <span style="color: #000000">=/</span> <span style="color: #000000">home2</span> <span style="color: #000000">/</span> <span style="color: #000000">cvsroot</span> <span style="color: #000000">/</span> <span style="color: #000000">project1&nbsp;</span> <span style="color: #000000">--</span> <span style="color: #000000">allow</span> <span style="color: #000000">-</span> <span style="color: #000000">root</span> <span style="color: #000000">=/</span> <span style="color: #000000">home2</span> <span style="color: #000000">/</span> <span style="color: #000000">cvsroot</span> <span style="color: #000000">/</span> <span style="color: #000000">project2&nbsp;pserver&nbsp;<br />
log_on_failure&nbsp;</span> <span style="color: #000000">+=</span> <span style="color: #000000">&nbsp;USERID&nbsp;<br />
}</span> </div>
<p>注：由于xinetd的server_args长度限制,当你想运行很多的单个仓库的时候,可以这么做：</p>
<p>#&gt; vi cvspserver </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"><span style="color: #000000">service&nbsp;cvspserver&nbsp;<br />
{&nbsp;<br />
disable&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;no&nbsp;<br />
flags&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;REUSE&nbsp;<br />
socket_type&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;stream&nbsp;<br />
wait&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;no&nbsp;<br />
user&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;root&nbsp;<br />
server&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;</span> <span style="color: #000000">/</span> <span style="color: #000000">cvsroot</span> <span style="color: #000000">/</span> <span style="color: #000000">cvs.run&nbsp;<br />
log_on_failure&nbsp;</span> <span style="color: #000000">+=</span> <span style="color: #000000">&nbsp;USERID&nbsp;<br />
}<br />
<br />
</span></div>
<p>&nbsp;</p>
<p>编写cvs.run脚本 </p>
<p>#&gt; vi /cvsroot/cvs.run </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">#</span> <span style="color: #000000">!/</span> <span style="color: #000000">bin</span> <span style="color: #000000">/</span> <span style="color: #000000">bash&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span> <span style="color: #000000">/</span> <span style="color: #000000">usr</span> <span style="color: #000000">/</span> <span style="color: #000000">bin</span> <span style="color: #000000">/</span> <span style="color: #000000">cvs&nbsp;</span> <span style="color: #000000">-</span> <span style="color: #000000">f&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span> <span style="color: #000000">--</span> <span style="color: #000000">allow</span> <span style="color: #000000">-</span> <span style="color: #000000">root</span> <span style="color: #000000">=/</span> <span style="color: #000000">cvsroot</span> <span style="color: #000000">/</span> <span style="color: #000000">project1&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span> <span style="color: #000000">--</span> <span style="color: #000000">allow</span> <span style="color: #000000">-</span> <span style="color: #000000">root</span> <span style="color: #000000">=/</span> <span style="color: #000000">cvsroot</span> <span style="color: #000000">/</span> <span style="color: #000000">project2&nbsp;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" />pserver</span> </div>
<p>#&gt;chmod +x /cvsroot/cvs.run </p>
<p>10。加入cvs服务： </p>
<p>#&gt;vi /etc/services </p>
<p>cvspserver 2401/tcp #pserver cvs service <br />
cvspserver 2401/udp #pserver cvs service <br />
11。启动cvs服务： </p>
<p>#&gt; /etc/init.d/xinetd restart </p>
<p>12。检查cvspserver服务是否已经启动： </p>
<p>#&gt; netstat -l |grep cvspserver <br />
应该有如下结果： </p>
<p>tcp 0 0 *:cvspserver *:* LISTEN </p>
<p>二。CVS服务的用户管理： </p>
<p>上面我们已经建立了project1和project2两个CVS仓库，下面我们分别给两个仓库建立cvs用户。 </p>
<p>13。创建可以登陆cvs<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>的用户名和密码： </p>
<p>#&gt; su cvsroot <br />
#&gt; vi /cvsroot/project1/CVSROOT/passwd </p>
<p>trotter:*****:cvsroot <br />
mimi:*****:cvsroot </p>
<p>#&gt;vi /cvsroot/project2/CVSROOT/passwd </p>
<p>trotter:*****:cvsroot <br />
gary:*****:cvsroot </p>
<p>这两个文件的意思是有trotter，mimi，gary三个cvs用户，mimi拥有project1的使用权限，gary拥有project2的使用权限，trotter拥有project1和project2的使用权限。登陆后的权限是cvsroot权限。<br />
注意：这里的cvs用户和系统用户是不同的。 </p>
<p>14。*****为密码，由以下文件生成： </p>
<p>#&gt; vi /cvsroot/passwd.pl </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"><span style="color: #000000">#</span> <span style="color: #000000">!/</span> <span style="color: #000000">usr</span> <span style="color: #000000">/</span> <span style="color: #000000">bin</span> <span style="color: #000000">/</span> <span style="color: #000000">perl&nbsp;<br />
srand&nbsp;(time());&nbsp;<br />
my&nbsp;$randletter&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;</span> <span style="color: #000000">"</span> <span style="color: #000000">(int&nbsp;(rand&nbsp;(26))&nbsp;+&nbsp;(int&nbsp;(rand&nbsp;(1)&nbsp;+&nbsp;.5)&nbsp;%&nbsp;2&nbsp;?&nbsp;65&nbsp;:&nbsp;97))</span> <span style="color: #000000">"</span> <span style="color: #000000">;&nbsp;<br />
my&nbsp;$salt&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;sprintf&nbsp;(</span> <span style="color: #000000">"</span> <span style="color: #000000">%c%c</span> <span style="color: #000000">"</span> <span style="color: #000000">,&nbsp;eval&nbsp;$randletter,&nbsp;eval&nbsp;$randletter);&nbsp;<br />
my&nbsp;$plaintext&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;shift;&nbsp;<br />
my&nbsp;$crypttext&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;crypt&nbsp;($plaintext,&nbsp;$salt);&nbsp;<br />
print&nbsp;</span> <span style="color: #000000">"</span> <span style="color: #000000">${crypttext}</span> <span style="color: #000000">"</span> <span style="color: #000000">;</span> </div>
<p>#&gt;chmod a+x /cvsroot/passwd.pl </p>
<p>15。如果你想生成一个密码是&#8220;123456&#8221;，则： </p>
<p>#&gt; /cvsroot/passwd.pl &#8220;123456&#8221; </p>
<p>回车即可得到加密密码,用其替换passwd文件中的***** </p>
<p>16。Ok，cvs现在已经全部安装完成了，如果你想让一个用户拥有project1的权限，你就在/cvsroot/project1/CVSROOT/passwd中给他加入一个用户；如果你想让一个用户同时具有project1和project2的权限，你就给/cvsroot/project1/CVSROOT/passwd和/cvsroot/project2/CVSROOT/passwd里给他加一个用户名和密码相同的用户即可。最后，我们试用一下：</p>
<p>#&gt; cvs -d :pserver:trotter@192.168.1.200:/cvsroot/project1 login </p>
<p>敲入命令回车后提示输入trotter的密码,你按照自己设置的密码输入,如果没有什么错误信息出现就是成功了</p>
</div>
<img src ="http://www.blogjava.net/blameswood/aggbug/189077.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blameswood/" target="_blank">火焰出林</a> 2008-03-27 17:32 <a href="http://www.blogjava.net/blameswood/articles/189077.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 定时器 </title><link>http://www.blogjava.net/blameswood/articles/SpringTimer.html</link><dc:creator>火焰出林</dc:creator><author>火焰出林</author><pubDate>Thu, 27 Mar 2008 09:31:00 GMT</pubDate><guid>http://www.blogjava.net/blameswood/articles/SpringTimer.html</guid><wfw:comment>http://www.blogjava.net/blameswood/comments/189075.html</wfw:comment><comments>http://www.blogjava.net/blameswood/articles/SpringTimer.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blameswood/comments/commentRss/189075.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blameswood/services/trackbacks/189075.html</trackback:ping><description><![CDATA[<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"><span style="color: #000000">&lt;!--1.简单定时--&gt;<br />
&lt;</span> <span style="color: #000000">bean&nbsp;id</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">myTask</span> <span style="color: #000000">"</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">class</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">usish.po.pub.MyTask</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--自己定义的任务extends TimerTask --&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">generatPo</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">ref&nbsp;local</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">generatPO</span> <span style="color: #000000">"</span> <span style="color: #000000">/&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">importData</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">ref&nbsp;local</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">importData</span> <span style="color: #000000">"</span> <span style="color: #000000">/&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #000000">&lt;/</span> <span style="color: #000000">bean</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<br />
</span><span style="color: #000000">&lt;</span> <span style="color: #000000">bean&nbsp;id</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">timer</span> <span style="color: #000000">"</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">class</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">org.springframework.scheduling.timer.TimerFactoryBean</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">scheduledTimerTasks</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">list</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">ref&nbsp;local</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">scheduledTimerTask_1</span> <span style="color: #000000">"</span> <span style="color: #000000">/&gt; &lt;!--定时器的任务链--&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">list</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #000000">&lt;/</span> <span style="color: #000000">bean</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
<br />
</span><span style="color: #000000">&lt;</span> <span style="color: #000000">bean&nbsp;id</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">scheduledTimerTask_1</span> <span style="color: #000000">"</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">class</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">org.springframework.scheduling.timer.ScheduledTimerTask</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt; &lt;!--任务链启动任务--&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">timerTask</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">ref&nbsp;local</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">myTask</span> <span style="color: #000000">"</span> <span style="color: #000000">/&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">delay</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">value</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">1000</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">value</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">property&nbsp;name</span> <span style="color: #000000">=</span> <span style="color: #000000">"</span> <span style="color: #000000">period</span> <span style="color: #000000">"</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #000000">&lt;</span> <span style="color: #000000">value</span> <span style="color: #000000">&gt;</span> <span style="color: #000000">50000</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">value</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
&nbsp;&nbsp;</span> <span style="color: #000000">&lt;/</span> <span style="color: #000000">property</span> <span style="color: #000000">&gt;</span> <span style="color: #000000"><br />
</span><span style="color: #000000">&lt;/</span> <span style="color: #000000">bean</span> <span style="color: #000000">&gt;</span> <br />
<br />
&lt;!--2.使用Quartz定时--&gt;<br />
&lt;!-- scheduler --&gt;<br />
&nbsp;&lt;bean id="cacheClearStar" class="com.ztgame.memcached.CacheClearStar" /&gt;<br />
&nbsp;&lt;bean id="cacheClearStarJob"<br />
&nbsp;&nbsp;&nbsp;&nbsp; class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="targetObject"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref local="cacheClearStar" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="targetMethod"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;clear&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&lt;/bean&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;bean id="cacheClearStarTrigger"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.springframework.scheduling.quartz.CronTriggerBean"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="jobDetail"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref local="cacheClearStarJob" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="cronExpression"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;0 0 0 * * ?&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&nbsp; &lt;bean id="scheduler"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="triggers"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref local="cacheClearStarTrigger" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&nbsp;&lt;!-- scheduler end --&gt;</div>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">一个cron表达式有至少6个（也可能7个）有空格分隔的时间元素。<br />
按顺序依次为 <br />
1.秒（0~59） <br />
2.分钟（0~59） <br />
</span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">3.小时（0~23） </span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt"><br />
4.天（月）（0~31，但是你需要考虑你月的天数） <br />
</span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">5.月（0~11） <br />
</span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">6.天（星期）（1~7 1=SUN 或 SUN，MON，TUE，WED，THU，FRI，SAT） <br />
</span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">7.年份（1970－2099）</span></span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。<br />
由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?. </span></span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">0 0 10,14,16 * * ? 每天上午10点，下午2点，4点<br />
0 0/30 9-17 * * ??? 朝九晚五工作时间内每半小时<br />
0 0 12 ? * WED 表示每个星期三中午12点 </span></span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">有些子表达式能包含一些范围或列表 <br />
</span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">例如：子表达式（天（星期））可以为 &#8220;MON-FRI&#8221;，&#8220;MON，WED，FRI&#8221;，&#8220;MON-WED,SAT&#8221; </span></span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">&#8220;*&#8221;字符代表所有可能的值 <br />
</span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">因此，&#8220;*&#8221;在子表达式（月）里表示每个月的含义，&#8220;*&#8221;在子表达式（天（星期））表示星期的每一天 </span></span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">&#8220;/&#8221;字符用来指定数值的增量 <br />
</span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">例如：在子表达式（分钟）里的&#8220;0/15&#8221;表示从第0分钟开始，每15分钟 ;<br />
</span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">在子表达式（分钟）里的&#8220;3/20&#8221;表示从第3分钟开始，每20分钟（它和&#8220;3，23，43&#8221;）的含义一样 <br />
</span></span></span><br />
<span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">&#8220;？&#8221;字符仅被用于天（月）和天（星期）两个子表达式，表示不指定值 <br />
</span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">当2个子表达式其中之一被指定了值以后，为了避免冲突，需要将另一个子表达式的值设为&#8220;？&#8221; </span></span></span></p>
<p><span style="font-size: 12pt"></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">&#8220;L&#8221; 字符仅被用于天（月）和天（星期）两个子表达式，它是单词&#8220;last&#8221;的缩写 </span></span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">但是它在两个子表达式里的含义是不同的。 </span></span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">在天（月）子表达式中，&#8220;L&#8221;表示一个月的最后一天 ,<br />
</span></span></span><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">在天（星期）自表达式中，&#8220;L&#8221;表示一个星期的最后一天，也就是SAT </span></span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">如果在&#8220;L&#8221;前有具体的内容，它就具有其他的含义了 </span></span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 12pt"><span style="font-size: 10pt">例如：&#8220;6L&#8221;表示这个月的倒数第６天，&#8220;ＦＲＩＬ&#8221;表示这个月的最后一个星期五 </span></span></span></p>
<p><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">注意：在使用&#8220;L&#8221;参数时，不要指定列表或范围，因为这会导致问题</span></span></span></p>
 <img src ="http://www.blogjava.net/blameswood/aggbug/189075.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blameswood/" target="_blank">火焰出林</a> 2008-03-27 17:31 <a href="http://www.blogjava.net/blameswood/articles/SpringTimer.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring+hibernate分页查询 </title><link>http://www.blogjava.net/blameswood/articles/Springhibernate.html</link><dc:creator>火焰出林</dc:creator><author>火焰出林</author><pubDate>Thu, 27 Mar 2008 09:25:00 GMT</pubDate><guid>http://www.blogjava.net/blameswood/articles/Springhibernate.html</guid><wfw:comment>http://www.blogjava.net/blameswood/comments/189072.html</wfw:comment><comments>http://www.blogjava.net/blameswood/articles/Springhibernate.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blameswood/comments/commentRss/189072.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blameswood/services/trackbacks/189072.html</trackback:ping><description><![CDATA[<span style="color: #008000">/**</span> <span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;TOP查询<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span> <span style="color: #808080">@param</span> <span style="color: #008000">&nbsp;sql&nbsp;String<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span> <span style="color: #808080">@param</span> <span style="color: #008000">&nbsp;top&nbsp;int<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span> <span style="color: #808080">@return</span> <span style="color: #008000">&nbsp;List<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #008000">*/</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">&nbsp;List&nbsp;findTop(String&nbsp;sql,&nbsp;</span> <span style="color: #0000ff">int</span> <span style="color: #000000">&nbsp;top)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HibernateTemplate&nbsp;ht&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">this</span> <span style="color: #000000">.getHibernateTemplate();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ht.setMaxResults(top);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">&nbsp;ht.find(sql);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #008000">/**</span> <span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;分页查询<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span> <span style="color: #808080">@param</span> <span style="color: #008000">&nbsp;sql&nbsp;String<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span> <span style="color: #808080">@param</span> <span style="color: #008000">&nbsp;firstRow&nbsp;int<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span> <span style="color: #808080">@param</span> <span style="color: #008000">&nbsp;maxRow&nbsp;int<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span> <span style="color: #808080">@return</span> <span style="color: #008000">&nbsp;List<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #008000">*/</span> <span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">&nbsp;List&nbsp;findPage(</span> <span style="color: #0000ff">final</span> <span style="color: #000000">&nbsp;String&nbsp;sql,</span> <span style="color: #0000ff">final</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">int</span> <span style="color: #000000">&nbsp;firstRow,</span> <span style="color: #0000ff">final</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">int</span> <span style="color: #000000">&nbsp;maxRow)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">&nbsp;</span> <span style="color: #0000ff">this</span> <span style="color: #000000">.getHibernateTemplate().executeFind(</span> <span style="color: #0000ff">new</span> <span style="color: #000000">&nbsp;HibernateCallback(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">public</span> <span style="color: #000000">&nbsp;Object&nbsp;doInHibernate(Session&nbsp;session)&nbsp;</span> <span style="color: #0000ff">throws</span> <span style="color: #000000">&nbsp;SQLException,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HibernateException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Query&nbsp;q&nbsp;</span> <span style="color: #000000">=</span> <span style="color: #000000">&nbsp;session.createQuery(sql);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q.setFirstResult(firstRow);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q.setMaxResults(maxRow);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">return</span> <span style="color: #000000">&nbsp;q.list();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span> 
<img src ="http://www.blogjava.net/blameswood/aggbug/189072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blameswood/" target="_blank">火焰出林</a> 2008-03-27 17:25 <a href="http://www.blogjava.net/blameswood/articles/Springhibernate.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring配置总结</title><link>http://www.blogjava.net/blameswood/articles/Spring.html</link><dc:creator>火焰出林</dc:creator><author>火焰出林</author><pubDate>Thu, 27 Mar 2008 09:08:00 GMT</pubDate><guid>http://www.blogjava.net/blameswood/articles/Spring.html</guid><wfw:comment>http://www.blogjava.net/blameswood/comments/189064.html</wfw:comment><comments>http://www.blogjava.net/blameswood/articles/Spring.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blameswood/comments/commentRss/189064.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blameswood/services/trackbacks/189064.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: web.xml载入Log4j配置&lt;context-param&gt;&lt;!--Log4j配置 在同一容器中部署多个应用不能使用默认的webAppRootKey,必须指定唯一KEY,以免冲突--&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-name&gt;webAppRootKey&lt;/param-name&gt;&nbsp;&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/blameswood/articles/Spring.html'>阅读全文</a><img src ="http://www.blogjava.net/blameswood/aggbug/189064.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blameswood/" target="_blank">火焰出林</a> 2008-03-27 17:08 <a href="http://www.blogjava.net/blameswood/articles/Spring.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE开发框架之发展简史</title><link>http://www.blogjava.net/blameswood/articles/150446.html</link><dc:creator>火焰出林</dc:creator><author>火焰出林</author><pubDate>Thu, 04 Oct 2007 14:11:00 GMT</pubDate><guid>http://www.blogjava.net/blameswood/articles/150446.html</guid><wfw:comment>http://www.blogjava.net/blameswood/comments/150446.html</wfw:comment><comments>http://www.blogjava.net/blameswood/articles/150446.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blameswood/comments/commentRss/150446.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blameswood/services/trackbacks/150446.html</trackback:ping><description><![CDATA[<p><a href="http://www.jjzx.cn/tag-106-1.html">JAVA</a>2企业版为<a href="http://www.jjzx.cn/tag-64-1.html">中间件</a>领域思想的统一上发挥了很大的作用。比如，<a href="http://www.jjzx.cn/tag-107-1.html"><a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a></a>为分布式事务管理、目录服务和消息服务提供了一套标准的<a href="http://www.jjzx.cn/tag-43-1.html">编程</a>接口。<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的基础——Java2标准版(<a href="http://www.jjzx.cn/tag-110-1.html">j2se</a>) ，成功地为Java提供了一套访问关系<a href="http://www.jjzx.cn/tag-135-1.html"></a><a href="http://www.jjzx.cn/leibie-4-1.html">数据库</a>的标准。 <br />
<br />
　　但是，就像本文中&#8220;<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>缺乏对编程的支持&#8221;提到的一样，<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>这个平台没有能够提供一个令人满意的应用<a href="http://www.jjzx.cn/tag-42-1.html">程序</a>编程模型（application programming model）。Sun公司和一些大的应用<a href="http://www.jjzx.cn/tag-321-1.html">服务器</a>供应商都想用开发工具来降低<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>开发的复杂性，但是这些工具没有其他的JAVA 开发工具优秀，后者有先进的重构工具，和.NET平台相比，<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的工具支持显得很逊色。 <br />
<br />
　　很多<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>开发工具自动产生的代码像这些工具本身同样复杂。在<a href="http://www.jjzx.cn/tag-65-1.html">开源</a>社区很多小型<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>开发者选择了另外一种开发方式—— 一些可以降低<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>开发难度的开发<a href="http://www.jjzx.cn/tag-69-1.html">框架</a>,较为流行的比如： <a href="http://www.jjzx.cn/tag-94-1.html">struts</a>, <a href="http://www.jjzx.cn/tag-102-1.html">hibernate</a>, 和 <a href="http://www.jjzx.cn/tag-103-1.html">spring</a> <a href="http://www.jjzx.cn/tag-83-1.html">framework</a>，他们当今很多<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>项目种扮演着重要角色。<br />
<br />
　　<strong>为什么要采用框架？</strong> <br />
<br />
　　框架是一由一些类组成，正式这些类为应用程序提供了一个可重用的<a href="http://www.jjzx.cn/tag-27-1.html">设计</a>――或者我们经常提到的——应用程序种的一层。应用程序代码访问类库从而<a href="http://www.jjzx.cn/tag-49-1.html">执行</a>任务，而框架是<a href="http://www.jjzx.cn/tag-78-1.html">调用</a>应用程序代码，从而管理程序的流程。这就是经常说道的好莱坞原则：&#8220;不要试图联系我们，我们到时候自会通知你。&#8221;开发者写的程序在运行时由框架调用。<br />
<br />
　　设计一个在各种未知背景下都可以使用的框架是很有挑战性的。框架很适合在复杂的<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>开发中使用，它可以为开发者提供一个简单易用的模型。采用一个经过良好设计的开源框架有很多好处： <br />
<br />
　　&#183;在好的框架下，开发者只需要写一些必须的代码；他们不需要直接接触底层的<a href="http://www.jjzx.cn/tag-61-1.html">api</a>。 这一点很重要。<br />
<br />
　　&#183;经过良好设计的框架可以为程序提供清晰的结构并且提高程序的内聚性。好清晰的结构使得其他人可以更容易加入项目。<br />
<br />
　　&#183;一个容易使用的框架可以通过一些例子和文档为<a href="http://www.jjzx.cn/tag-59-1.html">用户</a>提供最佳实践。<br />
<br />
　　&#183;采用成功的框架的代码比自己的代码容易测试<br />
<br />
　　&#183;框架只有提供了一些值得使用的功能才会变得流行。<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>工程只有真正需要框架的时候才会用它，而自己的框架并不是这样，后者是处于统治地位的。<br />
<br />
　　<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>本身也提供了一些框架。比如， Enterprise Java-Beans (<a href="http://www.jjzx.cn/tag-111-1.html">EJB</a>) container或者 <a href="http://www.jjzx.cn/tag-95-1.html">servlet</a> engine，二者都运用了&#8220; 采用了好莱坞原则&#8221;这个思想，并采用运行时调用来管理<a href="http://www.jjzx.cn/tag-38-1.html">对象</a>。像Struts这些开源<a href="http://www.jjzx.cn/tag-167-1.html">web</a>应用框架正式建立在这两个框架的基础上的，本文讨论的重点也是像Struts这样建立在<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>上的框架，他们为开发者提供了更为简单的模型，和其他的一些好处。 <br />
<br />
　　<strong>开源框架的出现</strong><br />
<br />
　　很多大型的<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>项目都用自己的内部框架来隐藏平台的复杂性，直到最近人们才逐渐发现一些在很多项目中都存在的共有的难题，这些难题都可以由一个较为统一的解决方案来解决。而有的框架正好可以充当这些问题的解决方案。现在有种很明显的趋势：与从前的内部框架相比，这些框架将成为这些难题的更加&#8220;标准化 &#8221;的解决方案。 <br />
<br />
　　<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>平台的日益成熟是这些框架流行的一个原因。开发者知道有些地方是<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的标准API无能为力的，倚他们的<a href="http://www.jjzx.cn/tag-331-1.html">经验</a>来看，要弥补这个缺陷是很困难的。于此同时，一些优秀的开源框架可供使用，它们提供了极为丰富的技术文档，在它们背后还有一个专业的团队做支持，并且一切都是免费的。 <br />
<br />
　　Struts，在web应用程序产生时就有的开源框架。在1999－2000年，开发者们意识到<a href="http://www.jjzx.cn/tag-92-1.html">JSP</a>&#8220;Model1&#8221;的缺陷，JSP中充斥着请求处理代码和静态数据模板，这意味着你不得不把业务逻辑和复杂的HTML以及其他的标签混到一起。那个时候还没有标准的框架和<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的标准支持，要解决这个问题开发者就得自己实现前端控制器，这样可以把业务逻辑分离到java类中，从而可以减轻对JSP的维护难度。前端控制器<a href="http://www.jjzx.cn/tag-58-1.html">模式</a>经常运用在MVC架构中，MVC模式在OO语言的GUI开发中经常使用（这个名字总是让人误解，WEB MVC中的视图是从模型中&#8220;拉&#8221;数据；而在经典MVC中，模型把事件&#8220;推向&#8221;视图）。<br />
<br />
　　最初的前端控制器实现质量参差不齐。2001～2002年间，<a href="http://www.jjzx.cn/tag-168-1.html">apache</a>开源组织发布的Struts改变了这个状况，虽然它并非一个完美的框架，但已经足够使其成为该领域事实上的标准。<br />
<br />
　　Struts向人们展示了开源框架的一些优点，比如，新手可以很容易地熟悉它的结构。2002年末，它成立很多<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>项目很自然的选择，每一个认真的<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>开发者都会对它很熟悉。<br />
<br />
　　Struts几乎用才每一个<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>项目中，这使得它成为<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>架构的一个重要组成部分。甚至很多保守的组织也将其作为<a href="http://www.jjzx.cn/tag-40-1.html">软件</a>底层的一部分，并同意接受Apache的开源<a href="http://www.jjzx.cn/tag-414-1.html">协议</a>条款。<br />
<br />
　　Hibernate。下一个倒下的多骨诺米牌就是持久化。<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>提供了两个持久化的手段：<a href="http://www.jjzx.cn/tag-93-1.html">J</a><a href="http://www.jjzx.cn/tag-136-1.html">db</a>C，它是J2SE中访问关系数据库<a href="http://www.jjzx.cn/tag-262-1.html">系统</a>的标准API；另一个是实体Beans ,它是EJB中专门模型化持久化实体的<a href="http://www.jjzx.cn/tag-48-1.html">组件</a>。<br />
<br />
　　JDBC以一种错误的编程模型来强制开发者用Java代码来处理关系思想。而实体beans，先不说Sun和其他主要的<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>供应商的吹嘘，给人很笨重的感觉：起初这门技术的应用范围很窄，连持久对象间的关系都不能处理。它使得应用程序难于测试，并且使用了一个很糟糕的查询语言。直到<a href="http://www.jjzx.cn/tag-218-1.html">2003</a>年，即使EJB2.0和2.0做了很多改进，开发者们却很少用它。</p>
<strong>早期的尝试</strong><br />
<br />
　　持久化问题的解决方案是由关系-对象映射（ORM）来解决的，它可以透明地持久化普通java对象（POJO）。该思想在注释中有解释。虽然这种方案并不是专属java的。但相对与其他的社区而言比如.NET，ORM在java社区更加流行(.NET开发者总是对之抱有怀疑的态度)。<br />
<br />
　　早在1990年，一些商业的ORM工具就出现了，比如TopLink。但由于其价格昂贵、结构复杂并且与Sun的实体bean标准相左，所以很少人会用。不管怎样，在持久化POJO方面，这些工具与JDBC和实体Bean相比确实有了很大的进步<br />
<br />
　　Java Data <a href="http://www.jjzx.cn/tag-41-1.html">object</a>于2001年在Java Community Progress(www.jcp.org)的规范中出现。它为一般的POJO提供了大多数的持久化实现(尽管很多实现都是对关系数据库的)。但Sun公司以及其他的<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>技术提供商对该技术表现的很冷淡。所以JDO也没有能够流行。<br />
<br />
　　Hibernate的出现。ORM领域在2002年发生了大变化，原因有两个。首先，实体Beans在实践中失败，开发者们将其从<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>中忽视掉了。它向开发者们说明了一个规范是如何将开发拉入泥潭的。<br />
<br />
　　另外的一个原因是Hibernate的发布，它是第一个功能健全的解决关系对象影射解决方案。虽然在功能上，它没有TopLink多样。但在那些最常用的功能上，Hibernate实现的更加健壮，并且有一个非常专业的团队提供全职的开发。Hibernate并不是全新的，它的ORM思想在这个领域很普遍，但它提供的编程模型比其他任何竞争者都容易使用、都来的直接，它为ORM的使用提供了更加易用、廉价的途径。<br />
<br />
　　于此同时，新一代的商业产品针对关系数据库提供了极其高效的JDO规范的实现。这样开发者的选择就更丰富了；还有，TopLink也朝着开发者友好的方向前进，它的liscense越来越开放了。<br />
<br />
　　<strong>ORM大获全胜</strong><br />
<br />
　　所的这些因素是的ORM比以往更加规范。虽然很多项目仍然使用自己的持久层框架，但Hibernate，TopLink以及一些高端的JDO实现，使得使用自己持久层框架的难度相对变大、可维护性降低，自然，也没有什么理由去使用自己的框架了。<br />
<br />
　　虽然这些框架的功能覆盖范围已经很大了，但仍有很多地方不在其中。比如，一个基于struts，hibernate的项目，业务逻辑很难搞定。尽管对于这种问题，<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>规范提出了解决方案（EJB），但仍旧没有一个合适的编程模型。<br />
<br />
　　<strong>Spring</strong><br />
<br />
　　<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>框架被大规模地运用到项目中，而项目总要负责这些框架以及自己业务代码的连接，使之真正融合到一起。Spring就是专注于这个问题的，它和Hibernate融合的很好。<br />
<br />
　　本质上讲，Spring是IOC(Inversion of Control)和面向切面编程(AOP)的组合体。它是一个非侵入式的框架，增强了POJO的功能。从服务上讲(With a service abstraction)，它将程序代码从<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>环境解耦到普通的java对象（自然，这些代码可以脱离<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>而在多种环境中运行）。它还在很多功能上提供了除EJB之外的选择――比如为所有的POJO提供声明式事务。Spring被广泛运用到很多项目中，从小的web程序到大的企业应用程序。<br />
<br />
　　在这个领域还有其他的产品，比如HiveMind和NamoContainer。前者和Spring的思想大致相同，只不过在IOC上有较大差异；后者将很多服务融合在PicoContainer的IOC容器中。这些产品的实现方式和<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的不同在于，它们都很轻便。<br />
<br />
　　在有<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a> API下做测试是非常困难的，这些容器将POJO从<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a> API中脱离出来，从而大大降低了测试的难度。测试一个普通的java对象，不用象测试<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>程序那样，得先将应用程序部署到服务器上，要不就得自己动手模拟<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>环境。提供日益流行的测试<a href="http://www.jjzx.cn/tag-388-1.html">驱动</a>的开发环境（对于开发者来说这是应得的），是这些轻量容器流行的关键因素。<br />
<br />
　　<strong>下一个将会是谁？</strong><br />
<br />
　　人们日益对开源框架的重视，使得很多项目的成本大大降低，并且投放使用以及维护速度都增加了。现在的开源框架都有很高的质量，都提供了很好的文档＆一些书籍让开发者做参考。即便如此，两大因素是的<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>领域充满了不确定性：开源领域和<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>&#8220;标准&#8221;的冲突和AOP的日益重要。<br />
<br />
　　开源和标准之间的冲突表现在两个地方。一个是表现层，JSF的身后有Sun公司和其他的一些大公司，而在这个领域有Struts等开源产品与之竞争。在中间层，EJB 3.0采用J2SE5.0的annotations实现了依赖注入(dependency injection)的功能，但这个功能只是Spring的一个子集<br />
<br />
　　在这两个领域，开源产品都更加革新。JSP借鉴了<a href="http://www.jjzx.cn/tag-177-1.html"></a><a href="http://www.jjzx.cn/tag-176-1.html">ASP</a>.net，而Tapestry则采用了WebObjects的思想。<br />
<br />
　　同样的，不知道EJB3.0为何要尝试着标准化依赖注入，即使这样会使之不可避免地丧失很多功能。 EJB 3.0好像也要进入程序编写领域，而<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>规范在这方面还没有涉足。<br />
<br />
　　于此同时，AOP的重要性在<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>社区猛增，在使用上，AOP也越来越受到开发者的青睐。像Spring、dynaop等被称作&#8220;带着双拐的AOP&#8221;实现提升了AOP的知名度。而纯粹的AOP技术比如AspectJ，在将来的几年也会流行起来。<br />
<br />
　　其次，<a href="http://www.jjzx.cn/tag-97-1.html">jboss</a>通过JCP和EJB3.0保持一致，它极大地推动了AOP技术。但即使如此，JCP 还没有转向AOP迹象。<br />
<br />
　　下一代的<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>规范将拥抱更简单的POJO编程模型，就像Spring和Hibernate做的一样。<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>开发者也注定要从&#8220;欺诈客户&#8221;转到以自己的编程经验开发上来。这次改变将受到大多数人的欢迎，不像以前那样每一个新规范发布后，最终都没有能很好的实现。
<img src ="http://www.blogjava.net/blameswood/aggbug/150446.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blameswood/" target="_blank">火焰出林</a> 2007-10-04 22:11 <a href="http://www.blogjava.net/blameswood/articles/150446.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE配置指南 下</title><link>http://www.blogjava.net/blameswood/articles/150445.html</link><dc:creator>火焰出林</dc:creator><author>火焰出林</author><pubDate>Thu, 04 Oct 2007 14:10:00 GMT</pubDate><guid>http://www.blogjava.net/blameswood/articles/150445.html</guid><wfw:comment>http://www.blogjava.net/blameswood/comments/150445.html</wfw:comment><comments>http://www.blogjava.net/blameswood/articles/150445.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blameswood/comments/commentRss/150445.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blameswood/services/trackbacks/150445.html</trackback:ping><description><![CDATA[<font face="宋体" size="3">7、事务<br />
<br />
　　你可以编辑config/default.properties <a href="http://www.javadby.com/"><u>文件</u></a>控制事务发生和超时设置。distributed.transaction.recovery 属性这个属性控制分布事物是否发生。这些事物可以发生的话，下面的条件必须满足：<br />
<br />
　　跨库操作时的事物范围。<br />
<br />
　　<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>程序通过jdbc2.0 JTA驱动访问数据库<br />
<br />
　　当故障发生的时候，事物的各个的组成部分可以按照符合两段提交协议的方式提交或回滚。<br />
<br />
　　事物发生的时候，server重新启动后事物可以提交或回滚。<br />
<br />
　　distributed.transaction.recovery的值为true或者false。<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>安装后默认为false。<br />
<br />
　　distributed.transaction.recovery=false<br />
<br />
　　transaction.time属性<br />
<br />
　　在应用container-managed 事物的ejb中，你可以控制事物超时的间隔通过设置transaction.timeout的值。例如：<br />
<br />
　　　transaction.timeout=5<br />
<br />
　　在设置以后，如果事物在5秒内没有完成，<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>事物管理器将回滚它。当<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>第一次安装的时候，timeout的值时0代表没有超时。<br />
<br />
　　只有使用container-managed 管理事物的ejb受到timeout的影响。至于在bean-managed和JTA　transactions 中你可以引用 UserTransaction 的 setTransactionTimeout方法。同时你也可以在其他组建中引用setTransactionTimeout方法：比如servlets和jsp。<br />
<br />
　　8、端口<br />
<br />
　　<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>需要tcp/ip端口。修改config目录下的相应<a href="http://www.javadby.com/"><u>文件</u></a>可以修改端口号。下表是端口号和相应的<a href="http://www.javadby.com/"><u>文件</u></a>。<br />
<br />
　　EJB 9191 ejb.properties http.port=9191 <br />
<br />
　　HTTP 8000 web.properties port=8000 <br />
<br />
　　HTTPS 7000 web.properties https.port=7000 <br />
<br />
　　Naming and Directory 1050 orb.properties port=1050 <br />
<br />
　　9191 端口用于提供client下载需要的stub类<br />
<br />
　　8000 提供http服务<br />
<br />
　　7000 提供https服务<br />
<br />
<br />
　　1050 基于orb的jndi名字服务使用的端口<br />
<br />
　　9、日志<a href="http://www.javadby.com/"><u>文件</u></a><br />
<br />
　　<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a> server有几个日志<a href="http://www.javadby.com/"><u>文件</u></a>。默认这些<a href="http://www.javadby.com/"><u>文件</u></a>在logs目录下。编辑config/default.properties <a href="http://www.javadby.com/"><u>文件</u></a>中的 log.directory 属性可以更改默认目录。<br />
<br />
　　log.directory=logs <br />
<br />
　　同时你也可以编辑default.properties <a href="http://www.javadby.com/"><u>文件</u></a>更改日志<a href="http://www.javadby.com/"><u>文件</u></a>的名字。例如：你可以修改log.output 属性的值来修改the output.log <a href="http://www.javadby.com/"><u>文件</u></a>的名字。<br />
<br />
　　一般来说，日志<a href="http://www.javadby.com/"><u>文件</u></a>决定于启动<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的模式。（single还是multiple VM (virtual machine) 模式） Single VM 日志<a href="http://www.javadby.com/"><u>文件</u></a>默认的情况是Single VM 模式。在这种情况下，日志<a href="http://www.javadby.com/"><u>文件</u></a>位于<br />
<br />
　　　$<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>_HOME///ejb<br />
<br />
　　logs是在default.properties <a href="http://www.javadby.com/"><u>文件</u></a>中log.directory 属性指定的。host元素是计算机名称。生成下列<a href="http://www.javadby.com/"><u>文件</u></a>。<br />
<br />
　　system.out<br />
<br />
　　system.err<br />
<br />
　　event.log<br />
<br />
　　output.log<br />
<br />
　　error.log<br />
<br />
system.out 和system.err<a href="http://www.javadby.com/"><u>文件</u></a>包括ejb中 System.out 和 System.err的输出。如果你运行<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a> -verbose数，输出被写到stdout（标准输出） 和stderr（标准错误。输出）。system.out 和 system.err日志<a href="http://www.javadby.com/"><u>文件</u></a>不建。只有config/auth.properties <a href="http://www.javadby.com/"><u>文件</u></a>中audit属性值为true时audit.lo才创建。<br />
<br />
　　Multiple VM 日志<br />
<br />
　　如果你用<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a> -mutiVM启动server，ejb和http服务在自己的虚拟机以单独的服务启动。每一个depploy的应用程序也在自己的虚拟机中运行。日志<a href="http://www.javadby.com/"><u>文件</u></a>和上述的一样，但是存放的目录不同。目录如下：<br />
<br />
　　EJB $<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>_HOME//ejb/ejbd <br />
<br />
　　HTTP $<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>_HOME//ejb/httpd <br />
<br />
　　deployed application $<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>_HOME//ejb/ <br />
<br />
　　web server日志<br />
<br />
　　编辑web.properties<a href="http://www.javadby.com/"><u>文件</u></a>中的内容，可以改变由web server创建的日志<a href="http://www.javadby.com/"><u>文件</u></a>的名字。<br />
<br />
　　10、安全<br />
<br />
　　未授权用户<br />
<br />
　　 对于<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>来说，当有未授权的用户试图调用ejb container的时候，<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>必须存在一般意义上的未授权用户存在。在<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>中这个用户名字是guest，密码是guest123。你可以在auth.properties <a href="http://www.javadby.com/"><u>文件</u></a>中修改用户名和密码。 <br />
<br />
　　default.principal.name=guest<br />
<br />
　　default.principal.password=guest123<br />
<br />
　　Keystore密码<br />
<br />
　　如果用户使用公钥访问https，认证信息放在/.keystore <a href="http://www.javadby.com/"><u>文件</u></a>中。同时user-home是System.getProperty("user.home")的返回值。keystore是一个典型的密码<a href="http://www.javadby.com/"><u>文件</u></a>。默认的密码是changeit。可以在web.properties <a href="http://www.javadby.com/"><u>文件</u></a>中修改keystore.password 属性的值来改变密码。<br />
<br />
　　ANYONE 角色<br />
<br />
　　在application deployment工具的security面板中，默认的情况下方法分配给ANYONE 角色。这样的结果 是所有的用户和组都可以调用它。如果你没有影射到一个特定的角色，每一个用户和用户都可以调用它。可以在auth.properties <a href="http://www.javadby.com/"><u>文件</u></a>中设置anyone.role.name 的值来改变默认anyone角色。<br />
<br />
　　钝化发生的条件：内存限制<br />
<br />
　　当ejb container开始钝化一个ejb的时候，它把ejb保存在附属存储中并且试图重新分配内存。默认的情况下，如果内存使用超过128m的时候钝化开始发生。可以编辑config/default.properties <a href="http://www.javadby.com/"><u>文件</u></a>中passivation.threshold.memory 属性的值来修改默认值。<br />
<br />
　　passivation.threshold.memory=128000000<br />
<br />
值必须是一个正的整数。当你减少这个值的时候钝化现象回经常发生。<br />
<br />
　　jndi name server host<br />
<br />
　　如果jndi name server和<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a> server不在同一个机器上，你必须改变config/orb.properties <a href="http://www.javadby.com/"><u>文件</u></a>中host属性的值。<br />
<br />
　　host=localhost<br />
<br />
　　HTTP 文档根<br />
<br />
　　默认的情况下，http和https服务的文档是public_html。你可以编辑web.properties <a href="http://www.javadby.com/"><u>文件</u></a>中documentroot属性的值来改变它。<br />
<br />
　　documentroot=public_html/&nbsp;</font><br />
<script type="text/javascript"><!-- google_ad_client="pub-8980998233372889" ; google_ad_width="728;
google_ad_height" = 90; google_ad_format="728x90_as" ; google_ad_type="text_image" ;
//2007-09-24: javadby_文章内容_大横幅 google_ad_channel="6450508036" ; google_color_border="FFFFFF" ; google_color_bg="FFFFFF" ; google_color_link="000000" ; google_color_text="000000" ; google_color_url="000000" ;
//-->
</script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><br />
</font>
<img src ="http://www.blogjava.net/blameswood/aggbug/150445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blameswood/" target="_blank">火焰出林</a> 2007-10-04 22:10 <a href="http://www.blogjava.net/blameswood/articles/150445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE之配置指南 上</title><link>http://www.blogjava.net/blameswood/articles/150444.html</link><dc:creator>火焰出林</dc:creator><author>火焰出林</author><pubDate>Thu, 04 Oct 2007 14:09:00 GMT</pubDate><guid>http://www.blogjava.net/blameswood/articles/150444.html</guid><wfw:comment>http://www.blogjava.net/blameswood/comments/150444.html</wfw:comment><comments>http://www.blogjava.net/blameswood/articles/150444.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blameswood/comments/commentRss/150444.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blameswood/services/trackbacks/150444.html</trackback:ping><description><![CDATA[1、介绍 <br />
　　本文介绍J2EE环境的配<br />
都是文本<a href="http://www.javadby.com/"><u>文件</u></a>，你可以有任<br />
置，所有涉及的<a href="http://www.javadby.com/"><u>文件</u></a>都在J2EE安<br />
意的文本编辑器来编辑它们。<br />
装目录下的oncfig目录，这些<a href="http://www.javadby.com/"><u>文件</u></a><br />
<br />
<br />
　　通常情况下，你没有改<br />
的时候，你需要遵循本章的<br />
变这些<a href="http://www.javadby.com/"><u>文件</u></a>的必要。但是如果你<br />
内容进行配置。<br />
使用的数据库驱动不是cloudscape<br />
<br />
<br />
　　2、JDBC驱动 <br />
　　默认的J2EE安装后支持<br />
ejb使用的jdbc不是连接clo<br />
不能确定本版本的J2EE支持<br />
cloudscape数据库（一个sun公<br />
udscape数据库，那么你需要按<br />
你使用的jdbc驱动，请到 11111<br />
司提供的演示数据库），如果你的<br />
照下面的知道进行配置。（如果你<br />
看相关信息。）<br />
<br />
　　3、驱动的位置 <br />
　　你必须把驱动<a href="http://www.javadby.com/"><u>文件</u></a>（.jar<a href="http://www.javadby.com/"><u>文件</u></a>）copy<br />
包含在J2EE_CLASSPATH 的环境变量中。<br />
到 $J2EE_HOME/lib/system目录下。并且保证该<a href="http://www.javadby.com/"><u>文件</u></a><br />
<br />
<br />
　　4、J2EE_CLASSPATH 环境变量 <br />
　　J2EE server通过JDBC驱动连接数据<br />
件（.jar<a href="http://www.javadby.com/"><u>文件</u></a>）的位置。你可以在启动J2<br />
中设置J2EE_CLASSPATH 变量。编辑用户<br />
用户配置<a href="http://www.javadby.com/"><u>文件</u></a>是 /bin/userconfig.sh，w<br />
库。通通过J2EE_CLASSPATH 的环境变量定位驱动文<br />
EE前在命令行设置这个变量。但是我们推荐你在脚本<br />
配置<a href="http://www.javadby.com/"><u>文件</u></a>在安装的过程中是必须的一步。在unix中，<br />
indows nt中是bin/userconfig.bat<br />
<br />
　　注意：你应该同时在CLASSPATH环境变量中去掉驱动<a href="http://www.javadby.com/"><u>文件</u></a>（.jar<a href="http://www.javadby.com/"><u>文件</u></a>）。 <br />
　　5、JDBC 1.0 驱动 <br />
　　为了配置jdbc1.0驱动<br />
jdbc.datasources两个属性<br />
中。<br />
，编辑config/default.propert<br />
值。再次要注意的是驱动<a href="http://www.javadby.com/"><u>文件</u></a>必<br />
<br />
ies <a href="http://www.javadby.com/"><u>文件</u></a>的jdbc.drivers 和 <br />
须包含在J2EE_CLASSPATH环境变量<br />
<br />
<br />
　　jdbc.drivers 属性 <br />
　　jdbc.drivers 属性的值是有一系列<br />
的冒号分割的jdbc驱动的类名。格式如下：<br />
<br />
　　jdbc.drivers=:: . . . <br />
　　例如：　　jdbc.drive<br />
rs=oracle.jdbc.driver.Oracle<br />
Driver:testutil.MyDriver<br />
<br />
　　jdbc.datasources 属性值 <br />
　　jdbc.datasources 属<br />
库的url。典型的情况是：j<br />
字和url都是在ejb编码的过<br />
性值由两部分组成，一个是data<br />
ndi名字是数据库的逻辑名字，r<br />
程中指定的。rul的格式，请参<br />
source的jndi的名字，一个是数据<br />
ul指定数据库的实际位置。jndi名<br />
照jdbc驱动提供商的文档。<br />
<br />
　　jdbc.datasources 的语法如下： <br />
　　jdbc.datasources=|||. . . <br />
　　符号有两个作用。第一，它隔开几个jndi_datasource；第二，它隔开每一个jndi_datasource中的jndi_datasource&gt; 和 元素. <br />
<br />
　　jndi_datasource元素的语法如下： <br />
　　jdbc/ <br />
　　由jdbc关键字开头，jn<br />
di_name是在jndi目录中指定的d<br />
atasouce名字。<br />
<br />
　　例如：　jdbc.datasources=jdbc/Or<br />
c:1521:acct|jdbc/MyDB|jdbc:test<br />
acle|jdbc:oracle:thin@rt<br />
<br />
<br />
　　6、支持JTA的JDBC2.0驱动 <br />
　　配置JTA的JDBC2.0的驱动，你需要设置以下属性的值： <br />
　　jdbc20.datasources <br />
　　xadatasource..jndiname　xadataso<br />
urce..classname<br />
<br />
　　xadatasource..dbuser <br />
　　xadatasource..dbpassword <br />
　　xadatasource..prop. <br />
　　同时你也必须在J2EE_CLASSPATH 环境变量中包括jdbc驱动<a href="http://www.javadby.com/"><u>文件</u></a>。 <br />
　　jdbc20.datasources 属性 <br />
　　jdbc20.datasources <br />
lookup方法的参数）。<br />
属性的值和jndi名字连接，用于<br />
<br />
定位datasouce的位置（它就是<br />
<br />
<br />
　　jdbc20.datasources 的语法如下： <br />
　　jdbc20.datasources=||||的作用有两个，第一，隔开jndi_datasource 和并组成一对，第二，隔开每一对的jndi_datasource&gt; 、元素。 <br />
<br />
　　和 jndi_XA_datasource有相同的语法： <br />
　　jdbc/ <br />
　　jdbc关键字开头。jndi<br />
_name是datasource名字，这个<br />
名字指向jndi目录。<br />
<br />
　　例如：　　jdbc20.datasources=jdb<br />
c/Merant|jdbc/XAMerant|jdbc/Finch|jdbc/XAFinch<br />
<br />
　　xadatasource属性 <br />
　　xadatasource..jndina<br />
me 属性指定XA DataSource的jn<br />
di名字。语法如下：<br />
<br />
　　xadatasource..jndiname=jdbc/ <br />
　　n代表每一组xadatasou<br />
jndi_XA_datasource元素和<br />
source..dbuser 和 xadata<br />
有管理员的权限（更多的信<br />
rce。第一个jdbc2.0驱动n为0，<br />
jdbc20.datasources 指定的值<br />
source..dbpassword 属性指定<br />
息请看 2222 The distributed.<br />
下一个是1，2等等。<br />
对应。The xadata<br />
数据库用户和密码。通常该用户具<br />
transaction.recovery ）。<br />
<br />
　　xadatasource..prop. 指定和特定的<br />
属性值关联的值。实际的值可能是jdbc驱动。<br />
<br />
　　例如：　　xadatasour<br />
ce.0.jndiname=jdbc/XAMerant<br />
<br />
<br />
　　xadatasource.0.classname=com.mer<br />
source.SequeLinkDataSource<br />
ant.sequelink.jdbcx.data<br />
<br />
<br />
　　xadatasource.0.prop.<br />
url=jdbc:sequelink://mypc:50<br />
00/[Oracle]<br />
<br />
　　7、事务 <br />
　　你可以编辑config/def<br />
distributed.transaction.<br />
生的话，下面的条件必须满<br />
ault.properties <a href="http://www.javadby.com/"><u>文件</u></a>控制事务<br />
recovery 属性这个属性控制分<br />
足：<br />
发生和超时设置。<br />
布事物是否发生。这些事物可以发<br />
<br />
<br />
　　跨库操作时的事物范围。 <br />
　　J2EE程序通过jdbc2.0 JTA驱动访问数据库 <br />
　　当故障发生的时候，事物的各个的组<br />
。<br />
成部分可以按照符合两段提交协议的方式提交或回滚<br />
事物发生的时候，server重新启动后事物可以提交或回滚。 <br />
　　distributed.transact<br />
ion.recovery的值为true或者fa<br />
lse。J2EE安装后默认为false。<br />
<br />
　　distributed.transaction.recovery=false <br />
　　transaction.time属性 <br />
　　在应用container-managed 事物的ej<br />
transaction.timeout的值。例如：<br />
b中，你可以控制事物超时的间隔通过设置<br />
<br />
<br />
　　transaction.timeout=5 <br />
　　在设置以后，如果事物在5秒内没有<br />
的时候，timeout的值时0代表没有超时。<br />
完成，J2EE事物管理器将回滚它。当J2EE第一次安装<br />
<br />
<br />
　　只有使用container-ma<br />
JTA　transactions 中你可<br />
你也可以在其他组建中引用<br />
naged 管理事物的ejb受到timeo<br />
以引用 UserTransaction 的 se<br />
setTransactionTimeout方法：<br />
ut的影响。至于在bean-managed和<br />
tTransactionTimeout方法。同时<br />
比如servlets和jsp。<br />
<br />
　　8、端口 <br />
　　J2EE需要tcp/ip端口。<br />
应的<a href="http://www.javadby.com/"><u>文件</u></a>。<br />
修改config目录下的相应<a href="http://www.javadby.com/"><u>文件</u></a>可<br />
<br />
以修改端口号。下表是端口号和相<br />
<br />
<br />
　　EJB 9191 ejb.properties http.port=9191 <br />
　　　　HTTP 8000 web.properties port=8000 <br />
　　　　HTTPS 7000 web.properties ht<br />
tps.port=7000 <br />
<br />
　　　　Naming and Directory 1050 or<br />
b.properties port=1050 <br />
<br />
　　　　9191 端口用于提供client下载需要的stub类 <br />
　　　　8000 提供http服务 <br />
　　　　7000 提供https服务 <br />
　　　　1050 基于orb的jndi名字服务使用的端口 <br />
　　9、日志<a href="http://www.javadby.com/"><u>文件</u></a> <br />
　　J2EE server有几个日<br />
/default.properties <a href="http://www.javadby.com/"><u>文件</u></a><br />
志<a href="http://www.javadby.com/"><u>文件</u></a>。默认这些<a href="http://www.javadby.com/"><u>文件</u></a>在logs目<br />
中的 log.directory 属性可以<br />
录下。编辑config<br />
更改默认目录。<br />
<br />
　　log.directory=logs <br />
　　同时你也可以编辑defa<br />
log.output 属性的值来修<br />
ult.properties <a href="http://www.javadby.com/"><u>文件</u></a>更改日志<br />
改the output.log <a href="http://www.javadby.com/"><u>文件</u></a>的名字<br />
<a href="http://www.javadby.com/"><u>文件</u></a>的名字。例如：你可以修改<br />
。<br />
<br />
　　一般来说，日志<a href="http://www.javadby.com/"><u>文件</u></a>决<br />
machine) 模式） Single V<br />
件位于<br />
定于启动J2EE的模式。（single<br />
M 日志<a href="http://www.javadby.com/"><u>文件</u></a>默认的情况是Single<br />
<br />
还是multiple VM (virtual <br />
VM 模式。在这种情况下，日志文<br />
<br />
<br />
　　$J2EE_HOME///ejb <br />
　　logs是在default.prop<br />
称。生成下列<a href="http://www.javadby.com/"><u>文件</u></a>。<br />
erties <a href="http://www.javadby.com/"><u>文件</u></a>中log.directory <br />
<br />
属性指定的。host元素是计算机名<br />
<br />
<br />
　　　　system.out <br />
　　　　system.err <br />
　　　　event.log <br />
　　　　output.log <br />
　　　　error.log <br />
　　　　system.out 和sys<br />
你运行J2EE -verbose数，<br />
system.out 和 system.err<br />
为true时audit.lo才创建。<br />
tem.err<a href="http://www.javadby.com/"><u>文件</u></a>包括ejb中 System.<br />
输出被写到stdout（标准输出）<br />
日志<a href="http://www.javadby.com/"><u>文件</u></a>不建。只有config/aut<br />
<br />
out 和 System.err的输出。如果<br />
和stderr（标准错误。输出）。<br />
h.properties <a href="http://www.javadby.com/"><u>文件</u></a>中audit属性值<br />
<br />
<br />
　　Multiple VM 日志 <br />
　　如果你用J2EE -mutiVM启动server，<br />
每一个depploy的应用程序也在自己的虚<br />
录不同。目录如下：<br />
ejb和http服务在自己的虚拟机以单独的服务启动。<br />
拟机中运行。日志<a href="http://www.javadby.com/"><u>文件</u></a>和上述的一样，但是存放的目<br />
<br />
<br />
　　EJB $J2EE_HOME//ejb/ejbd <br />
　　HTTP $J2EE_HOME//ejb/httpd <br />
　　deployed application $J2EE_HOME//ejb/ <br />
　　web server日志 <br />
　　编辑web.properties文<br />
件中的内容，可以改变由web se<br />
rver创建的日志<a href="http://www.javadby.com/"><u>文件</u></a>的名字。<br />
<br />
　　10、安全 <br />
　　未授权用户 <br />
　　对于J2EE来说，当有未<br />
义上的未授权用户存在。在<br />
auth.properties <a href="http://www.javadby.com/"><u>文件</u></a>中修<br />
授权的用户试图调用ejb contai<br />
J2EE中这个用户名字是guest，<br />
改用户名和密码。 <br />
ner的时候，J2EE必须存在一般意<br />
密码是guest123。你可以在<br />
<br />
<br />
　　default.principal.name=guest <br />
　　default.principal.password=guest123 <br />
　　Keystore密码 <br />
　　如果用户使用公钥访问https，认证<br />
System.getProperty("user.home")的返<br />
是changeit。可以在web.properties 文<br />
信息放在/.keystore <a href="http://www.javadby.com/"><u>文件</u></a>中。同时user-home是<br />
回值。keystore是一个典型的密码<a href="http://www.javadby.com/"><u>文件</u></a>。默认的密码<br />
件中修改keystore.password 属性的值来改变密码。<br />
<br />
　　ANYONE 角色 <br />
　　在application deploy<br />
色。这样的结果 是所有的<br />
个用户和用户都可以调用它<br />
改变默认anyone角色。<br />
ment工具的security面板中，默<br />
用户和组都可以调用它。如果你<br />
。可以在auth.properties <a href="http://www.javadby.com/"><u>文件</u></a><br />
<br />
认的情况下方法分配给ANYONE 角<br />
没有影射到一个特定的角色，每一<br />
中设置anyone.role.name 的值来<br />
<br />
<br />
　　钝化发生的条件：内存限制 <br />
　　当ejb container开始钝化一个ejb的<br />
内存。默认的情况下，如果内存使用超过<br />
config/default.properties <a href="http://www.javadby.com/"><u>文件</u></a>中pass<br />
。<br />
时候，它把ejb保存在附属存储中并且试图重新分配<br />
128m的时候钝化开始发生。可以编辑<br />
ivation.threshold.memory 属性的值来修改默认值<br />
<br />
<br />
　　passivation.threshold.memory=128000000 <br />
　　值必须是一个正的整数。当你减少这个值的时候钝化现象回经常发生。 <br />
　　jndi name server host <br />
　　如果jndi name server<br />
nfig/orb.properties <a href="http://www.javadby.com/"><u>文件</u></a><br />
和J2EE server不在同一个机器<br />
中host属性的值。<br />
上，你必须改变co<br />
<br />
<br />
　　host=localhost <br />
　　HTTP 文档根 <br />
　　默认的情况下，http和<br />
件中documentroot属性的值<br />
https服务的文档是public_html<br />
来改变它。<br />
。你可以编辑web.properties 文<br />
<br />
<br />
　　documentroot=public_html/<br />
<img src ="http://www.blogjava.net/blameswood/aggbug/150444.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blameswood/" target="_blank">火焰出林</a> 2007-10-04 22:09 <a href="http://www.blogjava.net/blameswood/articles/150444.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对J2EE项目的一些体会</title><link>http://www.blogjava.net/blameswood/articles/150443.html</link><dc:creator>火焰出林</dc:creator><author>火焰出林</author><pubDate>Thu, 04 Oct 2007 14:07:00 GMT</pubDate><guid>http://www.blogjava.net/blameswood/articles/150443.html</guid><wfw:comment>http://www.blogjava.net/blameswood/comments/150443.html</wfw:comment><comments>http://www.blogjava.net/blameswood/articles/150443.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blameswood/comments/commentRss/150443.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blameswood/services/trackbacks/150443.html</trackback:ping><description><![CDATA[1、认真考虑是否真要使用J2EE&nbsp;<br />
<br />
这个很重要，非常重要。J2EE涵盖的内容大而全，但很多不一定就是具体实际项目需要的。象EJB级的权限控制，如果你的表现层（大部分项目就是Web&nbsp;server）和应用服务器不存在信任问题，那么基本上就不用考虑。又比如伸缩性，如果同时在线最多不超过100个，就没什么用处。针对项目的实际情况选择效费比最合适的解决方案，而不要为了应用先进技术而应用先进技术。&nbsp;<br />
<br />
2、选择合适的分布模型&nbsp;<br />
<br />
提起分布，很多人可能都会有这样的设想：server&nbsp;A处理认证，server&nbsp;B处理订单，server&nbsp;C处理仓储；如果B的负载太大，那么再细分一下：录入、修改部分的EJB部署在server&nbsp;D，统计、分析部分的部署在server&nbsp;E，等等。其实没有必要，我的体会是：除非业务必须（如分支机构统一通过总部的app&nbsp;server来进行权限验证），否则最好将所有的应用全部放在一个app&nbsp;server中，能在一个进程空间内更好（使用home&nbsp;interface），然后进行平行的分布?D?D即集群中的所有app&nbsp;server功能上都是等价的。相比前一种垂直（或者网状）分布，平行分布的可靠性、容错能力、伸缩能力都要更好，同时减少了部署、管理负担。最重要的是，减少了因为业务逻辑层内部跨进程调用引起的开销，提高了整体性能。然而，如果a、一些业务逻辑必须相互独立部署、管理，b、负载较为集中地分布在若干个EJB中，那么，垂直分布还是必不可少的。&nbsp;<br />
<br />
3、为Entity&nbsp;bean选择合适的数据存储方案&nbsp;<br />
首先尽量使用CMP管理数据存储，尤其是简单的，大部分业务操作都是插入删除修改的实体，不然光insert&nbsp;update就够你忙的了，更不用说数据库移植问题。其次对于简单的一对一、一对多关系，如果你的app&nbsp;server没有实现EJB2.0规范，可以考虑使用O/R映射工具帮助开发，象Cocobase,&nbsp;EJB&nbsp;creator等等，可以提高不少效率。对于复杂的对象存储，没办法，老老实实写代码吧&#8230;&#8230;&nbsp;<br />
<br />
4、慎重考虑EJBHome.findByXXX()，listXXX()的实现&nbsp;<br />
设想对一个百万记录级的表进行检索，结果集很可能是上万条、十万条，这本身就是一个耗费资源的过程；同时对于检索到的每一个记录还要做一次findByPrimarykey，这么多次跨进程调用，开销可想而知。为什么有的人觉得用J2EE实现的程序奇慢无比，缺乏仔细的设计就是主要原因之一。&nbsp;<br />
<br />
5、使用抽象数据结构传递数据&nbsp;<br />
例如，listOrder()返回Collection而不是Vector，insertItems()也是以Collection为参数而不是LinkedList。当然这个实际上与J2EE本身关系不是很大。&nbsp;<br />
<br />
6、对Entity&nbsp;bean尽量使用Map来存储、传递属性&nbsp;<br />
对业务流程没有很大影响的属性，象身高体重出生年月之类，最好用一个HashMap来存放，而不要直接用成员变量+getXXX/setXXX。对于ejbCreate也是一样，十几个参数的create方法，实现、维护都是代价高昂的。需知实际应用中这些字段的增减、属性变化是家常便饭，光维护get/set方法可能就会让你吐血了。但是，对于对业务流程有关建意义的字段，例如员工的入职日期决定其休假天数的计算，那么还是作为成员变量的好。&nbsp;<br />
7、分清Entity&nbsp;bean和session&nbsp;bean的职责&nbsp;<br />
<br />
Entity&nbsp;bean是实体的对象形式，它的职责应限于自身的存储，以及对外部提供访问内部数据的接口（所以我认为它本质上应该属于数据存储层）。Entity&nbsp;bean应该尽量避免自己实现有其他Entity&nbsp;bean参与的业务逻辑。例如，订单的货款收到以后，将订单的状态由&#8220;提交&#8221;变为&#8220;生效&#8221;，同时将订单的金额按照某种规则折算成该客户的积分。这个业务流程有三个对象参与：客户，订单和积分折算策略。那么，实现流程的方法应该在哪个对象中呢，是客户还是订单？都不合适，如果在订单中，那么订单对象需要了解客户积分属性的接口及积分折算的接口；如果在客户对象中也是一样。耦合度增强就意味着维护难度增大，如果用户对象的积分接口或者折算策略的接口改变了，那么改变就会蔓延到订单对象中。合适的方式是用一个OrderProcessor来管理订单处理流程，以stateless&nbsp;session&nbsp;bean来实现。OrderProcessor了解所有参与订单处理的对象的接口，它集中管理对订单的处理流程，如果流程发生变化，订单生效之前要通过审批，这种变化不会影响到参与流程的实体对象；同样，参与流程的某个对象接口发生了变化，也不会影响到其他对象。&nbsp;<br />
<br />
8、重视表现层的复用&nbsp;<br />
<br />
企业软件的界面，大部分都可以用一些基本元素如grid,&nbsp;tree,&nbsp;page&nbsp;control,&nbsp;form等组合而来。如果能合理采用一些技术对这些元素进行复用，不但有利于降低开发成本，而且也便于统一维护界面风格。对J2EE的表现层，也就是JSP/servlet，可以采用的复用技术不多，基本上就是文件包含、创建类库、Tag&nbsp;lig（本质上还是创建类库，使用起来我觉得还不一定有直接方法调用来的方便）等等。还有一些不同于JSP/servlet的表现层框架，如Apache&nbsp;Velocity、Enhydra、WebMacro等等，也可以参考。虽然Java还没有一个规范的、统一的HTML界面元素类库，但自己项目内部统一使用某种方案还是可能的。&nbsp;<br />
<br />
另外，XML+XSLT也是一种方案。将数据直接用XML形式表现出来，绕过Entity&nbsp;bean，然后再用XSLT模版转化成最终界面。XML与XSLT之间属于模式匹配式的松散耦合，可以避免强类型语言方法调用带来的参数类型、个数、顺序限制，做到彻底地数据与界面分离；同时XML形式的数据集在app&nbsp;server中可以按照合适的方案进行缓冲，避免频繁访问数据库，抵销XSLT转换引入的性能负担。同时XML和XSLT是业界广泛采纳的标准，如果今后采用不同的体系结构（如从J2EE移植到.Net或者相反），表现层的XSLT形式的界面可以重用。JSP或ASP就没有这种可能。问题在于首先要管理关系型数据到层次型XML数据的映射，其次如果没有一个好的工具，创建、维护XSLT也是很费时费力的事情。我现在的项目正在朝这个方向努力，希望能做一个象Delphi那样好用的，基于XSLT的HTML界面控件开发、管理、使用环境。&nbsp;<br />
<br />
9、充分估计开发的艰辛程度&nbsp;<br />
<br />
这个，一言难尽。总之实际需求的变化往往是超乎我们想象的，要在需求分析结束的时候就清晰划分模块接口几乎做不到，计划不如变化。而J2EE体系架构是重量级的框架，虽然app&nbsp;server实现了很多功能，但同时也要求你开发的时候付出额外的代价。对于J2EE项目的资金、时间、人手等资源估计，宁可多不可少，千万不要简单认为用了一个weblogic就万事大吉了。&nbsp;<br />
<img src ="http://www.blogjava.net/blameswood/aggbug/150443.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blameswood/" target="_blank">火焰出林</a> 2007-10-04 22:07 <a href="http://www.blogjava.net/blameswood/articles/150443.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>漫长的道路——走向J2EE </title><link>http://www.blogjava.net/blameswood/articles/150442.html</link><dc:creator>火焰出林</dc:creator><author>火焰出林</author><pubDate>Thu, 04 Oct 2007 14:05:00 GMT</pubDate><guid>http://www.blogjava.net/blameswood/articles/150442.html</guid><wfw:comment>http://www.blogjava.net/blameswood/comments/150442.html</wfw:comment><comments>http://www.blogjava.net/blameswood/articles/150442.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blameswood/comments/commentRss/150442.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blameswood/services/trackbacks/150442.html</trackback:ping><description><![CDATA[<p>初次涉及<a href="http://www.javadby.com/"><u>Java</u></a>领域，感觉到<a href="http://www.javadby.com/"><u>Java</u></a>入门是好像没有C,C++入门快，工具也没有什么Turbo C,Visual C++好用（自己的破机器实在陪不起JBuilder，贪婪的家伙，以后一定要收拾她）。什么JAVA_HOME,CLASSPATH，虚拟机等概念都是初次基础，旁边的人都很少用<a href="http://www.javadby.com/"><u>Java</u></a>的。感觉<a href="http://www.javadby.com/"><u>Java</u></a>就是做Applet的。慢慢的知道了<a href="http://java.sun.com/">http://java.sun.com</a>，开始知道<a href="http://www.javadby.com/"><u>Java</u></a>博大精深。让我不可思议的是JAVA 2,JDK,J2SE,<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>,J2ME等新名词在自己的脑海里蔓延。慢慢的自己知道了JCP组织是制定<a href="http://www.javadby.com/"><u>Java</u></a>相关规范的发源地<a href="http://java.jcp.org/">http://java.jcp.org</a> ,于是订阅了一份邮件列表。真是好东西啊，定期有<a href="http://www.javadby.com/"><u>Java</u></a>的最新动向，所以<a href="http://www.javadby.com/"><u>Java</u></a>的动态尽收眼里，建议大家也去订阅一份。免费的。自己动手下载了<a href="http://www.javadby.com/"><u>Java</u></a>(TM) 2 SDK和<a href="http://www.javadby.com/"><u>Java</u></a>(TM) 2 SDK Documentation后,不懂的就查<a href="http://www.javadby.com/"><u>Java</u></a>(TM) 2 SDK Documentation,特别好用，也不需要什么手册之类的，建议大家都要有一份。<br />
&nbsp;&nbsp;&nbsp; 搭起<a href="http://www.javadby.com/"><u>Java</u></a>开发环境后，记得还是用UltraEdit编辑并编译的（在其中可以配好<a href="http://www.javadby.com/"><u>Java</u></a>的编译环境）。慢慢的改用JCreator了。不错，至少很多方面有改进。最开始卖了一套&lt;<a href="http://www.javadby.com/"><u>Java</u></a> 2核心技术&gt; 2本书，还不错。对于入门来说足够了。慢慢的知道&lt;Thinking in <a href="http://www.javadby.com/"><u>Java</u></a>&gt;是一本好书，后来才知道，有了<a href="http://www.javadby.com/"><u>Java</u></a>经验后，看这本书特别过瘾，所以现在还经常翻翻。周而复始的看，效果特别好。慢慢的知道了Oreilly公司（<a href="http://www.oreilly.com/">http://www.oreilly.com</a>）出的图书不错，很高雅，国内翻译的也还可以（<a href="http://www.oreilly.com.cn/">http://www.oreilly.com.cn</a>）。本人收集了很多Oreilly的原版图书，有需要的可以和我联系（Acrobat pdf格式）。慢慢知道了jjhou这个人.(<a href="http://jjhou.csdn.net/">http://jjhou.csdn.net</a> )以及他的个人网站，最让我感兴趣的是jjhou老师写的散文，书评，很有收获，不是为技术而技术。很有趣味性。其中, <a href="http://www.epubcn.com/">http://www.epubcn.com</a> 上有很多美丽的图书。<br />
&nbsp;&nbsp;&nbsp; 不知道什么时候，要开始干项目了，以前从书上看到的东西，慢慢的在项目中有了很好的机会去温习，慢慢的有了感觉，开始主要是用Swing,开发桌面系统，放置一个按钮怎么也放不好，后来才知道有一个布局管理器。咳，这个婆婆的<a href="http://www.javadby.com/"><u>Java</u></a>也讨厌的很。开始涉及到数据库访问,JDBC。后来我才知道，Sun的<a href="http://www.javadby.com/"><u>Java</u></a>网站有一个<a href="http://www.javadby.com/"><u>Java</u></a> Tutorial。（<a href="http://java.sun.com/docs/books/tutorial/">http://java.sun.com/docs/books/tutorial/</a> ）。同时，也知道了蔡??先生的sleepless in java(<a href="http://www.oreilly.com.tw/sleepless/index.htm">http://www.oreilly.com.tw/sleepless/index.htm</a> ),太美了，美的很。 满满的，OReilly, <a href="http://www.onjava.com/">http://www.onjava.com/</a> 也是不错的地方。都有很多优秀的文章。<a href="http://www-900.ibm.com/developerWorks/cn/index.shtml">http://www-900.ibm.com/developerWorks/cn/index.shtml</a>，也很棒。<br />
&nbsp;&nbsp;&nbsp; 每次，美美的享用一顿大餐后，也来也觉得自己是不是应该换一种学习方式，因为这样学习效果不太好。比较乱。让我想起了<a href="http://www.javadby.com/"><u>Java</u></a> Specification，对，我开始研究<a href="http://www.javadby.com/"><u>Java</u></a>规范了。最开始下载的规范是JDBC Specification，很多概念一目了然，尤其是DATABASE的事务性控制，自己对于她的理解慢慢的有了较为深入的了解。对于开发C/S结构，比如,Swing+JDBC,开发数据库应用系统，让我学会开发两层结构的应用系统。很神气。<br />
&nbsp;&nbsp;&nbsp; 也不知道什么时候要开始开发一个网站，基于Linux+JSP+<a href="http://www.javadby.com/"><u>Java</u></a>Bean+Oracle的系统。很是有意思。为什么这么说呢？因为不同于Swing+JDBC的开发模式，系统之间多了一层(<a href="http://www.javadby.com/"><u>Java</u></a>Bean,姑且就这么叫吧！嘻嘻)；同时，很多开发技术和面向左面系统不一样，比如分页技术。<br />
&nbsp;&nbsp;&nbsp; 完成项目后，自己对于<a href="http://www.javadby.com/"><u>Java</u></a>的很多方面都比较了解了。开始思考一个问题，<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>是什么东西？。我们学习<a href="http://www.javadby.com/"><u>Java</u></a>大概有3个方向，第一，桌面系统，包括C/S结构；第二，J2ME,面向无限领域，很有潜力的家伙，看看中国的手机用户就知道了。第三，面向企业应用、计算的平台,<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>.<br />
&nbsp;&nbsp;&nbsp; 在痛苦的抉择后，我选择<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>..分享<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>给我带来的快乐。学到现在，最大的感觉，就是: 简单就是美，美就是<a href="http://www.javadby.com/"><u>Java</u></a>.不会有学MFC的痛苦，也不会有去分析STL的艰辛，网路应用上一点也不逊色于C++。开始进入我的<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>之旅。<br />
&nbsp;&nbsp;&nbsp; 还是下载了一份<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>规范，一份<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a> SDK。开始研究<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>,结合<a href="http://java.sun.com/j2ee/tutorial/index.html">http://java.sun.com/j2ee/tutorial/index.html</a> 提供的<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a> Tutorial开始研究了。大概过了1个月，开始有感觉了，也就在这个时候，需要我去完成一个<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>构架方面的项目。差不多边学编写完成了，很多概念在写完后都不是很清晰，因为东西太多了，主要是基于JSP(Servlet)+Session Bean+EIS构架开发系统。当然也学到很多东西，至少对SB&nbsp; EJB的编写不成问题。懂得了JSP如何调用EJB&#8230;&#8230;..<br />
&nbsp;&nbsp;&nbsp; 完成项目后，我开始研究<a href="http://www.javadby.com/"><u>Java</u></a> Pet Store了，很是过瘾。开始知道了Servlet过滤器，XML方面较为全面的知识，知道了<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>整个框架中各种技术的实际应用。慢慢的，开始研究WebLogic配置好的Pet Store（也是Sun公司的）。慢慢的分析两者的不同之处。开始对<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a> Specification有了很好的感觉。因为<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a> Specification本身是很严肃的，但Pet Store给出了活力。在反复的学习中，我明白了<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>构架的70?D80%。新的问题又出来了，实际企业中会如何建构一个<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>系统呢？带着这个问题，我开始分析Core <a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a> Patterns,这本书。同时，也有EJB Design Patterns。慢慢的，开始知道了<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的魅力所在，知道了<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>为什么会在企业中得到较为好的认可。大家都知道，设计模式一词，在公司上班，你们的老板会看你的代码吗？会赞赏你的DP很好吗，我想很少。在完成你的工作进度之余，加班，加班，再加班，我想你没有更多的时间去分析研究DP.但，<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>框架不一样，她内置了很多优秀的设计模式，我们在设计开发、构架一个<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>系统中用到了很多设计模式。比如，MVC,EJB中封装的DAO设计模式。构架J2E系统用Session Fa&#231;ade,Message Fa&#231;ade设计模式也不会太困难。这也是后来<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>吸引我的地方。慢慢的我知道了，作为一个<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>开发者，我们要掌握其中的核心内容。我个人认为，3方面很重要。实施EJB系统常用的架构、设计模式，比如session fa&#231;ade、message fa&#231;ade、DTO等。<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>系统构架中常用的模式。UML-&gt; EJB,EJB-&gt;UML相互映射。现在也一样在研究。<br />
&nbsp;&nbsp;&nbsp; 善于享受孤独，幸好还有<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>！</p>
<img src ="http://www.blogjava.net/blameswood/aggbug/150442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blameswood/" target="_blank">火焰出林</a> 2007-10-04 22:05 <a href="http://www.blogjava.net/blameswood/articles/150442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA运行环境与J2EE运行环境的搭建 </title><link>http://www.blogjava.net/blameswood/articles/150439.html</link><dc:creator>火焰出林</dc:creator><author>火焰出林</author><pubDate>Thu, 04 Oct 2007 14:01:00 GMT</pubDate><guid>http://www.blogjava.net/blameswood/articles/150439.html</guid><wfw:comment>http://www.blogjava.net/blameswood/comments/150439.html</wfw:comment><comments>http://www.blogjava.net/blameswood/articles/150439.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blameswood/comments/commentRss/150439.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blameswood/services/trackbacks/150439.html</trackback:ping><description><![CDATA[<font color="#333333">很多人不能够很好的进行JAVA编程，原因就在于对JAVA运行环境的不了解或是了解得不够透彻。如果连一个普通的JAVA程序运行环境都搭建不好。就更不要说理解J2EE的运行环境搭建了。故本文首先介绍如何搭建普通JAVA程序的运行环境，再介绍如何在这个基础上进一步搭建J2EE运行环境。<br />
　　<br />
　　<strong>一、什么是JDK？</strong><br />
　　<br />
　　学JAVA的人都应该知道SUN公司的JAVA 技术平台按其应用环境的不同有三个非常著名的版本，他们是J2SE（用于普通桌面应用程序的开发），J2EE（用于企业级应用程序的开发）和J2ME（用于移动设备及其他消费类电子产品的应用程序开发），SUN公司为这三个版本分别提供了相应的开发工具包（SDK：SoftWare Development Kits）,下载的网址在http://www.sun.com/downloads，不过可能因为全世界太多人登录的原故，网页经常出现打不开的现象，其实大家在国内一些常用的资料下载网站同样可以DOWN到这些工具包的。在此不一一列举了。顺便提一下J2SE和J2EE目前最新的SDK版本是：<br />
　　<br />
　　● J2SE 5.0 JDK<br />
　　<br />
　　● J2EE 1.4 SDK<br />
　　<br />
　　值得一提的是我们通常所说的JDK工具包指的是J2SE的SDK。目前一般学习者用得最多的也就是这个工具包了。大家还要注意一点，SUN公司为不同的操作系统提供了不同的JDK<a href="http://www.javadby.com/"><u>文件</u></a>，而且这些<a href="http://www.javadby.com/"><u>文件</u></a>又有脱机版（OFFLINE）与在线安装版（ONLINE）之分，所以在下载的时候要注意选择正确的<a href="http://www.javadby.com/"><u>文件</u></a>。<br />
　　<br />
　　那么JDK这个工具包里到底有些什么东东呢？其实这里面包括了JAVA程序的开发工具（JAVAC命令等）、运行环境（JAVA命令等）和核心类包。可想而知要想运行JAVA程序。就必须安装好JDK工具包。<br />
　　<br />
　　<strong>二、如何安装JDK？</strong><br />
　　<br />
　　当我们从网络上DOWN下J2SE 5.0 JDK以后（是一个可执行<a href="http://www.javadby.com/"><u>文件</u></a>，<a href="http://www.javadby.com/"><u>文件</u></a>名叫做jdk-1_5_0-windows-i586.exe，当然这个名字会因为对应操作系统的不同而有所区别的，我使用的操作系统就是WINDOWS，大家发现了吗？），双击他就开始安装了。需要注意的就是选择安装路径的问题，通常我们将它安装在C盘根目录下（这也是安装程序默认的路径），其他的工作就是一个接一个地按NEXT啦。<br />
　　<br />
　　<strong>三、搭建运行和开发环境</strong><br />
　　<br />
　　是不是当我们装完JDK以后就可以编写代码，准备编译运行了呢？别忙。大家还是跟着我一起检查一下吧：<br />
　　<br />
　　1、点击操作系统桌面上左下角的&#8216;开始&#8217;菜单，选择&#8216;运行&#8217;，然后在打开对话框里输入CMD，看到了吧，我们进入了命令提示符窗口，我们爱叫他DOS界面。<br />
　　<br />
　　2、现在大家在窗口里应该看到提示符了吧，通常会是这样：C:\Documents and Settings\Administrator&gt;<br />
　　<br />
　　3、下面让我们在提示符后面敲上这样一个命令：JAVA，出现了这样的提示了吗？<br />
　　<br />
　　Usage: java [-options] class [args...]<br />
　　(to execute a class)<br />
　　or　java [-options] -jar jarfile [args...]<br />
　　(to execute a jar file)<br />
　　&#8230;&#8230;<br />
　　<br />
　　这是JAVA命令的帮助信息，如果有，那么成功一半了。<br />
　　<br />
　　4、接下来，继续试一下：在命令提示符处敲：JAVAC。同样也出现了JAVAC的命令帮助提示了吗？我想应该没有吧。你看到的也许会是这样： &#8216;javac&#8217;不是内部或外部命令，也不是可运行的程序或批处理<a href="http://www.javadby.com/"><u>文件</u></a>。<br />
　　<br />
　　为什么出现这样的情况呢？<br />
　　<br />
　　这是因为我们的操作系统在执行一个命令时，首先会到当前目录下去查找这个命令<a href="http://www.javadby.com/"><u>文件</u></a>。如果在当前目录下找不到，他就会按照系统变量PATH所指示的多条路径里去搜索，直到找到为止。如果在这两个地方都找不到他就会报上面大家看到的错误。<br />
　　<br />
　　在C:\Documents and Settings\Administrator这个路径下我们当然找不到JAVAC命令啦。我们的JDK不是安装在C盘根目录下吗？而我们的JAVAC、JAVA命令则在JDK目录下的BIN<a href="http://www.javadby.com/"><u>文件</u></a>夹里，这个夹子里还有许多其他宝贝命令。如下图所示：<br />
　　<br />
　　怎样才能让操作系统找到JAVAC命令呢？很简单！我们需要修改一下系统变量PATH，这样就不用每次要运行这个命令时都得跑到C:\j2sdk1.4.2_02\bin这个路径下面去了。怎样修改PATH，我们在第四个专题里来介绍。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5、当我们在PATH变量里加了一条路径：C:\j2sdk1.4.2_02\bin以后，再到命令提<br />
　　<br />
　　示符状态下输入JAVAC，就会出现帮助提示了。这就说明我们可以开始写JAVA程序了。<br />
　　<br />
　　6、让我们写一个Hello.java测试一下吧，我在E:\LESSON1这个<a href="http://www.javadby.com/"><u>文件</u></a>夹下创建<br />
　　<br />
　　了一个文本<a href="http://www.javadby.com/"><u>文件</u></a>，输入如下一段代码，并且将之保存为Hello.java。<br />
　　<br />
　　public class Hello<br />
　　{<br />
　　public static void main(String args[])<br />
　　{<br />
　　System.out.println("Hello World!");<br />
　　}<br />
　　}<br />
　　<br />
　　7、好现在我们又回到命令提示符状态下。在提示符处输入：JAVAC Hello.java,命<br />
　　<br />
　　令又出错了。为什么？因为<a href="http://www.javadby.com/"><u>文件</u></a>是建在E:\LESSON1下面，而我们的当前目录却不是它。在提示符处敲入：&#8216;E：&#8217;，然后再敲：&#8216;cd lesson1&#8217;，进入JAVA<a href="http://www.javadby.com/"><u>文件</u></a>所在的那个目录后，现在再敲JAVAC Hello.java，<a href="http://www.javadby.com/"><u>文件</u></a>成功编译。注意成功编译后会在当前目录下生出一个名叫：Hello.class的字节码<a href="http://www.javadby.com/"><u>文件</u></a>。但是屏幕上没有任何提示。<br />
　　<br />
　　8、再试着运行一下&#8216;java Hello&#8216;这个命令，可以运行吗？当然不行。为什么，<br />
　　<br />
　　因为我们的字节码<a href="http://www.javadby.com/"><u>文件</u></a>是在JAVA虚拟机里运行的，所有关于虚拟机要使用的字节码<a href="http://www.javadby.com/"><u>文件</u></a>的路径必须在一个叫做CLASSPATH的操作系统变量里找得到。否则我们的虚拟机就无法找到这个字节码<a href="http://www.javadby.com/"><u>文件</u></a>，从而也就无从执行了。<br />
　　<br />
　　9、怎么办？先运行如下命令：set classpath=%classpath%;E:\lesson1，然后再运<br />
　　<br />
　　行 java Hello 这个命令。屏幕上终于出现了亲切的问候：Hello world!<br />
　　<br />
　　不过奇怪的事情又发生了。当我们重新启动一个命令提示符窗口再运行这个JAVA<a href="http://www.javadby.com/"><u>文件</u></a>时，又无法执行了，屏幕提示：Exception in thread "main" java.lang.NoClassDefFoundError: Hello。还是老问题，虚拟机又找不到字节码<a href="http://www.javadby.com/"><u>文件</u></a>了。WHY?其实我们在DOS窗口中设置的系统变量只对当前窗口有效。要想让我们的变量设置对任何一个DOS窗口都有效，还得到桌面上去做。我们仍然将在第四个专题里讲述CLASSPATH这个JAVA环境变量的设置。<br />
　　<br />
　　<strong>四、PATH系统变量与CLASSPATH环境变量的设置</strong><br />
　　<br />
　　为什么需要设置PATH和CLASSPATH变量我们在前面的专题已经介绍过了。下面我们讲一下具体如何设置：<br />
　　<br />
　　1、右键单击我的电脑，选&#8216;属性&#8217;菜单，在弹出的对话框里选择&#8216;高级&#8216;选项卡。然后在高级选项卡页按下&#8216;环境变量&#8217;按钮。<br />
　　<br />
　　2、在弹出的环境变量窗口里我们将会看到它分为两个部分。一部分是谁谁用户的变量，如：Administrator的用户变量。一部分是系统变量。通常情况下我们在命令提示符下能够使用的变量数目是用户变量＋系统变量数目之和。那我们不管用户变量。直接到系统变量格里去寻找PATH变量吧。通常情况下系统装好后PATH变量在这里是早就存在了的。但是CLASSPATH变量则没有。<br />
　　<br />
　　环境变量窗口见图示：<br />
　　<br />
　　3、找到PATH变量后，双击这个变量名称后，将会弹出编辑系统变量窗口。将光标停到变量值对话框的最后，然后加上&#8216;；C:\j2sdk1.4.2_02\bin &#8217;。注意分号后的路径就是JAVA和JAVAC命令所在的路径。见图示：<br />
　　<br />
　　4、找不到CLASSPATH变量该怎么办呢？很简单。按下系统变量框下的新建按钮。然后在弹出的新建系统变量对话框里输入你要加的变量名称：CLASSPATH，在变量值对话框里输入你要运行的字节码<a href="http://www.javadby.com/"><u>文件</u></a>所在的路径。如图示：<br />
　　<br />
　　大家在以后的学习中会发现，只要是虚拟机运行所需的字节码<a href="http://www.javadby.com/"><u>文件</u></a>（即类<a href="http://www.javadby.com/"><u>文件</u></a>），包括SUN公司提供给我们的类。都需要将这些<a href="http://www.javadby.com/"><u>文件</u></a>所在的路径放到CLASSPATH下。否则，程序在编译过程中会经常找不着所需要的类包。那可是很头疼的事。比如说：JDK安装目录下的LIB目录下就有许多*.jar<a href="http://www.javadby.com/"><u>文件</u></a>。当我们的程序要使用到这些压缩<a href="http://www.javadby.com/"><u>文件</u></a>里的类时，就需要把这些<a href="http://www.javadby.com/"><u>文件</u></a>所在的路径加到CLASSPATH里，比如说：C:\j2sdk1.4.2_02\lib\dt.jar。<br />
　　<br />
　　注意添加*.jar包和直接添加*.class<a href="http://www.javadby.com/"><u>文件</u></a>的路径是有一点小小区别的，前者要包含JAR包的名字。而后者只需<a href="http://www.javadby.com/"><u>文件</u></a>路径。<br />
　　<br />
　　<strong>五、J2EE运行环境的搭建</strong><br />
　　<br />
　　开发企业级的应用程序需要搭建好J2EE的运行环境。其实也就是到SUN公司的网站上去DOWN下J2EE 1.4 SDK开发工具包。然后双击安装<a href="http://www.javadby.com/"><u>文件</u></a>，如果你下载的版本与我的一样。那么这个安装<a href="http://www.javadby.com/"><u>文件</u></a>就会是这个名字：j2eesdk-1_4-dr-windows-eval.exe。同样的我们也将J2EE SDK安装在C盘根目录下。<br />
　　<br />
　　需要特别提醒大家的是：J2EE运行环境的搭建是以J2SE运行环境的搭建为基础的。其实想也想得到为什么。如果没有JDK，哪里来的编译和运行命令呢（JAVA和javac）。安装完J2EE 1.4 SDK包后，具体的设置与测试步骤如下：<br />
　　<br />
　　1、首先右往PATH变量里添加J2EE SDK的BIN目录。如：C:\j2sdkee1.3.1\bin。如何往里面添加，前面已经讲过。<br />
　　<br />
　　2、然后新建两个变量：一个是JAVA_HOME，变量值为：JDK的安装目录。另一个是J2EE_HOME，变量值为J2EE SDK的安装目录。如图示：<br />
　　<br />
　　3、最后往CLASSPATH变量里添加一个关键的JAR包。它就是J2EE.JAR包。比如我添加的就是：C:\j2sdkee1.3.1\lib\j2ee.jar。<br />
　　<br />
　　4、所有的工作做完以后。大家可以通过以下方式验证一下我们的J2EE环境是否已经搭建成功。在命令提示符状态下输入命令：J2EE －Verbose。如果屏幕的最下面看到了这样一句话J2EE server startup complete.那就表示J2EE服务器成功启动了。在我们的J2EE程序要布署和运行的过程中。服务器将一直启动着。</font></font>
<img src ="http://www.blogjava.net/blameswood/aggbug/150439.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blameswood/" target="_blank">火焰出林</a> 2007-10-04 22:01 <a href="http://www.blogjava.net/blameswood/articles/150439.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE入门之——全面介绍</title><link>http://www.blogjava.net/blameswood/articles/150437.html</link><dc:creator>火焰出林</dc:creator><author>火焰出林</author><pubDate>Thu, 04 Oct 2007 13:57:00 GMT</pubDate><guid>http://www.blogjava.net/blameswood/articles/150437.html</guid><wfw:comment>http://www.blogjava.net/blameswood/comments/150437.html</wfw:comment><comments>http://www.blogjava.net/blameswood/articles/150437.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blameswood/comments/commentRss/150437.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blameswood/services/trackbacks/150437.html</trackback:ping><description><![CDATA[<p><strong>一.<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的概念</strong></p>
<p>目前，Java2平台有3个版本，它们是适用于小型设备和智能卡的Java2平台Micro版（Java2PlatformMicroEdition，J2ME）、适用于桌面系统的Java2平台标准版（Java2PlatformStandardEdition，J2SE）、适用于创建服务器应用程序和服务的Java2平台企业版（Java2PlatformEnterpriseEdition，<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>）。<br />
<br />
<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>是一种利用Java2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>技术的基础就是核心Java平台或Java2平台的标准版，<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>不仅巩固了标准版中的许多优点，例如"编写一次、随处运行"的特性、方便存取数据库的JDBCAPI、CORBA技术以及能够在Internet应用中保护数据的安全模式等等，同时还提供了对EJB（EnterpriseJavaBeans）、JavaServletsAPI、JSP（JavaServerPages）以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。<br />
<br />
<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>体系结构提供中间层集成框架用来满足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用的需求。通过提供统一的开发平台，<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>降低了开发多层应用的费用和复杂性，同时提供对现有应用程序集成强有力支持，完全支持EnterpriseJavaBeans，有良好的向导支持打包和部署应用，添加目录支持，增强了安全机制，提高了性能。<br />
<br />
<strong>二.<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的优势</strong></p>
<p><a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>为搭建具有可伸缩性、灵活性、易维护性的商务系统提供了良好的机制:<br />
<br />
保留现存的IT资产:由于企业必须适应新的商业需求，利用已有的企业信息系统方面的投资，而不是重新制定全盘方案就变得很重要。这样，一个以渐进的（而不是激进的，全盘否定的）方式建立在已有系统之上的服务器端平台机制是公司所需求的。<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>架构可以充分利用用户原有的投资，如一些公司使用的BEATuxedo、IBMCICS,IBMEncina,、InpriseVisiBroker以及NetscapeApplicationServer。这之所以成为可能是因为<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>拥有广泛的业界支持和一些重要的'企业计算'领域供应商的参与。每一个供应商都对现有的客户提供了不用废弃已有投资，进入可移植的<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>领域的升级途径。由于基于<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>平台的产品几乎能够在任何操作系统和硬件配置上运行，现有的操作系统和硬件也能被保留使用。<br />
<br />
高效的开发:<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>允许公司把一些通用的、很繁琐的服务端任务交给中间件供应商去完成。这样开发人员可以集中精力在如何创建商业逻辑上，相应地缩短了开发时间。高级中间件供应商提供以下这些复杂的中间件服务:<br />
<br />
状态管理服务--让开发人员写更少的代码，不用关心如何管理状态，这样能够更快地完成程序开发。<br />
<br />
持续性服务--让开发人员不用对数据访问逻辑进行编码就能编写应用程序，能生成更轻巧，与数据库无关的应用程序，这种应用程序更易于开发与维护。</p>
<p>分布式共享数据对象CACHE服务--让开发人员编制高性能的系统，极大提高整体部署的伸缩性。<br />
<br />
支持异构环境:<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>能够开发部署在异构环境中的可移植程序。基于<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的应用程序不依赖任何特定操作系统、中间件、硬件。因此设计合理的基于<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的程序只需开发一次就可部署到各种平台。这在典型的异构企业计算环境中是十分关键的。<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>标准也允许客户订购与<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>兼容的第三方的现成的组件，把他们部署到异构环境中，节省了由自己制订整个方案所需的费用。<br />
<br />
可伸缩性:企业必须要选择一种服务器端平台，这种平台应能提供极佳的可伸缩性去满足那些在他们系统上进行商业运作的大批新客户。基于<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>平台的应用程序可被部署到各种操作系统上。例如可被部署到高端UNIX与大型机系统，这种系统单机可支持64至256个处理器。（这是NT服务器所望尘莫及的）<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>领域的供应商提供了更为广泛的负载平衡策略。能消除系统中的瓶颈，允许多台服务器集成部署。这种部署可达数千个处理器，实现可高度伸缩的系统，满足未来商业应用的需要。<br />
<br />
稳定的可用性:一个服务器端平台必须能全天候运转以满足公司客户、合作伙伴的需要。因为INTERNET是全球化的、无处不在的，即使在夜间按计划停机也可能造成严重损失。若是意外停机，那会有灾难性后果。<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>部署到可靠的操作环境中，他们支持长期的可用性。一些<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>部署在WINDOWS环境中，客户也可选择健壮性能更好的操作系统如SunSolaris、IBMOS/390。最健壮的操作系统可达到99.999%的可用性或每年只需5分钟停机时间。这是实时性很强商业系统理想的选择。<br />
<br />
<strong>三.<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的四层模型</strong></p>
<p><a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>使用多层的分布式应用模型，应用逻辑按功能划分为组件，各个应用组件根据他们所在的层分布在不同的机器上。事实上，sun设计<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的初衷正是为了解决两层模式(client/server)的弊端，在传统模式中，客户端担当了过多的角色而显得臃肿，在这种模式中，第一次部署的时候比较容易，但难于升级或改进，可伸展性也不理想，而且经常基于某种专有的协议??通常是某种数据库协议。它使得重用业务逻辑和界面逻辑非常困难。现在<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的多层企业级应用模型将两层化模型中的不同层面切分成许多层。一个多层化应用能够为不同的每种服务提供一个独立的层，以下是<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>典型的四层结构:<br />
<br />
运行在客户端机器上的客户层组件<br />
<br />
运行在<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>服务器上的Web层组件<br />
<br />
运行在<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>服务器上的业务逻辑层组件<br />
<br />
运行在EIS服务器上的企业信息系统(Enterpriseinformationsystem)层软件</p>
<p><strong><a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>应用程序组件</strong></p>
<p><a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>应用程序是由组件构成的.<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>组件是具有独立功能的软件单元，它们通过相关的类和文件组装成<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>应用程序，并与其他组件交互。</p>
<p>2EE说明书中定义了以下的<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>组件:应用客户端程序和applets是客户层组件.JavaServlet和JavaServerPages(JSP)是web层组件.EnterpriseJavaBeans(EJB)是业务层组件.<br />
<br />
客户层组件：<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>应用程序可以是基于web方式的,也可以是基于传统方式的.<br />
<br />
web层组件：<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>web层组件可以是JSP页面或Servlets.按照<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>规范，静态的HTML页面和Applets不算是web层组件。web层可能包含某些JavaBean对象来处理用户输入，并把输入发送给运行在业务层上的enterprisebean来进行处理。<br />
<br />
业务层组件：业务层代码的逻辑用来满足银行，零售，金融等特殊商务领域的需要,由运行在业务层上的enterprisebean进行处理.下图表明了一个enterprisebean是如何从客户端程序接收数据，进行处理(如果必要的话),并发送到EIS层储存的，这个过程也可以逆向进行。<br />
<br />
有三种企业级的bean:会话(session)beans,实体(entity)beans,和消息驱动(message-driven)beans.会话bean表示与客户端程序的临时交互.当客户端程序执行完后,会话bean和相关数据就会消失.相反,实体bean表示数据库的表中一行永久的记录.当客户端程序中止或服务器关闭时,就会有潜在的服务保证实体bean的数据得以保存.消息驱动bean结合了会话bean和JMS的消息监听器的特性,允许一个业务层组件异步接收JMS消息.<br />
<br />
企业信息系统层<br />
<br />
企业信息系统层处理企业信息系统软件包括企业基础建设系统例如企业资源计划(ERP),大型机事务处理,数据库系统,和其它的遗留信息系统.例如，<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>应用组件可能为了数据库连接需要访问企业信息系统</p>
<p>&nbsp;</p>
<p><strong>一.<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的概念</strong></p>
<p>目前，Java2平台有3个版本，它们是适用于小型设备和智能卡的Java2平台Micro版（Java2PlatformMicroEdition，J2ME）、适用于桌面系统的Java2平台标准版（Java2PlatformStandardEdition，J2SE）、适用于创建服务器应用程序和服务的Java2平台企业版（Java2PlatformEnterpriseEdition，<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>）。<br />
<br />
<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>是一种利用Java2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>技术的基础就是核心Java平台或Java2平台的标准版，<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>不仅巩固了标准版中的许多优点，例如"编写一次、随处运行"的特性、方便存取数据库的JDBCAPI、CORBA技术以及能够在Internet应用中保</p>
<p>护数据的安全模式等等，同时还提供了对EJB（EnterpriseJavaBeans）、JavaServletsAPI、JSP（JavaServerPages）以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。<br />
<br />
<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>体系结构提供中间层集成框架用来满足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用的需求。通过提供统一的开发平台，<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>降低了开发多层应用的费用和复杂性，同时提供对现有应用程序集成强有力支持，完全支持EnterpriseJavaBeans，有良好的向导支持打包和部署应用，添加目录支持，增强了安全机制，提高了性能。<br />
<br />
<strong>二.<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的优势</strong> </p>
<p>&nbsp;</p>
<p><a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>为搭建具有可伸缩性、灵活性、易维护性的商务系统提供了良好的机制:<br />
<br />
保留现存的IT资产:由于企业必须适应新的商业需求，利用已有的企业信息系统方面的投资，而不是重新制定全盘方案就变得很重要。这样，一个以渐进的（而不是激进的，全盘否定的）方式建立在已有系统之上的服务器端平台机制是公司所需求的。<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>架构可以充分利用用户原有的投资，如一些公司使用的BEATuxedo、IBMCICS,IBMEncina,、InpriseVisiBroker以及NetscapeApplicationServer。这之所以成为可能是因为<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>拥有广泛的业界支持和一些重要的'企业计算'领域供应商的参与。每一个供应商都对现有的客户提供了不用废弃已有投资，进入可移植的<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>领域的升级途径。由于基于<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>平台的产品几乎能够在任何操作系统和硬件配置上运行，现有的操作系统和硬件也能被保留使用。<br />
<br />
高效的开发:<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>允许公司把一些通用的、很繁琐的服务端任务交给中间件供应商去完成。这样开发人员可以集中精力在如何创建商业逻辑上，相应地缩短了开发时间。高级中间件供应商提供以下这些复杂的中间件服务:<br />
<br />
状态管理服务--让开发人员写更少的代码，不用关心如何管理状态，这样能够更快地完成程序开发。<br />
<br />
持续性服务--让开发人员不用对数据访问逻辑进行编码就能编写应用程序，能生成更轻巧，与数据库无关的应用程序，这种应用程序更易于开发与维护。</p>
<p>分布式共享数据对象CACHE服务--让开发人员编制高性能的系统，极大提高整体部署的伸缩性。<br />
<br />
支持异构环境:<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>能够开发部署在异构环境中的可移植程序。基于<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的应用程序不依赖任何特定操作系统、中间件、硬件。因此设计合理的基于<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的程序只需开发一次就可部署到各种平台。这在典型的异构企业计算环境中是十分关键的。<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>标准也允许客户订购与<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>兼容的第三方的现成的组件，把他们部署到异构环境中，节省了由自己制订整个方案所需的费用。<br />
<br />
可伸缩性:企业必须要选择一种服务器端平台，这种平台应能提供极佳的可伸缩性去满足那些在他们系统上进行商业运作的大批新客户。基于<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>平台的应用程序可被部署到各种操作系统上。例如可被部署到高端UNIX与大型机系统，这种系统单机可支持64至256个处理器。（这是NT服务器所望尘莫及的）<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>领域的供应商提供了更为广泛的负载平衡策略。能消除系统中的瓶颈，允许多台服务器集成部署。这种部署可达数千个处理器，实现可高度伸缩的系统，满足未来商业应用的需要。<br />
<br />
稳定的可用性:一个服务器端平台必须能全天候运转以满足公司客户、合作伙伴的需要。因为INTERNET是全球化的、无处不在的，即使在夜间按计划停机也可能造成严重损失。若是意外停机，那会有灾难性后果。<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>部署到可靠的操作环境中，他们支持长期的可用性。一些<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>部署在WINDOWS环境中，客户也可选择健壮性能更好的操作系统如SunSolaris、IBMOS/390。最健壮的操作系统可达到99.999%的可用性或每年只需5分钟停机时间。这是实时性很强商业系统理想的选择。<br />
<br />
<strong>三.<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的四层模型</strong></p>
<p><a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>使用多层的分布式应用模型，应用逻辑按功能划分为组件，各个应用组件根据他们所在的层分布在不同的机器上。事实上，sun设计<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的初衷正是为了解决两层模式(client/server)的弊端，在传统模式中，客户端担当了过多的角色而显得臃肿，在这种模式中，第一次部署的时候比较容易，但难于升级或改进，可伸展性也不理想，而且经常基于某种专有的协议??通常是某种数据库协议。它使得重用业务逻辑和界面逻辑非常困难。现在<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>的多层企业级应用模型将两层化模型中的不同层面切分成许多层。一个多层化应用能够为不同的每种服务提供一个独立的层，以下是<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>典型的四层结构:<br />
<br />
运行在客户端机器上的客户层组件<br />
<br />
运行在<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>服务器上的Web层组件<br />
<br />
运行在<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>服务器上的业务逻辑层组件<br />
<br />
运行在EIS服务器上的企业信息系统(Enterpriseinformationsystem)层软件</p>
<p><strong><a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>应用程序组件</strong></p>
<p><a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>应用程序是由组件构成的.<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>组件是具有独立功能的软件单元，它们通过相关的类和文件组装成<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>应用程序，并与其他组件交互。</p>
<p>2EE说明书中定义了以下的<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>组件:应用客户端程序和applets是客户层组件.JavaServlet和JavaServerPages(JSP)是web层组件.EnterpriseJavaBeans(EJB)是业务层组件.<br />
<br />
客户层组件：<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>应用程序可以是基于web方式的,也可以是基于传统方式的.<br />
<br />
web层组件：<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>web层组件可以是JSP页面或Servlets.按照<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>规范，静态的HTML页面和Applets不算是web层组件。web层可能包含某些JavaBean对象来处理用户输入，并把输入发送给运行在业务层上的enterprisebean来进行处理。<br />
<br />
业务层组件：业务层代码的逻辑用来满足银行，零售，金融等特殊商务领域的需要,由运行在业务层上的enterprisebean进行处理.下图表明了一个enterprisebean是如何从客户端程序接收数据，进行处理(如果必要的话),并发送到EIS层储存的，这个过程也可以逆向进行。<br />
<br />
有三种企业级的bean:会话(session)beans,实体(entity)beans,和消息驱动(message-driven)beans.会话bean表示与客户端程序的临时交互.当客户端程序执行完后,会话bean和相关数据就会消失.相反,实体bean表示数据库的表中一行永久的记录.当客户端程序中止或服务器关闭时,就会有潜在的服务保证实体bean的数据得以保存.消息驱动bean结合了会话bean和JMS的消息监听器的特性,允许一个业务层组件异步接收JMS消息.<br />
<br />
企业信息系统层<br />
<br />
企业信息系统层处理企业信息系统软件包括企业基础建设系统例如企业资源计划(ERP),大型机事务处理,数据库系统,和其它的遗留信息系统.例如，<a href="http://www.javadby.com/yuyanjichu/index.html"><u>J2EE</u></a>应用组件可能为了数据库连接需要访问企业信息系统</p>
<img src ="http://www.blogjava.net/blameswood/aggbug/150437.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blameswood/" target="_blank">火焰出林</a> 2007-10-04 21:57 <a href="http://www.blogjava.net/blameswood/articles/150437.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何才算真正的掌握Java语言（J2SE篇）</title><link>http://www.blogjava.net/blameswood/articles/150409.html</link><dc:creator>火焰出林</dc:creator><author>火焰出林</author><pubDate>Thu, 04 Oct 2007 12:42:00 GMT</pubDate><guid>http://www.blogjava.net/blameswood/articles/150409.html</guid><wfw:comment>http://www.blogjava.net/blameswood/comments/150409.html</wfw:comment><comments>http://www.blogjava.net/blameswood/articles/150409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blameswood/comments/commentRss/150409.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blameswood/services/trackbacks/150409.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">时常看到一些人说掌握了</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Java</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">，但是让他们用</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Java</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">做一个实际的项目可能又困难重重，在这里，笔者根据自己的一点理解斗胆提出自己的一些对掌握</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Java</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">这个说法的标准，当然对于新手，也可以提供一个需要学习哪些内容的参考。另外这个标准仅限于</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">J2SE</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">部分，</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">J2EE</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">部分的内容有时间再另说。</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br />
<br />
1</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、语法：必须比较熟悉，在写代码的时候</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">IDE</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">的编辑器对某一行报错应该能够根据报错信息知道是什么样的语法错误并且知道任何修正。</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br />
<br />
2</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、命令：必须熟悉</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">JDK</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">带的一些常用命令及其常用选项，命令至少需要熟悉：</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">appletviewer</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">HtmlConverter</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">jar</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">java</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">javac</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">javadoc</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">javap</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">javaw</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">native2ascii</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">serialver</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">，如果这些命令你没有全部使用过，那么你对</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">java</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">实际上还很不了解。</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br />
<br />
3</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、工具：必须至少熟练使用一种</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">IDE</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">的开发工具，例如</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Eclipse</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Netbeans</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">JBuilder</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Jdeveloper</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">IDEA</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">JCreator</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">或者</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Workshop</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">，包括进行工程管理、常用选项的设置、插件的安装配置以及进行调试。</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br />
<br />
4</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">API</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">：</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Java</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">的核心</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">API</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">是非常庞大的，但是有一些内容笔者认为是必须熟悉的，否则不可能熟练的运用</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Java</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">，包括：</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br />
<br />
1</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">）、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">java.lang</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">包下的</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">80</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">％以上的类的功能的灵活运用。</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br />
<br />
2</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">）、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">java.util</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">包下的</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">80</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">％以上的类的灵活运用，特别是集合类体系、规则表达式、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">zip</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、以及时间、随机数、属性、资源和</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Timer</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br />
<br />
3</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">）、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">java.io</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">包下的</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">60</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">％以上的类的使用，理解</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">IO</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">体系的基于管道模型的设计思路以及常用</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">IO</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">类的特性和使用场合。</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br />
<br />
4</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">）、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">java.math</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">包下的</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">100</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">％的内容。</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br />
<br />
5</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">）、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">java.net</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">包下的</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">60</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">％以上的内容，对各个类的功能比较熟悉。</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br />
<br />
6</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">）、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">java.text</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">包下的</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">60</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">％以上的内容，特别是各种格式化类。</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br />
<br />
7</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">）、熟练运用</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">JDBC</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br />
<br />
8</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">）、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">java.security</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">包下</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">40</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">％以上的内容，如果对于安全没有接触的话根本就不可能掌握</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">java</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br />
<br />
9</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">）、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">AWT</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">的基本内容，包括各种组件事件、监听器、布局管理器、常用组件、打印。</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br />
<br />
10</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">）、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Swing</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">的基本内容，和</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">AWT</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">的要求类似。</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br />
<br />
11</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">）、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">XML</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">处理，熟悉</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">SAX</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">DOM</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">以及</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">JDOM</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">的优缺点并且能够使用其中的一种完成</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">XML</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">的解析及内容处理。</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br />
<br />
5</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、测试：必须熟悉使用</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">junit</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">编写测试用例完成代码的自动测试。</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br />
<br />
6</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、管理：必须熟悉使用</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">ant</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">完成工程管理的常用任务，例如工程编译、生成</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">javadoc</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、生成</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">jar</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、版本控制、自动测试。</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br />
<br />
7</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、排错：应该可以根据异常信息比较快速的定位问题的原因和大致位置。</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br />
<br />
8</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、思想：必须掌握</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">OOP</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">的主要要求，这样使用</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Java</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">开发的系统才能是真正的</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Java</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">系统。</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <br />
<br />
9</span><span style="font-size: 10pt; line-height: 130%; font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">、规范：编写的代码必须符合流行的编码规范，例如类名首字母大写，成员和方法名首字母小写，方法名的第一个单词一般是动词，包名全部小写等，这样程序的可读性才比较好</span><span lang="EN-US" style="font-size: 10pt; line-height: 130%; font-family: Verdana; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><o:p></o:p></span>
<img src ="http://www.blogjava.net/blameswood/aggbug/150409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blameswood/" target="_blank">火焰出林</a> 2007-10-04 20:42 <a href="http://www.blogjava.net/blameswood/articles/150409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>