﻿<?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-狐狸&amp;花生</title><link>http://www.blogjava.net/czcode/</link><description /><language>zh-cn</language><lastBuildDate>Fri, 05 Sep 2008 15:29:17 GMT</lastBuildDate><pubDate>Fri, 05 Sep 2008 15:29:17 GMT</pubDate><ttl>60</ttl><item><title>Struts 2多文件上传</title><link>http://www.blogjava.net/czcode/archive/2008/05/15/200582.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Thu, 15 May 2008 02:42:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2008/05/15/200582.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/200582.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2008/05/15/200582.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/200582.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/200582.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/czcode/archive/2008/05/15/200582.html'>阅读全文</a><img src ="http://www.blogjava.net/czcode/aggbug/200582.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2008-05-15 10:42 <a href="http://www.blogjava.net/czcode/archive/2008/05/15/200582.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2拦截器概述</title><link>http://www.blogjava.net/czcode/archive/2008/05/15/200581.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Thu, 15 May 2008 02:39:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2008/05/15/200581.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/200581.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2008/05/15/200581.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/200581.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/200581.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/czcode/archive/2008/05/15/200581.html'>阅读全文</a><img src ="http://www.blogjava.net/czcode/aggbug/200581.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2008-05-15 10:39 <a href="http://www.blogjava.net/czcode/archive/2008/05/15/200581.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 在Action类中获得HttpServletResponse对象的四种方法</title><link>http://www.blogjava.net/czcode/archive/2008/05/15/200580.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Thu, 15 May 2008 02:37:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2008/05/15/200580.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/200580.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2008/05/15/200580.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/200580.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/200580.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/czcode/archive/2008/05/15/200580.html'>阅读全文</a><img src ="http://www.blogjava.net/czcode/aggbug/200580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2008-05-15 10:37 <a href="http://www.blogjava.net/czcode/archive/2008/05/15/200580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSCache</title><link>http://www.blogjava.net/czcode/archive/2008/05/14/200339.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Wed, 14 May 2008 01:24:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2008/05/14/200339.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/200339.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2008/05/14/200339.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/200339.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/200339.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/czcode/archive/2008/05/14/200339.html'>阅读全文</a><img src ="http://www.blogjava.net/czcode/aggbug/200339.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2008-05-14 09:24 <a href="http://www.blogjava.net/czcode/archive/2008/05/14/200339.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我看 jLynx</title><link>http://www.blogjava.net/czcode/archive/2007/08/31/141574.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Thu, 30 Aug 2007 18:09:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2007/08/31/141574.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/141574.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2007/08/31/141574.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/141574.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/141574.html</trackback:ping><description><![CDATA[<span class=style7><font face=宋体 size=2>jLynx是一个简单、轻量级、高性能的持久层框架。它非常适合于中小应用程序开发，其jar文件大小只有32K并且不依赖任何第三方组件。jLynx的API远比Hibernate、EJB 或JPA来得简单。POJO与java.util.Map持久化都是使用现有JDBC标准。经测试支持的数据库包括：Microsoft SQL Server 2000+、Oracle 9i、10g、IBM DB2/UDB、MySQL和HSQL。 支持通过XML定义SQL查询。提供完整的示例包括POJO与JSP代码生成。 </font><br>
<div align=center alignment=""><img alt="" src="http://open-open.com/image/JLYNX.gif" border=0 alignment=""></div>
<br>于是我google了一下，没有源代码，有点可惜。只有一个zip包。里面有个war包。<br>唉&#8230;&#8230;既然是开源，为啥没有源代码呢？有点耿耿于怀。<br>还是来一个QS吧<br>1.web.xml<br><span class=tag>
<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: #008080">1</span>&nbsp;<span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">jLynxFormHandler</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">example.FormHandlerServlet</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-class</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">load-on-startup</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">1</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">load-on-startup</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">5</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">6</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-mapping</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">jLynxFormHandler</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-name</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">url-pattern</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">/jLynxServlet/*</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">url-pattern</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">9</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-mapping</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>2.实现getDatabaseConnection()方法<br><span class=pun>
<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: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;FormHandlerServlet&nbsp;</span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000">&nbsp;net.sf.jlynx.web.FormHandlerServlet&nbsp;{<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Connection&nbsp;getDatabaseConnection()&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;SQLException&nbsp;{<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Context&nbsp;c;<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;{<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;InitialContext();<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSource&nbsp;ds&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(DataSource)&nbsp;c.lookup(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">java:jdbc/MyDatabase</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;ds.getConnection();<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(NamingException&nbsp;e)&nbsp;{<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;SQLException(e.getMessage());<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000"></span></div>
<br>官方提供了一个完整的servlet的例子<br></span>
<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: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.sql.Connection;<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.sql.DriverManager;<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.sql.SQLException;<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;net.sf.jlynx.RelationalFactory;<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">@SuppressWarnings(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">unchecked</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;FormHandlerServlet&nbsp;</span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000">&nbsp;net.sf.jlynx.web.FormHandlerServlet&nbsp;{<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&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;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;serialVersionUID&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">7379859928139821607L</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">&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">boolean</span><span style="COLOR: #000000">&nbsp;tableCreated&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Connection&nbsp;getDatabaseConnection()&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;SQLException&nbsp;{<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;{<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class.forName(params.get(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">driver</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(Exception&nbsp;e)&nbsp;{<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;c&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;DriverManager.getConnection(params.get(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">url</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">),&nbsp;params<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.get(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">user</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">),&nbsp;params.get(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">password</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">tableCreated)&nbsp;{<br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;{<br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RelationalFactory.getInstance().setConnection(c).exec(<br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">PersonDDL</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tableCreated&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(Exception&nbsp;e)&nbsp;{<br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br></span><span style="COLOR: #008080">31</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">finally</span><span style="COLOR: #000000">&nbsp;{<br></span><span style="COLOR: #008080">32</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;DriverManager.getConnection(params.get(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">url</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">),&nbsp;params<br></span><span style="COLOR: #008080">33</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.get(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">user</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">),&nbsp;params.get(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">password</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br></span><span style="COLOR: #008080">34</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">35</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">36</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">37</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">38</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;c;<br></span><span style="COLOR: #008080">39</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">40</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">41</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;@SuppressWarnings(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">unused</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">42</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;String&nbsp;list()&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;SQLException&nbsp;{<br></span><span style="COLOR: #008080">43</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">44</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;RelationalFactory.getInstance().setConnection(conn)<br></span><span style="COLOR: #008080">45</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.select(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">SelectAllPersons</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">PERSON</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">46</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">47</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;?xml&nbsp;version='1.0'&nbsp;encoding='UTF-8'?&gt;\n&lt;PERSONS&gt;\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;result<br></span><span style="COLOR: #008080">48</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;/PERSONS&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">49</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">50</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.debug(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n\nXML..\n\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;result&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">51</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;result;<br></span><span style="COLOR: #008080">52</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">53</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">54</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;@Override<br></span><span style="COLOR: #008080">55</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;String&nbsp;save()&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;SQLException&nbsp;{<br></span><span style="COLOR: #008080">56</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">No.&nbsp;of&nbsp;objects&nbsp;saved:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">.save();<br></span><span style="COLOR: #008080">57</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">58</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">59</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">60</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">61</span>&nbsp;<span style="COLOR: #000000"></span></div>
3.页面的实现<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: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">form&nbsp;</span><span style="COLOR: #ff0000">action</span><span style="COLOR: #0000ff">="#"</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">="person"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="person.id"</span><span style="COLOR: #ff0000">&nbsp;type</span><span style="COLOR: #0000ff">="hidden"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name:&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="person.name"</span><span style="COLOR: #ff0000">&nbsp;type</span><span style="COLOR: #0000ff">="text"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">br</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;City:&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="person.city"</span><span style="COLOR: #ff0000">&nbsp;type</span><span style="COLOR: #0000ff">="text"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">br</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Country:&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="person.country"</span><span style="COLOR: #ff0000">&nbsp;type</span><span style="COLOR: #0000ff">="text"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">br</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">a&nbsp;</span><span style="COLOR: #ff0000">href</span><span style="COLOR: #0000ff">="javascript:savePerson()"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Save</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">a</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">a&nbsp;</span><span style="COLOR: #ff0000">href</span><span style="COLOR: #0000ff">="javascript:deletePerson()"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Delete</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">a</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">form</span><span style="COLOR: #0000ff">&gt;&lt;</span><span style="COLOR: #800000">script&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="text/javascript"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;savePerson()&nbsp;{&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">person</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">).action&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">jLynxServlet/action/save</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">person</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">).request()&nbsp;<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;deletePerson()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">person</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">).action&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">jLynxServlet/action/delete</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">person</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">).request()&nbsp;<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">script</span><span style="COLOR: #0000ff">&gt;</span></div>
<p><br>唉，其实一直都没觉得吧action的路径放到js里是个好的解决方法&#8230;&#8230;</p>
<p>总的说来，感觉没有官方说的那么牛&#8230;&#8230;<br></p>
</span></span>
<img src ="http://www.blogjava.net/czcode/aggbug/141574.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2007-08-31 02:09 <a href="http://www.blogjava.net/czcode/archive/2007/08/31/141574.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Collection接口的总结 </title><link>http://www.blogjava.net/czcode/archive/2007/04/18/111549.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Wed, 18 Apr 2007 03:18:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2007/04/18/111549.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/111549.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2007/04/18/111549.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/111549.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/111549.html</trackback:ping><description><![CDATA[<table width="100%">
    <tbody>
        <tr>
            <td><strong>Map接口：</strong><br>&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; + -- <strong>WeakHashMap:</strong> 以弱键 实现的基于哈希表的 Map。在 WeakHashMap 中，当某个键不再正常使用时，将自动移除其条<br>&nbsp; &nbsp; | &nbsp; &nbsp;&nbsp; 目。更精确地说，对于一个给定的键，其映射的存在并不阻止垃圾回收器对该键的丢弃，这就使该键成为可终止的，被终<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 止，然后被回收。丢弃某个键时，其条目从映射中有效地移除，因此，该类的行为与其他的 Map 实现有所不同。<font color=#ff0000>此实现</font><br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#ff0000>不是同步的。</font><br>&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; + -- <strong>TreeMap:</strong>该映射根据其键的自然顺序进行排序，或者根据创建映射时提供的 Comparator 进行排序，具体取决于使用的<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 构造方法。<font color=#ff0000>此实现不是同步的。</font><br>&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; + -- <strong>HashMap:</strong>基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作，并允许使用 null 值和 null 键。（除了&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 非同步和允许使用 null 之外，HashMap 类与 Hashtable 大致相同。）此类不保证映射的顺序，特别是它不保证该顺&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 序恒久不变。<font color=#ff0000>此实现不是同步的。<br>&nbsp;&nbsp;&nbsp;<font color=#000000> |</font><br></font>&nbsp;&nbsp;&nbsp; +-- <strong>SortedMap: </strong>进一步提供关于键的总体排序 的 Map。该映射是根据其键的自然顺序进行排序的，或者根据通常在创建有<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 序映射时提供的 Comparator 进行排序。对有序映射的 collection 视图（由 entrySet、keySet 和 values 方法返回<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; ）进行迭代时，此顺序就会反映出来。要采用此排序方式，还需要提供一些其他操作（此接口是 SortedSet 的对应映<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 射）。<br><br><strong>Collection接口：</strong><br>&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; + -- Set接口:一个不包含重复元素的 collection。更正式地说，set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2，并<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 且最多包含一个 null 元素。正如其名称所暗示的，此接口模仿了数学上的 set 抽象。<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + -- <strong>HashSet:</strong>此类实现 Set 接口，由哈希表（实际上是一个 HashMap 实例）支持。它不保证 set 的迭代顺序；<br>&nbsp; &nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 特别是它不保证该顺序恒久不变。此类允许使用 null 元素。此类为基本操作提供了稳定性能，<font color=#ff0000>此实现不是同</font><br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; <font color=#ff0000>步的。</font><br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + -- <strong>LinkedHashSet:</strong>具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。此实现与 HashSet 的不同之外在<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 于，后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序，即按照将元素插入到 set<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 中 的顺序（插入顺序）进行迭代。注意，插入顺序不 受在 set 中重新插入的 元素的影响。<font color=#ff0000>此实现不是同步</font><br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;<font color=#ff0000> 的。 </font><br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + -- <strong>TreeSet:</strong>基于 TreeMap 的 NavigableSet 实现。使用元素的自然顺序对元素进行排序，或者根据创建 set 时<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提供的 Comparator 进行排序，具体取决于使用的构造方法。此实现为基本操作（add、remove 和 contains）<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提供受保证的 log(n) 时间开销。<font color=#ff0000>此实现不是同步的。</font><br>&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; + -- List接口:有序的 collection（也称为序列）。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以根据元素的整数索引（在列表中的位置）访问元素，并搜索列表中的元素。<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + -- <strong>ArrayList:List </strong>接口的大小可变数组的实现。实现了所有可选列表操作，并允许包括 null 在内的所有元素。<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 除了实现 List 接口外，此类还提供一些方法来操作内部用来存储列表的数组的大小。（此类大致上等同于 <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; Vector 类，除了此类是不同步的。）每个 ArrayList 实例都有一个容量。该容量是指用来存储列表元素的数<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素，其容量也自动增长。并未指定增<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 长策略的细节，因为这不只是添加元素会带来分摊固定时间开销那样简单。<font color=#ff0000>此实现不是同步的。</font><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + -- <strong>LinkedList:List </strong>接口的链接列表实现。实现所有可选的列表操作，并且允许所有元素（包括 null）。除了实<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 现 List 接口外，LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 法。这些操作允许将链接列表用作堆栈、队列或双端队列。<font color=#ff0000>提供先进先出队列操作(FIFO)。此实现不是同步的。</font><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + -- <strong>Vector:</strong>Vector 类可以实现可增长的对象数组。与数组一样，它包含可以使用整数索引进行访问的组件。但是<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ，Vector 的大小可以根据需要增大或缩小，以适应创建 Vector 后进行添加或移除项的操作。<font color=#ff0000>此实现是同步的<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 。</font></td>
        </tr>
    </tbody>
</table>
<span class=graytag></span>
<img src ="http://www.blogjava.net/czcode/aggbug/111549.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2007-04-18 11:18 <a href="http://www.blogjava.net/czcode/archive/2007/04/18/111549.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>svn版本控制，很爽的！！ </title><link>http://www.blogjava.net/czcode/archive/2007/03/13/103573.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Tue, 13 Mar 2007 08:22:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2007/03/13/103573.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/103573.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2007/03/13/103573.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/103573.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/103573.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/czcode/archive/2007/03/13/103573.html'>阅读全文</a><img src ="http://www.blogjava.net/czcode/aggbug/103573.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2007-03-13 16:22 <a href="http://www.blogjava.net/czcode/archive/2007/03/13/103573.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat5.5日志</title><link>http://www.blogjava.net/czcode/archive/2007/01/09/92690.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Tue, 09 Jan 2007 10:42:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2007/01/09/92690.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/92690.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2007/01/09/92690.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/92690.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/92690.html</trackback:ping><description><![CDATA[
		<div>自从用上了tomcat5.5，发现日志信息没了，出错了也找不着有用的信息，上apache找答案，果然</div>
		<div>
				<p>Tomcat 5.5 uses <a href="http://jakarta.apache.org/commons/logging"><u><font color="#0000ff">Commons Logging</font></u></a> throughout its internal code allowing the developer to choose a logging configuration that suits their needs, e.g java.util.logging or <a href="http://logging.apache.org/log4j"><u><font color="#0000ff">Log4J</font></u></a>. Commons Logging provides Tomcat the ability to log hierarchially across various log levels without needing to rely on a particular logging implementation. </p>
				<p>An important consequence for Tomcat 5.5 is that the &lt;Logger&gt; element found in previous versions to create a <code>localhost_log</code> is no longer a valid nested element of &lt;Context&gt;. Instead, the default Tomcat configuration will use java.util.logging. If the developer wishes to collect detailed internal Tomcat logging (i.e what is happening within the Tomcat engine), then they should configure a logging system such as java.util.logging or log4j as detailed next</p>
				<p>习惯用log4j来配置log信息的输出。</p>
				<p>新建log4j.properties，内容为</p>
				<p>log4j.rootLogger=info,Console,R</p>
				<p>log4j.appender.Console=org.apache.log4j.ConsoleAppender<br />log4j.appender.Console.layout=org.apache.log4j.PatternLayout<br />#log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p %c - %m%n<br />log4j.appender.Console.layout.ConversionPattern=%d{yy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n</p>
				<p>log4j.appender.R=org.apache.log4j.DailyRollingFileAppender<br />log4j.appender.R.File=${catalina.home}/logs/tomcat.log <br />log4j.appender.R.layout=org.apache.log4j.PatternLayout<br />log4j.appender.R.layout.ConversionPattern=%d{yyyy.MM.dd HH:mm:ss} %5p %c{1}(%L):  %m%n</p>
				<p>log4j.logger.org.apache=info, R<br />log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=DEBUG, R <br />log4j.logger.org.apache.catalina.core=info, R<br />log4j.logger.org.apache.catalina.session=info, R</p>
				<p>最后四行是tomcat的信息，如果改为debug日志文件将十分庞大。</p>
				<p>将这个文件放入${catalina.home}/common/classes下，再将log4j.jar和commons-logging.jar放入${catalina.home}/common/lib下，就可以在${catalina.home}/logs/下见到日志了。</p>
		</div>
<img src ="http://www.blogjava.net/czcode/aggbug/92690.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2007-01-09 18:42 <a href="http://www.blogjava.net/czcode/archive/2007/01/09/92690.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>怎样动态添加文本框并处理</title><link>http://www.blogjava.net/czcode/archive/2007/01/04/91752.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Thu, 04 Jan 2007 06:44:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2007/01/04/91752.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/91752.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2007/01/04/91752.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/91752.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/91752.html</trackback:ping><description><![CDATA[
		<p>我在做项目时曾碰到这个问题，怎样动态地添加一个文本框或文件域，这在网上很容易找到。但对怎样处理提交的动态数据就很少有这方面的信息了。本人翻阅了一些资料，把自己的方法写了下来，以飨读者。</p>
		<p>1.提交表单</p>
		<p> </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" />
				<span style="COLOR: #000000">&lt;html&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&lt;body&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> &lt;form name</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">form</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> method</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">post</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> action</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">add.jsp</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   &lt;input name</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">button</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> type</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">button onClick</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">'additem(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">tb</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">)' value</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">添加&gt;&gt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> &lt;table id</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">tb</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> &lt;/table&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&lt;script language</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">javascript</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />function additem(id)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  var row</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">cell</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">str</span>
				<span style="COLOR: #008000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">  row </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> eval(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">document.all[</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+id+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">]</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">).insertRow()</span>
				<span style="COLOR: #008000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">  if(row !</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> null )<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     {<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        cell </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> row.insertCell()</span>
				<span style="COLOR: #008000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">        str</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;input type=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">text</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> name=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">StuName</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;&lt;input type=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">button</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> value=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">删除</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> onclick='deleteitem(this,</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">tb</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);'&gt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   cell.innerHTML</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">str</span>
				<span style="COLOR: #008000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      }<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />}<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />function deleteitem(obj</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">id)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  var rowNum</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">curRow</span>
				<span style="COLOR: #008000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">  curRow </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> obj.parentNode.parentNode</span>
				<span style="COLOR: #008000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">  rowNum </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> eval(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">document.all.</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+id).rows.length - </span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #008000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">  eval(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">document.all[</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+id+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">]</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">).deleteRow(curRow.rowIndex)</span>
				<span style="COLOR: #008000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">}<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&lt;/script&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   &lt;p&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     &lt;input type</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">submit</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> name</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">submit</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> value</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">提交</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   &lt;/p&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> &lt;/form&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&lt;/body&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&lt;/html&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
		<p> </p>
		<p>2.处理数据</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" />
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">body</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">table </span>
				<span style="COLOR: #ff0000">border</span>
				<span style="COLOR: #0000ff">="1"</span>
				<span style="COLOR: #0000ff">&gt;&lt;</span>
				<span style="COLOR: #800000">tr</span>
				<span style="COLOR: #0000ff">&gt;&lt;</span>
				<span style="COLOR: #800000">td </span>
				<span style="COLOR: #ff0000">colspan</span>
				<span style="COLOR: #0000ff">="2"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">eg</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">td</span>
				<span style="COLOR: #0000ff">&gt;&lt;/</span>
				<span style="COLOR: #800000">tr</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img id="Codehighlighter1_60_261_Open_Image" onclick="this.style.display='none'; Codehighlighter1_60_261_Open_Text.style.display='none'; Codehighlighter1_60_261_Closed_Image.style.display='inline'; Codehighlighter1_60_261_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_60_261_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_60_261_Closed_Text.style.display='none'; Codehighlighter1_60_261_Open_Image.style.display='inline'; Codehighlighter1_60_261_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</span>
				<span id="Codehighlighter1_60_261_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_60_261_Open_Text">
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />Enumeration params</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">request.getParameterNames();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">while</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(params.hasMoreElements()){<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">String</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> name</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(</span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">String</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)params.nextElement();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">String</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">[] values</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">request.getParameterValues(name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">if</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(name.equals(</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">StuName</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)){<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">tr</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">td</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">name</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">td</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">td</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img id="Codehighlighter1_296_342_Open_Image" onclick="this.style.display='none'; Codehighlighter1_296_342_Open_Text.style.display='none'; Codehighlighter1_296_342_Closed_Image.style.display='inline'; Codehighlighter1_296_342_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_296_342_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_296_342_Closed_Text.style.display='none'; Codehighlighter1_296_342_Open_Image.style.display='inline'; Codehighlighter1_296_342_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</span>
				<span id="Codehighlighter1_296_342_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_296_342_Open_Text">
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">for</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(</span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">int</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> index</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">0</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;index</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">values.length;index</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">++</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">){<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">values[index]</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img id="Codehighlighter1_367_368_Open_Image" onclick="this.style.display='none'; Codehighlighter1_367_368_Open_Text.style.display='none'; Codehighlighter1_367_368_Closed_Image.style.display='inline'; Codehighlighter1_367_368_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_367_368_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_367_368_Closed_Text.style.display='none'; Codehighlighter1_367_368_Open_Image.style.display='inline'; Codehighlighter1_367_368_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</span>
				<span id="Codehighlighter1_367_368_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_367_368_Open_Text">
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">}}</span>
				</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">td</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">tr</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">table</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">body</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<br />
<img src ="http://www.blogjava.net/czcode/aggbug/91752.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2007-01-04 14:44 <a href="http://www.blogjava.net/czcode/archive/2007/01/04/91752.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Servlet和Filter的url匹配以及url-pattern详解</title><link>http://www.blogjava.net/czcode/archive/2006/12/18/88456.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Mon, 18 Dec 2006 02:45:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2006/12/18/88456.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/88456.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2006/12/18/88456.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/88456.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/88456.html</trackback:ping><description><![CDATA[ Servlet<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">和</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">filter</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">是</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">J2EE</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">开发中常用的技术，使用方便，配置简单，老少皆宜。估计大多数朋友都是直接配置用，也没有关心过具体的细节，今天遇到一个问题，上网查了</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">servlet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">的规范才发现，</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">servlet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">和</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">filter</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">中的</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">url-pattern</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">还是有一些文章在里面的，总结了一些东西，放出来供大家参考，以免遇到问题又要浪费时间。</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??=""><?XML:NAMESPACE PREFIX = O /?><o:p></o:p></span><h2 style="LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??=""><span style="mso-tab-count: 1" twffan="done">   <font size="3"> 一，</font></span><font size="3">servlet</font></span><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Cambria" twffan="done">容器对</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">url</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Cambria" twffan="done">的匹配过程：</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??=""><o:p></o:p></span></font></h2><p class="MsoNormal" style="LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??=""><span style="mso-tab-count: 1" twffan="done">      </span><o:p></o:p></span></p><table class="MsoNormalTable" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #f2f2f2; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-shading: windowtext; mso-pattern: gray-5 auto; mso-border-alt: solid #9BBB59 1.0pt; mso-yfti-tbllook: 1184; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: 1.0pt solid #9BBB59; mso-border-insidev: 1.0pt solid #9BBB59" cellspacing="0" cellpadding="0" border="1"><tbody><tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: #9bbb59 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #9bbb59 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #9bbb59 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #9bbb59 1pt solid" valign="top" width="568"><p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">当一个请求发送到</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">容器的时候，容器先会将请求的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">url</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">减去当前应用上下文的</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-weight: bold" twffan="done">路径</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">作为</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">的映射</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">url</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，比如我访问的是</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?=""><a href="http://localhost/test/aaa.html">http://localhost/test/aaa.html</a></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，我的应用上下文是</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="" mso-hansi-font-family:="" calibri;="">test</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，容器会将</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?=""><a href="http://localhost/test">http://localhost/test</a></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">去掉，剩下的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">/aaa.html</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">部分拿来做</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">的映射匹配。这个映射匹配过程是有顺序的，而且当有一个</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">匹配成功以后，就不会去理会剩下的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">了（</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">filter</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">不同，后文会提到）。其匹配规则和顺序如下：</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?=""><o:p></o:p></span></p><p class="MsoListParagraph" style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l1 level1 lfo1"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold;="" mso-fareast-font-family:="" verdana;="" mso-bidi-font-family:="" verdana?=""><span style="mso-list: Ignore" twffan="done">1.<span style="FONT: 7pt \" twffan="done" times="" new="" roman\??="">     </span></span></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">精确路径匹配。例子：比如</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servletA </span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">url-pattern</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">为</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?=""> /test</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servletB</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">url-pattern</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">为</span><span style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?=""><span lang="EN-US" twffan="done">/* </span></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，这个时候，如果我访问的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">url</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">为</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?=""><a href="http://localhost/test">http://localhost/test</a></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，这个时候容器就会先</span><span style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?=""></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">进行精确路径匹配，发现</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">/test</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">正好被</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servletA</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">精确匹配，那么就去调用</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servletA</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，也不会去理会其他的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">了。</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?=""><o:p></o:p></span></p><p class="MsoListParagraph" style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l1 level1 lfo1"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold;="" mso-fareast-font-family:="" verdana;="" mso-bidi-font-family:="" verdana?=""><span style="mso-list: Ignore" twffan="done">2.<span style="FONT: 7pt \" twffan="done" times="" new="" roman\??="">     </span></span></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">最长路径匹配。例子：</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servletA</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">url-pattern</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">为</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">/test/*</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，而</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servletB</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">url-pattern</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">为</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">/test/a/*</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，此时访问</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?=""><a href="http://localhost/test/a">http://localhost/test/a</a></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">时，容器会选择路径最长的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">来匹配，也就是这里的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servletB</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">。</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?=""><o:p></o:p></span></p><p class="MsoListParagraph" style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l1 level1 lfo1"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold;="" mso-fareast-font-family:="" verdana;="" mso-bidi-font-family:="" verdana?=""><span style="mso-list: Ignore" twffan="done">3.<span style="FONT: 7pt \" twffan="done" times="" new="" roman\??="">     </span></span></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">扩展匹配，如果</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">url</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">最后一段包含扩展，容器将会根据扩展选择合适的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">。例子：</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servletA</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">url-pattern</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">：</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">*.action<o:p></o:p></span></p><p class="MsoListParagraph" style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l1 level1 lfo1"><strong><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-fareast-font-family:="" verdana;="" mso-bidi-font-family:="" verdana?=""><span style="mso-list: Ignore" twffan="done">4.<span style="FONT: 7pt \" twffan="done" times="" new="" roman\??="">     </span></span></span></strong><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">如果前面三条规则都没有找到一个</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，容器会根据</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">url</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">选择对应的请求资源。如果应用定义了一个</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">default servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，则容器会将请求丢给</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">default servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-weight: bold" twffan="done">（什么是</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">default servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-weight: bold" twffan="done">？后面会讲）</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">。</span><strong><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??=""><o:p></o:p></span></strong></p></td></tr></tbody></table><p class="MsoNormal" style="LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??=""><span style="mso-spacerun: yes" twffan="done"> </span><span style="mso-tab-count: 1" twffan="done">    </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">根据这个规则表，就能很清楚的知道</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">servlet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">的匹配过程，所以定义</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">servlet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">的时候也要考虑</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">url-pattern</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">的写法，以免出错。</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??=""><o:p></o:p></span></p><p class="MsoNormal" style="LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??=""><span style="mso-tab-count: 1" twffan="done">      </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">对于</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">filter</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">，不会像</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">servlet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">那样只匹配一个</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">servlet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">，因为</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">filter</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">的集合是一个链，所以只会有处理的顺序不同，而不会出现只选择一个</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">filter</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">。</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">Filter</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">的处理顺序和</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">filter-mapping</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">在</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">web.xml</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">中定义的顺序相同。</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??=""><o:p></o:p></span></p><h2 style="LINE-HEIGHT: 150%"><font size="3"><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">    二，url-pattern</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Cambria" twffan="done">详解</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-hansi-font-family:="" cambria?=""><o:p></o:p></span></font></h2><p class="MsoNormal" style="LINE-HEIGHT: 150%"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">         </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">在</span><span lang="EN-US" twffan="done">web.xml</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">文件中，以下语法用于定义映射：</span></p><p class="MsoListParagraph" style="MARGIN-LEFT: 41.9pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l0 level1 lfo2"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" twffan="done"><span style="mso-list: Ignore" twffan="done">l<span style="FONT: 7pt \" twffan="done" times="" new="" roman\??="">  </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">以</span><span lang="EN-US" twffan="done">”/’</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">开头和以</span><span lang="EN-US" twffan="done">”/*”</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">结尾的是用来做路径映射的。</span></p><p class="MsoListParagraph" style="MARGIN-LEFT: 41.9pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l0 level1 lfo2"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" twffan="done"><span style="mso-list: Ignore" twffan="done">l<span style="FONT: 7pt \" twffan="done" times="" new="" roman\??="">  </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">以前缀</span><span lang="EN-US" twffan="done">”*.”</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">开头的是用来做扩展映射的。</span></p><p class="MsoListParagraph" style="MARGIN-LEFT: 41.9pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l0 level1 lfo2"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" twffan="done"><span style="mso-list: Ignore" twffan="done">l<span style="FONT: 7pt \" twffan="done" times="" new="" roman\??="">  </span></span></span><span lang="EN-US" twffan="done">“/” </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">是用来定义</span><span lang="EN-US" twffan="done">default servlet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">映射的。</span></p><p class="MsoListParagraph" style="MARGIN-LEFT: 41.9pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l0 level1 lfo2"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" twffan="done"><span style="mso-list: Ignore" twffan="done">l<span style="FONT: 7pt \" twffan="done" times="" new="" roman\??="">  </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">剩下的都是用来定义详细映射的。比如：</span><span lang="EN-US" twffan="done"> /aa/bb/cc.action</span></p><p class="MsoNormal" style="TEXT-INDENT: 20.9pt; LINE-HEIGHT: 150%"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">所以，为什么定义</span><span lang="EN-US" twffan="done">”/*.action”</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">这样一个看起来很正常的匹配会错？因为这个匹配即属于路径映射，也属于扩展映射，导致容器无法判断。</span></p><img src ="http://www.blogjava.net/czcode/aggbug/88456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2006-12-18 10:45 <a href="http://www.blogjava.net/czcode/archive/2006/12/18/88456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>