﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-努力创造未来！-随笔分类-j2ee</title><link>http://www.blogjava.net/pdw2009/category/9724.html</link><description>本站不再更新，欢迎光临 
&lt;a href="http://php.11519.net/5jblog"&gt;java开发技术网&lt;/a&gt;</description><language>zh-cn</language><lastBuildDate>Fri, 20 Aug 2010 04:33:49 GMT</lastBuildDate><pubDate>Fri, 20 Aug 2010 04:33:49 GMT</pubDate><ttl>60</ttl><item><title>SessionBean  ejb入门例子</title><link>http://www.blogjava.net/pdw2009/archive/2010/04/15/318414.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Thu, 15 Apr 2010 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2010/04/15/318414.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/318414.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2010/04/15/318414.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/318414.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/318414.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
做这么多年java第一次写ejb的例子，还需要继续努力<br />
<a href="http://www.blogjava.net/Files/pdw2009/ejb2test.zip">下载地址</a> 



<br />
<script type="text/javascript"><!--
branchr_client_id = 'i5x9suaaicn0eb41ts2q2823gn';
branchr_ad_width = 468;
branchr_ad_height = 60;
branchr_ad_format = 11;
//--></script>
<script type="text/javascript" src="http://static.branchr.com/serve.js?1248290004"></script>
<br /><img src ="http://www.blogjava.net/pdw2009/aggbug/318414.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2010-04-15 14:29 <a href="http://www.blogjava.net/pdw2009/archive/2010/04/15/318414.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让tomcat支持ssi </title><link>http://www.blogjava.net/pdw2009/archive/2009/03/06/258270.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Fri, 06 Mar 2009 09:24:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2009/03/06/258270.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/258270.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2009/03/06/258270.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/258270.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/258270.html</trackback:ping><description><![CDATA[<p>1.把文件$CATALINA_HOME/server/lib/servlets-ssi.renametojar重新命名为$CATALINA_HOME/server/lib/servlets-ssi.jar. <br />
<br />
2.在文件$CATALINA_HOME/conf/web.xml中，你需要把两个地方的注释去掉，servlet 声明和servlet mapping。 servlet 声明看起来类似于下面： <br />
<br />
&lt;servlet&gt; <br />
&lt;servlet-name&gt;ssi&lt;/servlet-name&gt; <br />
... <br />
&lt;/servlet&gt; <br />
<br />
<br />
而servlet mapping看起来类似于下面： <br />
<br />
&lt;servlet-mapping&gt; <br />
&lt;servlet-name&gt;ssi&lt;/servlet-name&gt; <br />
&lt;url-pattern&gt;*.shtml&lt;/url-pattern&gt; <br />
&lt;/servlet-mapping&gt; <br />
<br />
<br />
这些servlet 声明和mapping可以交替地加入到你的Web 应用程序部署描述符中。<br />
<br />
SSI基本指令<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、<span class="hilite2">SSI</span>指令的语法格式如下： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#element [attribute=value] [attribute=value] ... --&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这些指令以HTML注释的形式出现，所以如果你没有正确设置<span class="hilite2">SSI</span>，浏览器会忽略这些指令。如果你正确设置了<span class="hilite2">SSI</span>，这些指令会被相应的结果替换。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、config <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#config timefmt="%B %Y" --&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; config用来指定返回给客户端浏览器的错误信息、日期和文件大小的格式。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 常用指令： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#config errmsg="自定义错误信息"--&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#config sizefmt="显示单位"--&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#config timefmt="显示格式"--&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参数： <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; errmsg 自定义<span class="hilite2">SSI</span>执行错误信息，可以为任何你喜欢的方式。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sizefmt 文件大小显示方式，默认为字节方式("bytes")可以改为千字节方式("abbrev") <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timefmt 时间显示方式，最灵活的配置属性。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Eg: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#config errmsg="服务器执行错误，请联系管理员 yiho@126.com，谢谢！"--&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#fsize file="不存在的文件.htm"--&gt; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以千字节方式显示文件大小 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#config sizefmt="abbrev"--&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#fsizefile="news.htm"--&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以特定的时间格式显示时间 <br />
&nbsp;&nbsp;&nbsp; &lt;!--#config timefmt="%Y年/%m月%d日 星期%W 北京时间%H:%M:%s，%Y年已过去了%j天 今天是%Y年的第%U个星期"--&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;!--#echo var="DATE_LOCAL"--&gt; 显示今天是星期几,几月,时区 <br />
&nbsp;&nbsp;&nbsp; &lt;!--#config timefmt="今天%A, %B ,服务器时区是 %z，是"--&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;!--#echo var="DATE_LOCAL"--&gt;&nbsp;&nbsp;&nbsp; <br />
3、echo <br />
&nbsp;&nbsp;&nbsp; echo用来输出变量的值。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#echo var="VARIABLE_NAME" --&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#echo var="变量名称"--&gt; <br />
&nbsp;&nbsp;&nbsp; 本文档名称：程序代码: <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#echo var="DOCUMENT_NAME"--&gt; <br />
&nbsp;&nbsp;&nbsp; 现在时间：程序代码: <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#echo var="DATE_LOCAL"--&gt; <br />
&nbsp;&nbsp;&nbsp; 你的IP地址是程序代码: <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#echo var="REMOTE_ADDR"--&gt; <br />
4、exec <br />
&nbsp;&nbsp; &lt;!--#exec cmd="COMMOND" --&gt; <br />
&nbsp;&nbsp; exec用来执行命令。 将某一外部程序的输出插入到页面中。可插入CGI程序或者是常规应用程序的输入，这取决于使用的参数是cmd还是cgi。 <br />
&nbsp;&nbsp;&nbsp; &lt;!--#exec cmd="文件名称"--&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;!--#exec cgi="文件名称"--&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;!--#exec cmd="文件名称"--&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;!--#exec cgi="文件名称"--&gt; <br />
&nbsp;&nbsp; 参数： <br />
&nbsp;&nbsp;&nbsp; cmd 常规应用程序 <br />
&nbsp;&nbsp;&nbsp; cgi CGI脚本程序 <br />
&nbsp;&nbsp; Eg： <br />
&nbsp;&nbsp;&nbsp; &lt;!--#exec cmd="cat /etc/passwd"--&gt;将会显示密码文件 <br />
&nbsp;&nbsp;&nbsp; &lt;!--#exec cmd="dir /b"--&gt;将会显示当前目录下文件列表 <br />
&nbsp;&nbsp;&nbsp; &lt;!--#exec cgi="/cgi-bin/gb.cgi"--&gt;将会执行CGI程序gb.cgi。 <br />
&nbsp;&nbsp;&nbsp; &lt;!--#exec cgi="/cgi-bin/access_log.cgi"--&gt;将会执行CGI程序access_log.cgi。 <br />
&nbsp;&nbsp; 注意： <br />
&nbsp;&nbsp;&nbsp; 从上面的示例可以看出，这个指令相当方便，但是也存在安全问题。 <br />
&nbsp;&nbsp; 禁止方法： <br />
&nbsp;&nbsp;&nbsp; ．Apache，将access.conf中的"Options Includes ExecCGI"这行代码删除； <br />
&nbsp;&nbsp;&nbsp; ．在IIS中，要禁用 #exec 命令，可修改 SSIExecDisable 元数据库； <br />
5、flastmod <br />
&nbsp;&nbsp; &lt;!--#flastmod file="FILE_NAME" --&gt; <br />
&nbsp;&nbsp; flastmod返回FILE_NAME所代表的文件的最后修改时间。 <br />
&nbsp;&nbsp; Eg: <br />
&nbsp;&nbsp;&nbsp; &lt;!--#flastmod file="news.htm"--&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 将当前目录下news.htm文件的最近更新日期插插入到当前页面 <br />
6、fsize <br />
&nbsp;&nbsp; &lt;!--#fsize file="FILE_NAME" --&gt; <br />
&nbsp;&nbsp; fsize返回FILE_NAME所代表的文件的大小。 <br />
&nbsp;&nbsp; &lt;!--#flastmod file="文件名称"--&gt; <br />
&nbsp;&nbsp; &lt;!--#fsize file="文件名称"--&gt; <br />
&nbsp;&nbsp; 参数： <br />
&nbsp;&nbsp;&nbsp; file 指定包含文件相对于本文档的位置 如 info.txt 表示当前目录下的的info.txt文档 <br />
&nbsp;&nbsp;&nbsp; virtual 指定相对于服务器文档根目录的位置 如 /hoyi/info.txt 表示 <br />
&nbsp;&nbsp; 注意： <br />
&nbsp;&nbsp;&nbsp; 文件名称必须带有扩展名。 <br />
&nbsp;&nbsp; Eg: <br />
&nbsp;&nbsp;&nbsp; &lt;!--#fsize file="news.htm"--&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 将当前目录下news.htm的文件大小入到当前页面 <br />
7、include <br />
&nbsp;&nbsp; &lt;!--#include file="文件名称"--&gt; <br />
&nbsp;&nbsp; &lt;!--#include virtual="文件名称"--&gt; <br />
&nbsp;&nbsp; include插入FILE_NAME所代表的文件的内容。 <br />
&nbsp;&nbsp; file 文件名是一个相对路径，该路径相对于使用 #include 指令的文档所在的目录。被包含文件可以在同一级目录或其子目录中，但不能在上一级目录中。如表示当前目&nbsp;&nbsp; 录下的的nav_head.htm文档，则为file="nav_head.htm"。 <br />
&nbsp;&nbsp; virtual 文件名是 Web 站点上的虚拟目录的完整路径。如表示相对于服务器文档根目录下hoyi目录下的nav_head.htm文件；则为file="/hoyi/nav_head.htm" <br />
&nbsp;&nbsp; 参数： <br />
&nbsp;&nbsp;&nbsp; file 指定包含文件相对于本文档的位置 <br />
&nbsp;&nbsp;&nbsp; virtual 指定相对于服务器文档根目录的位置 <br />
&nbsp;&nbsp; 注意： <br />
&nbsp;&nbsp;&nbsp; 1、文件名称必须带有扩展名。 <br />
&nbsp;&nbsp;&nbsp; 2、被包含的文件可以具有任何文件扩展名，我觉得直接使用htm扩展名最方便 <br />
8、printenv <br />
&nbsp;&nbsp; &lt;!--#printenv --&gt; <br />
&nbsp;&nbsp;&nbsp; printenv返回所有定义的变量的列表。 <br />
9、set <br />
&nbsp;&nbsp; &lt;!--#set var="VARIABLE_NAME" value="VARIABLE_VALUE" --&gt; <br />
&nbsp;&nbsp; set用来自定义变量。在<span class="hilite2">SSI</span>中有许多标准的变量(如DATE_LOCAL)，其中也包括对于CGI程序有效的环境变量。 <br />
10、if elif endif else <br />
&nbsp;&nbsp; if elif endif else用来条件选择。 <br />
&nbsp;&nbsp; #if <br />
&nbsp;&nbsp; 作用： 创建可以改变数据的页面，这些数据根据使用if语句时计算的要求予以显示。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 语法： 程序代码: <br />
&nbsp;&nbsp;&nbsp; &lt;!--#if expr="$变量名="变量值A""--&gt; <br />
&nbsp;&nbsp;&nbsp; 显示内容 <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#elif expr="$变量名="变量值B""--&gt; <br />
&nbsp;&nbsp;&nbsp; 显示内容 <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#else--&gt; <br />
&nbsp;&nbsp;&nbsp; 显示内容 <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#endif"--&gt; <br />
&nbsp;&nbsp;&nbsp; Eg: <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#if expr="$SERVER_NAME="hoyi.zb169.net""--&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 中华E搜网http://www.eshoo.com.cn <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#elif expr="$SERVER_NAME="linux.cqi.com.cn"" --&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 中华E搜网http://www.eshoo.com.cn/bbs <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#else--&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 中华E搜网http://www.eshoo.com.cn <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#endif"--&gt; <br />
注意： 用于前面指令中的反斜杠，是用来代换内部的引号，以便它们不会被解释为结束表达式。不可省略。 <br />
&nbsp; <br />
六、普通用法 <br />
1、下面是一些比较常规的<span class="hilite2">SSI</span>的用法： <br />
&nbsp;&nbsp; 最后修改时间 <br />
&nbsp;&nbsp;&nbsp; 有两种方法： <br />
&nbsp;&nbsp;&nbsp; This file last modified &lt;!--#flastmod file="<span class="hilite2">ssi</span>.shtml" --&gt; <br />
&nbsp;&nbsp;&nbsp; This file last modified &lt;!--#echo var="LAST_MODIFIED" --&gt; <br />
&nbsp;&nbsp; 包含一个footer <br />
&nbsp;&nbsp;&nbsp; &lt;!--#include virtual="/footer.html" --&gt; <br />
&nbsp;&nbsp; 设置errmsg <br />
&nbsp;&nbsp;&nbsp; &lt;!--#config errmsg="[error message!]" --&gt; <br />
&nbsp;&nbsp; 设置sizefmt <br />
&nbsp;&nbsp;&nbsp; &lt;!--#config sizefmt="bytes|abbrev" --&gt; <br />
&nbsp;&nbsp; 执行命令 <br />
&nbsp;&nbsp; &lt;!--#exec cmd="dir" --&gt; <br />
2、高级<span class="hilite2">SSI</span> <br />
&nbsp;&nbsp; XSSI（Extended <span class="hilite2">SSI</span>）是一组高级<span class="hilite2">SSI</span>指令，内置于Apache 1.2或更高版本的mod-include模块之中。 <br />
&nbsp;&nbsp;&nbsp; 其中可利用的的指令有： <br />
&nbsp;&nbsp;&nbsp; &lt;!--#printenv--&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;!--#printenv--&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;!--#printenv--&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;!--#printenv--&gt; <br />
&nbsp;&nbsp; 作用： 显示当前存在于WEB服务器环境中的所有环境变量。 <br />
&nbsp;&nbsp; （1）#set <br />
&nbsp;&nbsp;&nbsp; 作用：可给变量赋值，以用于后面的if语句。 <br />
&nbsp;&nbsp;&nbsp; 语法：程序代码: <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#set var="变量名"value="变量值"--&gt; <br />
&nbsp;&nbsp;&nbsp; 参数：无 <br />
&nbsp;&nbsp;&nbsp; 示例： 程序代码: <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#set var="color"value="红色"--&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp; <span class="hilite2">SSI</span>允许自定义变量，这些变量可以用来进行比较和条件判断。 <br />
&nbsp;&nbsp;&nbsp; 定义变量 <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" --&gt; <br />
&nbsp;&nbsp;&nbsp; 条件表达式 <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#if expr="test_condition" --&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#elif expr="test_condition" --&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#else --&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--#endif --&gt; <br />
</p>


<br />
<script type="text/javascript"><!--
branchr_client_id = 'i5x9suaaicn0eb41ts2q2823gn';
branchr_ad_width = 468;
branchr_ad_height = 60;
branchr_ad_format = 11;
//--></script>
<script type="text/javascript" src="http://static.branchr.com/serve.js?1248290004"></script>
<br /><img src ="http://www.blogjava.net/pdw2009/aggbug/258270.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2009-03-06 17:24 <a href="http://www.blogjava.net/pdw2009/archive/2009/03/06/258270.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GlassFish  入门</title><link>http://www.blogjava.net/pdw2009/archive/2008/08/20/223164.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Wed, 20 Aug 2008 02:06:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2008/08/20/223164.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/223164.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2008/08/20/223164.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/223164.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/223164.html</trackback:ping><description><![CDATA[<br />
GlassFish&nbsp;&nbsp;中文FAQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://wiki.glassfish.java.net/Wiki.jsp?page=GlassFishUserFAQZh">http://wiki.glassfish.java.net/Wiki.jsp?page=GlassFishUserFAQZh</a><br />
用GlassFish2替换tomcat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.javaeye.com/topic/141589">http://www.javaeye.com/topic/141589</a> <br />
在GlassFish2上部署Web项目&nbsp; <a href="http://jeffreyhsu.javaeye.com/blog/86953">http://jeffreyhsu.javaeye.com/blog/86953</a> <br />
GlassFish初试&nbsp; <a href="http://tamino.javaeye.com/blog/140550">http://tamino.javaeye.com/blog/140550</a>&nbsp;<br />
<br />
看完这几篇文件对GlassFish&nbsp;&nbsp;就算有一个基本的了解了<br />
</a><br />
<img src ="http://www.blogjava.net/pdw2009/aggbug/223164.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2008-08-20 10:06 <a href="http://www.blogjava.net/pdw2009/archive/2008/08/20/223164.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Servlet 各种监听接口简介</title><link>http://www.blogjava.net/pdw2009/archive/2008/06/22/209818.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Sun, 22 Jun 2008 02:54:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2008/06/22/209818.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/209818.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2008/06/22/209818.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/209818.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/209818.html</trackback:ping><description><![CDATA[<p><font size="4"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 目前Servlet2.4和JSP2.0总共有8个监听器接口和6个Event类，其中HttpSessionAttributeListener与HttpSessionBindingListener皆使用HttpSessionBindingEvent;HttpSessionListener和HttpSessionActivationListener则都使用HttpSessionEvent;其余Listener对应的Event如下所示：</font></p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 213.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="284">
            <p><font size="4"><span lang="EN-US">Listener</span><span style="font-family: 宋体">接口</span></font></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 213.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="284">
            <p><font size="4"><span lang="EN-US">Event</span><span style="font-family: 宋体">类</span></font></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 213.05pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="284">
            <p><span lang="EN-US"><font size="4">ServletContextListener</font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 213.05pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="284">
            <p><span lang="EN-US"><font size="4">ServletContextEvent</font></span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 213.05pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="284">
            <p><span lang="EN-US"><font size="4">ServletContextAttributeListener</font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 213.05pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="284">
            <p><span lang="EN-US"><font size="4">ServletContextAttributeEvent</font></span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 213.05pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="284">
            <p><span lang="EN-US"><font size="4">HttpSessionListener</font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 213.05pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="284" rowspan="2">
            <p><span lang="EN-US"><font size="4">HttpSessionEvent</font></span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 213.05pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="284">
            <p><span lang="EN-US"><font size="4">HttpSessionActivationListener</font></span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 213.05pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="284">
            <p><span lang="EN-US"><font size="4">HttpSessionAttributeListener</font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 213.05pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="284" rowspan="2">
            <p><span lang="EN-US"><font size="4">HttpSessionBindingEvent</font></span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 213.05pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="284">
            <p><span lang="EN-US"><font size="4">HttpSessionBindingListener</font></span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 213.05pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="284">
            <p><span lang="EN-US"><font size="4">ServletRequestListener</font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 213.05pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="284">
            <p><span lang="EN-US"><font size="4">ServletRequestEvent</font></span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 213.05pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="284">
            <p><span lang="EN-US"><font size="4">ServletRequestAttributeListener</font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 213.05pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="284">
            <p><span lang="EN-US"><font size="4">ServletRequestAttributeEvent</font></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p><font size="4">分别介绍：<br />
一 ServletContext相关监听接口<br />
补充知识：<br />
通过ServletContext 的实例可以存取应用程序的全局对象以及初始化阶段的变量。<br />
在JSP文件中，application 是 ServletContext 的实例，由JSP容器默认创建。Servlet 中调用 getServletContext()方法得到 ServletContext 的实例。<br />
注意：<br />
全局对象即Application范围对象，初始化阶段的变量指在web.xml中，经由&lt;context-param&gt;元素所设定的变量，它的范围也是Application范围，例如：</font></p>
<p><font size="4">&lt;context-param&gt; <br />
&lt;param-name&gt;Name&lt;/param-name&gt; <br />
&lt;param-value&gt;browser&lt;/param-value&gt;<br />
&lt;/context-param&gt;<br />
当容器启动时，会建立一个Application范围的对象，若要在JSP网页中取得此变量时：<br />
String name = (String)application.getInitParameter("Name");<br />
或者使用EL时：<br />
${initPara.name}<br />
若是在Servlet中，取得Name的值方法：<br />
String name = (String)ServletContext.getInitParameter("Name");</font></p>
<p><br />
<font size="4">1.ServletContextListener：<br />
用于监听WEB 应用启动和销毁的事件，监听器类需要实现javax.servlet.ServletContextListener 接口。<br />
ServletContextListener 是 ServletContext 的监听者，如果 ServletContext 发生变化，如服务器启动时 ServletContext 被创建，服务器关闭时 ServletContext 将要被销毁。 </font></p>
<p><font size="4">ServletContextListener接口的方法：<br />
void contextInitialized(ServletContextEvent sce)<br />
通知正在接受的对象，应用程序已经被加载及初始化。<br />
void contextDestroyed(ServletContextEvent sce)<br />
通知正在接受的对象，应用程序已经被载出。</font></p>
<p><font size="4">ServletContextEvent中的方法：<br />
ServletContext getServletContext()<br />
取得ServletContext对象</font></p>
<p><br />
<font size="4">2.ServletContextAttributeListener：用于监听WEB应用属性改变的事件，包括：增加属性、删除属性、修改属性，监听器类需要实现javax.servlet.ServletContextAttributeListener接口。</font></p>
<p><font size="4">ServletContextAttributeListener接口方法：<br />
void attributeAdded(ServletContextAttributeEvent scab)<br />
若有对象加入Application的范围，通知正在收听的对象<br />
void attributeRemoved(ServletContextAttributeEvent scab)<br />
若有对象从Application的范围移除，通知正在收听的对象<br />
void attributeReplaced(ServletContextAttributeEvent scab)<br />
若在Application的范围中，有对象取代另一个对象时，通知正在收听的对象</font></p>
<p><br />
<font size="4">ServletContextAttributeEvent中的方法：<br />
java.lang.String getName()<br />
回传属性的名称<br />
java.lang.Object getValue()<br />
回传属性的值</font></p>
<p><font size="4">二、HttpSession相关监听接口<br />
1.HttpSessionBindingListener接口<br />
注意：HttpSessionBindingListener接口是唯一不需要再web.xml中设定的Listener</font></p>
<p><font size="4">当我们的类实现了HttpSessionBindingListener接口后，只要对象加入Session范围（即调用HttpSession对象的setAttribute方法的时候）或从Session范围中移出（即调用HttpSession对象的removeAttribute方法的时候或Session Time out的时候）时，容器分别会自动调用下列两个方法：<br />
void valueBound(HttpSessionBindingEvent event)<br />
void valueUnbound(HttpSessionBindingEvent event)</font></p>
<p><font size="4">思考：如何实现记录网站的客户登录日志， 统计在线人数？</font></p>
<p><font size="4">2.HttpSessionAttributeListener接口<br />
HttpSessionAttributeListener监听HttpSession中的属性的操作。<br />
当在Session增加一个属性时，激发attributeAdded(HttpSessionBindingEvent se) 方法；当在Session删除一个属性时，激发attributeRemoved(HttpSessionBindingEvent se)方法；当在Session属性被重新设置时，激发attributeReplaced(HttpSessionBindingEvent se) 方法。这和ServletContextAttributeListener比较类似。 </font></p>
<p><font size="4">3.HttpSessionListener接口<br />
HttpSessionListener监听HttpSession的操作。当创建一个Session时，激发session Created(HttpSessionEvent se)方法；当销毁一个Session时，激发sessionDestroyed (HttpSessionEvent se)方法。</font></p>
<p><font size="4">4.HttpSessionActivationListener接口<br />
主要用于同一个Session转移至不同的JVM的情形。</font></p>
<p><font size="4">四、ServletRequest监听接口<br />
1.ServletRequestListener接口<br />
和ServletContextListener接口类似的，这里由ServletContext改为ServletRequest<br />
2.ServletRequestAttributeListener接口<br />
和ServletContextListener接口类似的，这里由ServletContext改为ServletRequest</font>&nbsp;</p>
<br />
<img src ="http://www.blogjava.net/pdw2009/aggbug/209818.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2008-06-22 10:54 <a href="http://www.blogjava.net/pdw2009/archive/2008/06/22/209818.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JFreeChart  中文API(不完整)</title><link>http://www.blogjava.net/pdw2009/archive/2008/02/01/178885.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Fri, 01 Feb 2008 10:39:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2008/02/01/178885.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/178885.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2008/02/01/178885.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/178885.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/178885.html</trackback:ping><description><![CDATA[<p _extended="true">JFreeChart类：<br _extended="true" />
void setAntiAlias(boolean flag)&nbsp;&nbsp;&nbsp;&nbsp;字体模糊边界<br _extended="true" />
void setBackgroundImage(Image image)&nbsp;&nbsp;&nbsp;背景图片<br _extended="true" />
void setBackgroundImageAlignment(int alignment)&nbsp;&nbsp;背景图片对齐方式（参数常量在org.jfree.ui.Align类中定义）<br _extended="true" />
void setBackgroundImageAlpha(float alpha)&nbsp;&nbsp;背景图片透明度（0.0～1.0）<br _extended="true" />
void setBackgroundPaint(Paint paint)&nbsp;&nbsp;&nbsp;背景色<br _extended="true" />
void setBorderPaint(Paint paint)&nbsp;&nbsp;&nbsp;边界线条颜色<br _extended="true" />
void setBorderStroke(Stroke stroke)&nbsp;&nbsp;&nbsp;边界线条笔触<br _extended="true" />
void setBorderVisible(boolean visible)&nbsp;&nbsp;&nbsp;边界线条是否可见</p>
<p _extended="true">-----------------------------------------------------------------------------------------------------------</p>
<p _extended="true">TextTitle类：<br _extended="true" />
void setFont(Font font)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;标题字体<br _extended="true" />
void setPaint(Paint paint)&nbsp;&nbsp;&nbsp;&nbsp;标题字体颜色<br _extended="true" />
void setText(String text)&nbsp;&nbsp;&nbsp;&nbsp;标题内容</p>
<p _extended="true">-----------------------------------------------------------------------------------------------------------</p>
<p _extended="true">StandardLegend(Legend)类：<br _extended="true" />
void setBackgroundPaint(Paint paint)&nbsp;&nbsp;&nbsp;图示背景色<br _extended="true" />
void setTitle(String title)&nbsp;&nbsp;&nbsp;&nbsp;图示标题内容<br _extended="true" />
void setTitleFont(Font font)&nbsp;&nbsp;&nbsp;&nbsp;图示标题字体<br _extended="true" />
void setBoundingBoxArcWidth(int arcWidth)&nbsp;&nbsp;图示边界圆角宽<br _extended="true" />
void setBoundingBoxArcHeight(int arcHeight)&nbsp;&nbsp;图示边界圆角高<br _extended="true" />
void setOutlinePaint(Paint paint)&nbsp;&nbsp;&nbsp;图示边界线条颜色<br _extended="true" />
void setOutlineStroke(Stroke stroke)&nbsp;&nbsp;&nbsp;图示边界线条笔触<br _extended="true" />
void setDisplaySeriesLines(boolean flag)&nbsp;&nbsp;图示项是否显示横线（折线图有效）<br _extended="true" />
void setDisplaySeriesShapes(boolean flag)&nbsp;&nbsp;图示项是否显示形状（折线图有效）<br _extended="true" />
void setItemFont(Font font)&nbsp;&nbsp;&nbsp;&nbsp;图示项字体<br _extended="true" />
void setItemPaint(Paint paint)&nbsp;&nbsp;&nbsp;&nbsp;图示项字体颜色<br _extended="true" />
void setAnchor(int anchor)&nbsp;&nbsp;&nbsp;&nbsp;图示在图表中的显示位置（参数常量在Legend类中定义）</p>
<p _extended="true">-----------------------------------------------------------------------------------------------------------</p>
<p _extended="true">Axis类：<br _extended="true" />
void setVisible(boolean flag)&nbsp;&nbsp;&nbsp;&nbsp;坐标轴是否可见<br _extended="true" />
void setAxisLinePaint(Paint paint)&nbsp;&nbsp;&nbsp;坐标轴线条颜色（3D轴无效）<br _extended="true" />
void setAxisLineStroke(Stroke stroke)&nbsp;&nbsp;&nbsp;坐标轴线条笔触（3D轴无效）<br _extended="true" />
void setAxisLineVisible(boolean visible)&nbsp;&nbsp;坐标轴线条是否可见（3D轴无效）<br _extended="true" />
void setFixedDimension(double dimension)&nbsp;&nbsp;（用于复合表中对多坐标轴的设置）<br _extended="true" />
void setLabel(String label)&nbsp;&nbsp;&nbsp;&nbsp;坐标轴标题<br _extended="true" />
void setLabelFont(Font font)&nbsp;&nbsp;&nbsp;&nbsp;坐标轴标题字体<br _extended="true" />
void setLabelPaint(Paint paint)&nbsp;&nbsp;&nbsp;&nbsp;坐标轴标题颜色<br _extended="true" />
void setLabelAngle(double angle)`&nbsp;&nbsp;&nbsp;坐标轴标题旋转角度（纵坐标可以旋转）<br _extended="true" />
void setTickLabelFont(Font font)&nbsp;&nbsp;&nbsp;坐标轴标尺值字体<br _extended="true" />
void setTickLabelPaint(Paint paint)&nbsp;&nbsp;&nbsp;坐标轴标尺值颜色<br _extended="true" />
void setTickLabelsVisible(boolean flag)&nbsp;&nbsp;&nbsp;坐标轴标尺值是否显示<br _extended="true" />
void setTickMarkPaint(Paint paint)&nbsp;&nbsp;&nbsp;坐标轴标尺颜色<br _extended="true" />
void setTickMarkStroke(Stroke stroke)&nbsp;&nbsp;&nbsp;坐标轴标尺笔触<br _extended="true" />
void setTickMarksVisible(boolean flag)&nbsp;&nbsp;&nbsp;坐标轴标尺是否显示</p>
<p _extended="true">ValueAxis(Axis)类：<br _extended="true" />
void setAutoRange(boolean auto)&nbsp;&nbsp;&nbsp;&nbsp;自动设置数据轴数据范围<br _extended="true" />
void setAutoRangeMinimumSize(double size)&nbsp;&nbsp;自动设置数据轴数据范围时数据范围的最小跨度<br _extended="true" />
void setAutoTickUnitSelection(boolean flag)&nbsp;&nbsp;数据轴的数据标签是否自动确定（默认为true）<br _extended="true" />
void setFixedAutoRange(double length)&nbsp;&nbsp;&nbsp;数据轴固定数据范围（设置100的话就是显示MAXVALUE到MAXVALUE-100那段数据范围）<br _extended="true" />
void setInverted(boolean flag)&nbsp;&nbsp;&nbsp;&nbsp;数据轴是否反向（默认为false）<br _extended="true" />
void setLowerMargin(double margin)&nbsp;&nbsp;&nbsp;数据轴下（左）边距<br _extended="true" />
void setUpperMargin(double margin)&nbsp;&nbsp;&nbsp;数据轴上（右）边距<br _extended="true" />
void setLowerBound(double min)&nbsp;&nbsp;&nbsp;&nbsp;数据轴上的显示最小值<br _extended="true" />
void setUpperBound(double max)&nbsp;&nbsp;&nbsp;&nbsp;数据轴上的显示最大值<br _extended="true" />
void setPositiveArrowVisible(boolean visible)&nbsp;&nbsp;是否显示正向箭头（3D轴无效）<br _extended="true" />
void setNegativeArrowVisible(boolean visible)&nbsp;&nbsp;是否显示反向箭头（3D轴无效）<br _extended="true" />
void setVerticalTickLabels(boolean flag)&nbsp;&nbsp;数据轴数据标签是否旋转到垂直<br _extended="true" />
void setStandardTickUnits(TickUnitSource source)&nbsp;数据轴的数据标签（可以只显示整数标签，需要将AutoTickUnitSelection设false）</p>
<p _extended="true">NumberAxis(ValueAxis)类：<br _extended="true" />
void setAutoRangeIncludesZero(boolean flag)&nbsp;&nbsp;是否强制在自动选择的数据范围中包含0<br _extended="true" />
void setAutoRangeStickyZero(boolean flag)&nbsp;&nbsp;是否强制在整个数据轴中包含0，即使0不在数据范围中<br _extended="true" />
void setNumberFormatOverride(NumberFormat formatter)&nbsp;数据轴数据标签的显示格式<br _extended="true" />
void setTickUnit(NumberTickUnit unit)&nbsp;&nbsp;&nbsp;数据轴的数据标签（需要将AutoTickUnitSelection设false）</p>
<p _extended="true">DateAxis(ValueAxis)类：<br _extended="true" />
void setMaximumDate(Date maximumDate)&nbsp;&nbsp;&nbsp;日期轴上的最小日期<br _extended="true" />
void setMinimumDate(Date minimumDate)&nbsp;&nbsp;&nbsp;日期轴上的最大日期<br _extended="true" />
void setRange(Date lower,Date upper)&nbsp;&nbsp;&nbsp;日期轴范围<br _extended="true" />
void setDateFormatOverride(DateFormat formatter)&nbsp;日期轴日期标签的显示格式<br _extended="true" />
void setTickUnit(DateTickUnit unit)&nbsp;&nbsp;&nbsp;日期轴的日期标签（需要将AutoTickUnitSelection设false）<br _extended="true" />
void setTickMarkPosition(DateTickMarkPosition position)&nbsp;日期标签位置（参数常量在org.jfree.chart.axis.DateTickMarkPosition类中定义）</p>
<p _extended="true">CategoryAxis(Axis)类：<br _extended="true" />
void setCategoryMargin(double margin)&nbsp;&nbsp;&nbsp;分类轴边距<br _extended="true" />
void setLowerMargin(double margin)&nbsp;&nbsp;&nbsp;分类轴下（左）边距<br _extended="true" />
void setUpperMargin(double margin)&nbsp;&nbsp;&nbsp;分类轴上（右）边距<br _extended="true" />
void setVerticalCategoryLabels(boolean flag)&nbsp;&nbsp;分类轴标题是否旋转到垂直<br _extended="true" />
void setMaxCategoryLabelWidthRatio(float ratio)&nbsp;&nbsp;分类轴分类标签的最大宽度</p>
<p _extended="true">-----------------------------------------------------------------------------------------------------------</p>
<p _extended="true">Plot类：<br _extended="true" />
void setBackgroundImage(Image image)&nbsp;&nbsp;&nbsp;数据区的背景图片<br _extended="true" />
void setBackgroundImageAlignment(int alignment)&nbsp;&nbsp;数据区的背景图片对齐方式（参数常量在org.jfree.ui.Align类中定义）<br _extended="true" />
void setBackgroundPaint(Paint paint)&nbsp;&nbsp;&nbsp;数据区的背景图片背景色<br _extended="true" />
void setBackgroundAlpha(float alpha)&nbsp;&nbsp;&nbsp;数据区的背景透明度（0.0～1.0）<br _extended="true" />
void setForegroundAlpha(float alpha)&nbsp;&nbsp;&nbsp;数据区的前景透明度（0.0～1.0）<br _extended="true" />
void setDataAreaRatio(double ratio)&nbsp;&nbsp;&nbsp;数据区占整个图表区的百分比<br _extended="true" />
void setOutLinePaint(Paint paint)&nbsp;&nbsp;&nbsp;数据区的边界线条颜色<br _extended="true" />
void setOutLineStroke(Stroke stroke)&nbsp;&nbsp;&nbsp;数据区的边界线条笔触<br _extended="true" />
void setNoDataMessage(String message)&nbsp;&nbsp;&nbsp;没有数据时显示的消息<br _extended="true" />
void setNoDataMessageFont(Font font)&nbsp;&nbsp;&nbsp;没有数据时显示的消息字体<br _extended="true" />
void setNoDataMessagePaint(Paint paint)&nbsp;&nbsp;&nbsp;没有数据时显示的消息颜色</p>
<p _extended="true">CategoryPlot(Plot)类：<br _extended="true" />
void setDataset(CategoryDataset dataset)&nbsp;&nbsp;数据区的2维数据表<br _extended="true" />
void setColumnRenderingOrder(SortOrder order)&nbsp;&nbsp;数据分类的排序方式<br _extended="true" />
void setAxisOffset(Spacer offset)&nbsp;&nbsp;&nbsp;坐标轴到数据区的间距<br _extended="true" />
void setOrientation(PlotOrientation orientation)&nbsp;数据区的方向（PlotOrientation.HORIZONTAL或PlotOrientation.VERTICAL）<br _extended="true" />
void setDomainAxis(CategoryAxis axis)&nbsp;&nbsp;&nbsp;数据区的分类轴<br _extended="true" />
void setDomainAxisLocation(AxisLocation location)&nbsp;分类轴的位置（参数常量在org.jfree.chart.axis.AxisLocation类中定义）<br _extended="true" />
void setDomainGridlinesVisible(boolean visible)&nbsp;&nbsp;分类轴网格是否可见<br _extended="true" />
void setDomainGridlinePaint(Paint paint)&nbsp;&nbsp;分类轴网格线条颜色<br _extended="true" />
void setDomainGridlineStroke(Stroke stroke)&nbsp;&nbsp;分类轴网格线条笔触<br _extended="true" />
void setRangeAxis(ValueAxis axis)&nbsp;&nbsp;&nbsp;数据区的数据轴<br _extended="true" />
void setRangeAxisLocation(AxisLocation location)&nbsp;数据轴的位置（参数常量在org.jfree.chart.axis.AxisLocation类中定义）<br _extended="true" />
void setRangeGridlinesVisible(boolean visible)&nbsp;&nbsp;数据轴网格是否可见<br _extended="true" />
void setRangeGridlinePaint(Paint paint)&nbsp;&nbsp;&nbsp;数据轴网格线条颜色<br _extended="true" />
void setRangeGridlineStroke(Stroke stroke)&nbsp;&nbsp;数据轴网格线条笔触<br _extended="true" />
void setRenderer(CategoryItemRenderer renderer)&nbsp;&nbsp;数据区的表示者（详见Renderer组）<br _extended="true" />
void addAnnotation(CategoryAnnotation annotation)&nbsp;给数据区加一个注释<br _extended="true" />
void addRangeMarker(Marker marker,Layer layer)&nbsp;&nbsp;给数据区加一个数值范围区域</p>
<p _extended="true">PiePlot(Plot)类：<br _extended="true" />
void setDataset(PieDataset dataset)&nbsp;&nbsp;&nbsp;数据区的1维数据表<br _extended="true" />
void setIgnoreNullValues(boolean flag)&nbsp;&nbsp;&nbsp;忽略无值的分类<br _extended="true" />
void setCircular(boolean flag)&nbsp;&nbsp;&nbsp;&nbsp;饼图是否一定是正圆<br _extended="true" />
void setStartAngle(double angle)&nbsp;&nbsp;&nbsp;饼图的初始角度<br _extended="true" />
void setDirection(Rotation direction)&nbsp;&nbsp;&nbsp;饼图的旋转方向<br _extended="true" />
void setExplodePercent(int section,double percent)&nbsp;抽取的那块（1维数据表的分类下标）以及抽取出来的距离（0.0～1.0），3D饼图无效<br _extended="true" />
void setLabelBackgroundPaint(Paint paint)&nbsp;&nbsp;分类标签的底色<br _extended="true" />
void setLabelFont(Font font)&nbsp;&nbsp;&nbsp;&nbsp;分类标签的字体<br _extended="true" />
void setLabelPaint(Paint paint)&nbsp;&nbsp;&nbsp;&nbsp;分类标签的字体颜色<br _extended="true" />
void setLabelLinkMargin(double margin)&nbsp;&nbsp;&nbsp;分类标签与图的连接线边距<br _extended="true" />
void setLabelLinkPaint(Paint paint)&nbsp;&nbsp;&nbsp;分类标签与图的连接线颜色<br _extended="true" />
void setLabelLinkStroke(Stroke stroke)&nbsp;&nbsp;&nbsp;分类标签与图的连接线笔触<br _extended="true" />
void setLabelOutlinePaint(Paint paint)&nbsp;&nbsp;&nbsp;分类标签边框颜色<br _extended="true" />
void setLabelOutlineStroke(Paint paint)&nbsp;&nbsp;&nbsp;分类标签边框笔触<br _extended="true" />
void setLabelShadowPaint(Paint paint)&nbsp;&nbsp;&nbsp;分类标签阴影颜色<br _extended="true" />
void setMaximumLabelWidth(double width)&nbsp;&nbsp;&nbsp;分类标签的最大长度（0.0～1.0）<br _extended="true" />
void setPieIndex(int index)&nbsp;&nbsp;&nbsp;&nbsp;饼图的索引（复合饼图中用到）<br _extended="true" />
void setSectionOutlinePaint(int section,Paint paint)&nbsp;指定分类饼的边框颜色<br _extended="true" />
void setSectionOutlineStroke(int section,Stroke stroke)&nbsp;指定分类饼的边框笔触<br _extended="true" />
void setSectionPaint(int section,Paint paint)&nbsp;&nbsp;指定分类饼的颜色<br _extended="true" />
void setShadowPaint(Paint paint)&nbsp;&nbsp;&nbsp;饼图的阴影颜色<br _extended="true" />
void setShadowXOffset(double offset)&nbsp;&nbsp;&nbsp;饼图的阴影相对图的水平偏移<br _extended="true" />
void setShadowYOffset(double offset)&nbsp;&nbsp;&nbsp;饼图的阴影相对图的垂直偏移<br _extended="true" />
void setLabelGenerator(PieSectionLabelGenerator generator)&nbsp;分类标签的格式，设置成null则整个标签包括连接线都不显示<br _extended="true" />
void setToolTipGenerator(PieToolTipGenerator generator)&nbsp;&nbsp;MAP中鼠标移上的显示格式<br _extended="true" />
void setURLGenerator(PieURLGenerator generator)&nbsp;&nbsp;&nbsp;MAP中钻取链接格式</p>
<p _extended="true">PiePlot3D(PiePlot)类：<br _extended="true" />
void setDepthFactor(double factor)&nbsp;&nbsp;&nbsp;3D饼图的Z轴高度（0.0～1.0）</p>
<p _extended="true">MultiplePiePlot(Plot)类：<br _extended="true" />
void setLimit(double limit)&nbsp;&nbsp;&nbsp;&nbsp;每个饼图之间的数据关联（详细比较复杂）&nbsp;&nbsp;&nbsp;<br _extended="true" />
void setPieChart(JFreeChart pieChart)&nbsp;&nbsp;&nbsp;每个饼图的显示方式（见JFreeChart类个PiePlot类）</p>
<p _extended="true">-----------------------------------------------------------------------------------------------------------</p>
<p _extended="true">AbstractRenderer类：<br _extended="true" />
void setItemLabelAnchorOffset(double offset)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据标签的与数据点的偏移<br _extended="true" />
void setItemLabelsVisible(boolean visible)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据标签是否可见<br _extended="true" />
void setItemLabelFont(Font font)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据标签的字体<br _extended="true" />
void setItemLabelPaint(Paint paint)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据标签的字体颜色<br _extended="true" />
void setItemLabelPosition(ItemLabelPosition position)&nbsp;&nbsp;&nbsp;&nbsp;数据标签位置<br _extended="true" />
void setPositiveItemLabelPosition(ItemLabelPosition position)&nbsp;&nbsp;&nbsp;正数标签位置<br _extended="true" />
void setNegativeItemLabelPosition(ItemLabelPosition position)&nbsp;&nbsp;&nbsp;负数标签位置<br _extended="true" />
void setOutLinePaint(Paint paint)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图形边框的线条颜色<br _extended="true" />
void setOutLineStroke(Stroke stroke)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图形边框的线条笔触<br _extended="true" />
void setPaint(Paint paint)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;所有分类图形的颜色<br _extended="true" />
void setShape(Shape shape)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;所有分类图形的形状（如折线图的点）<br _extended="true" />
void setStroke(Stroke stroke)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;所有分类图形的笔触（如折线图的线）<br _extended="true" />
void setSeriesItemLabelsVisible(int series,boolean visible)&nbsp;&nbsp;&nbsp;指定分类的数据标签是否可见<br _extended="true" />
void setSeriesItemLabelFont(int series,Font font)&nbsp;&nbsp;&nbsp;&nbsp;指定分类的数据标签的字体<br _extended="true" />
void setSeriesItemLabelPaint(int series,Paint paint)&nbsp;&nbsp;&nbsp;&nbsp;指定分类的数据标签的字体颜色<br _extended="true" />
void setSeriesItemLabelPosition(int series,ItemLabelPosition position)&nbsp;&nbsp;数据标签位置<br _extended="true" />
void setSeriesPositiveItemLabelPosition(int series,ItemLabelPosition position)&nbsp;正数标签位置<br _extended="true" />
void setSeriesNegativeItemLabelPosition(int series,ItemLabelPosition position)&nbsp;负数标签位置<br _extended="true" />
void setSeriesOutLinePaint(int series,Paint paint)&nbsp;&nbsp;&nbsp;&nbsp;指定分类的图形边框的线条颜色<br _extended="true" />
void setSeriesOutLineStroke(int series,Stroke stroke)&nbsp;&nbsp;&nbsp;&nbsp;指定分类的图形边框的线条笔触<br _extended="true" />
void setSeriesPaint(int series,Paint paint)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指定分类图形的颜色<br _extended="true" />
void setSeriesShape(int series,Shape shape)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指定分类图形的形状（如折线图的点）<br _extended="true" />
void setSeriesStroke(int series,Stroke stroke)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指定分类图形的笔触（如折线图的线）</p>
<p _extended="true">AbstractCategoryItemRenderer(AbstractRenderer)类：<br _extended="true" />
void setLabelGenerator(CategoryLabelGenerator generator)&nbsp;&nbsp;&nbsp;数据标签的格式<br _extended="true" />
void setToolTipGenerator(CategoryToolTipGenerator generator)&nbsp;&nbsp;&nbsp;MAP中鼠标移上的显示格式<br _extended="true" />
void setItemURLGenerator(CategoryURLGenerator generator)&nbsp;&nbsp;&nbsp;MAP中钻取链接格式<br _extended="true" />
void setSeriesLabelGenerator(int series,CategoryLabelGenerator generator)&nbsp;指定分类的数据标签的格式<br _extended="true" />
void setSeriesToolTipGenerator(int series,CategoryToolTipGenerator generator)&nbsp;指定分类的MAP中鼠标移上的显示格式<br _extended="true" />
void setSeriesItemURLGenerator(int series,CategoryURLGenerator generator)&nbsp;指定分类的MAP中钻取链接格式</p>
<p _extended="true">BarRenderer(AbstractCategoryItemRenderer)类：<br _extended="true" />
void setDrawBarOutline(boolean draw)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是否画图形边框<br _extended="true" />
void setItemMargin(double percent)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每个BAR之间的间隔<br _extended="true" />
void setMaxBarWidth(double percent)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每个BAR的最大宽度<br _extended="true" />
void setMinimumBarLength(double min)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最短的BAR长度，避免数值太小而显示不出<br _extended="true" />
void setPositiveItemLabelPositionFallback(ItemLabelPosition position)&nbsp;&nbsp;无法在BAR中显示的正数标签位置<br _extended="true" />
void setNegativeItemLabelPositionFallback(ItemLabelPosition position)&nbsp;&nbsp;无法在BAR中显示的负数标签位置</p>
<p _extended="true">BarRenderer3D(BarRenderer)类：<br _extended="true" />
void setWallPaint(Paint paint)&nbsp;&nbsp;&nbsp;&nbsp;3D坐标轴的墙体颜色</p>
<p _extended="true">StackedBarRenderer(BarRenderer)类：<br _extended="true" />
没有特殊的设置</p>
<p _extended="true">StackedBarRenderer3D(BarRenderer3D)类：<br _extended="true" />
没有特殊的设置</p>
<p _extended="true">GroupedStackedBarRenderer(StackedBarRenderer)类：<br _extended="true" />
void setSeriesToGroupMap(KeyToGroupMap map)&nbsp;&nbsp;将分类自由的映射成若干个组（KeyToGroupMap.mapKeyToGroup(series,group)）</p>
<p _extended="true">LayeredBarRenderer(BarRenderer)类：<br _extended="true" />
void setSeriesBarWidth(int series,double width)&nbsp;&nbsp;设定每个分类的宽度（注意设置不要使某分类被覆盖）</p>
<p _extended="true">WaterfallBarRenderer(BarRenderer)类：<br _extended="true" />
void setFirstBarPaint(Paint paint)&nbsp;&nbsp;&nbsp;第一个柱图的颜色<br _extended="true" />
void setLastBarPaint(Paint paint)&nbsp;&nbsp;&nbsp;最后一个柱图的颜色<br _extended="true" />
void setPositiveBarPaint(Paint paint)&nbsp;&nbsp;&nbsp;正值柱图的颜色<br _extended="true" />
void setNegativeBarPaint(Paint paint)&nbsp;&nbsp;&nbsp;负值柱图的颜色</p>
<p _extended="true">IntervalBarRenderer(BarRenderer)类：<br _extended="true" />
需要传IntervalCategoryDataset作为数据源</p>
<p _extended="true">GanttBarRenderer(IntervalBarRenderer)类：<br _extended="true" />
void setCompletePaint(Paint paint)&nbsp;&nbsp;&nbsp;完成进度颜色<br _extended="true" />
void setIncompletePaint(Paint paint)&nbsp;&nbsp;&nbsp;未完成进度颜色<br _extended="true" />
void setStartPercent(double percent)&nbsp;&nbsp;&nbsp;设置进度条在整条中的起始位置（0.0～1.0）<br _extended="true" />
void setEndPercent(double percent)&nbsp;&nbsp;&nbsp;设置进度条在整条中的结束位置（0.0～1.0）</p>
<p _extended="true">StatisticBarRenderer(BarRenderer)类：<br _extended="true" />
需要传StatisticCategoryDataset作为数据源</p>
<p _extended="true">LineAndShapeRenderer(AbstractCategoryItemRenderer)类：<br _extended="true" />
void setDrawLines(boolean draw)&nbsp;&nbsp;&nbsp;&nbsp;是否折线的数据点之间用线连<br _extended="true" />
void setDrawShapes(boolean draw)&nbsp;&nbsp;&nbsp;是否折线的数据点根据分类使用不同的形状<br _extended="true" />
void setShapesFilled(boolean filled)&nbsp;&nbsp;&nbsp;所有分类是否填充数据点图形<br _extended="true" />
void setSeriesShapesFilled(int series,boolean filled)&nbsp;指定分类是否填充数据点图形<br _extended="true" />
void setUseFillPaintForShapeOutline(boolean use)&nbsp;指定是否填充数据点的Paint也被用于画数据点形状的边框</p>
<p _extended="true">LevelRenderer(AbstractCategoryItemRenderer)类：<br _extended="true" />
void setItemMargin(double percent)&nbsp;&nbsp;&nbsp;每个分类之间的间隔<br _extended="true" />
void setMaxItemWidth(double percent)&nbsp;&nbsp;&nbsp;每个分类的最大宽度</p>
<p _extended="true">CategoryStepRenderer(AbstractCategoryItemRenderer)类：<br _extended="true" />
void setStagger(boolean shouldStagger)&nbsp;&nbsp;&nbsp;不同分类的图是否交错</p>
<p _extended="true">MinMaxCategoryRenderer(AbstractCategoryItemRenderer)类：<br _extended="true" />
void setDrawLines(boolean drawLines)&nbsp;&nbsp;&nbsp;是否在每个分类线间画连接线<br _extended="true" />
void setGroupPaint(Paint groupPaint)&nbsp;&nbsp;&nbsp;一组图形连接线的颜色<br _extended="true" />
void setGroupStroke(Stroke groupStroke)&nbsp;&nbsp;&nbsp;一组图形连接线的笔触<br _extended="true" />
void setMaxIcon(Icon maxIcon)&nbsp;&nbsp;&nbsp;&nbsp;最大值的ICON<br _extended="true" />
void setMinIcon(Icon minIcon)&nbsp;&nbsp;&nbsp;&nbsp;最小值的ICON<br _extended="true" />
void setObjectIcon(Icon objectIcon)&nbsp;&nbsp;&nbsp;所有值的ICON</p>
<p _extended="true">AreaRender(AbstractCategoryItemRenderer)类：<br _extended="true" />
没有特殊的设置</p>
<p _extended="true">StackedAreaRender(AreaRender)类：<br _extended="true" />
没有特殊的设置</p>
<p _extended="true">-----------------------------------------------------------------------------------------------------------</p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/178885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2008-02-01 18:39 <a href="http://www.blogjava.net/pdw2009/archive/2008/02/01/178885.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>contentType类列列表</title><link>http://www.blogjava.net/pdw2009/archive/2007/12/13/167521.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Thu, 13 Dec 2007 08:09:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/12/13/167521.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/167521.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/12/13/167521.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/167521.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/167521.html</trackback:ping><description><![CDATA[<p>".*"="application/octet-stream"<br />
".001"="application/x-001"<br />
".301"="application/x-301"<br />
".323"="text/h323"<br />
".906"="application/x-906"<br />
".907"="drawing/907"<br />
".a11"="application/x-a11"<br />
".acp"="audio/x-mei-aac"<br />
".ai"="application/postscript"<br />
".aif"="audio/aiff"<br />
".aifc"="audio/aiff"<br />
".aiff"="audio/aiff"<br />
".anv"="application/x-anv"<br />
".asa"="text/asa"<br />
".asf"="video/x-ms-asf"<br />
".asp"="text/asp"<br />
".asx"="video/x-ms-asf"<br />
".au"="audio/basic"<br />
".avi"="video/avi"<br />
".awf"="application/vnd.adobe.workflow"<br />
".biz"="text/xml"<br />
".bmp"="application/x-bmp"<br />
".bot"="application/x-bot"<br />
".c4t"="application/x-c4t"<br />
".c90"="application/x-c90"<br />
".cal"="application/x-cals"<br />
".cat"="application/vnd.ms-pki.seccat"<br />
".cdf"="application/x-netcdf"<br />
".cdr"="application/x-cdr"<br />
".cel"="application/x-cel"<br />
".cer"="application/x-x509-ca-cert"<br />
".cg4"="application/x-g4"<br />
".cgm"="application/x-cgm"<br />
".cit"="application/x-cit"<br />
".class"="java/*"<br />
".cml"="text/xml"<br />
".cmp"="application/x-cmp"<br />
".cmx"="application/x-cmx"<br />
".cot"="application/x-cot"<br />
".crl"="application/pkix-crl"<br />
".crt"="application/x-x509-ca-cert"<br />
".csi"="application/x-csi"<br />
".css"="text/css"<br />
".cut"="application/x-cut"<br />
".dbf"="application/x-dbf"<br />
".dbm"="application/x-dbm"<br />
".dbx"="application/x-dbx"<br />
".dcd"="text/xml"<br />
".dcx"="application/x-dcx"<br />
".der"="application/x-x509-ca-cert"<br />
".dgn"="application/x-dgn"<br />
".dib"="application/x-dib"<br />
".dll"="application/x-msdownload"<br />
".doc"="application/msword"<br />
".dot"="application/msword"<br />
".drw"="application/x-drw"<br />
".dtd"="text/xml"<br />
".dwf"="Model/vnd.dwf"<br />
".dwf"="application/x-dwf"<br />
".dwg"="application/x-dwg"<br />
".dxb"="application/x-dxb"<br />
".dxf"="application/x-dxf"<br />
".edn"="application/vnd.adobe.edn"<br />
".emf"="application/x-emf"<br />
".eml"="message/rfc822"<br />
".ent"="text/xml"<br />
".epi"="application/x-epi"<br />
".eps"="application/x-ps"<br />
".eps"="application/postscript"<br />
".etd"="application/x-ebx"<br />
".exe"="application/x-msdownload"<br />
".fax"="image/fax"<br />
".fdf"="application/vnd.fdf"<br />
".fif"="application/fractals"<br />
".fo"="text/xml"<br />
".frm"="application/x-frm"<br />
".g4"="application/x-g4"<br />
".gbr"="application/x-gbr"<br />
".gcd"="application/x-gcd"<br />
".gif"="image/gif"<br />
".gl2"="application/x-gl2"<br />
".gp4"="application/x-gp4"<br />
".hgl"="application/x-hgl"<br />
".hmr"="application/x-hmr"<br />
".hpg"="application/x-hpgl"<br />
".hpl"="application/x-hpl"<br />
".hqx"="application/mac-binhex40"<br />
".hrf"="application/x-hrf"<br />
".hta"="application/hta"<br />
".htc"="text/x-component"<br />
".htm"="text/html"<br />
".html"="text/html"<br />
".htt"="text/webviewhtml"<br />
".htx"="text/html"<br />
".icb"="application/x-icb"<br />
".ico"="image/x-icon"<br />
".ico"="application/x-ico"<br />
".iff"="application/x-iff"<br />
".ig4"="application/x-g4"<br />
".igs"="application/x-igs"<br />
".iii"="application/x-iphone"<br />
".img"="application/x-img"<br />
".ins"="application/x-internet-signup"<br />
".isp"="application/x-internet-signup"<br />
".IVF"="video/x-ivf"<br />
".java"="java/*"<br />
".jfif"="image/jpeg"<br />
".jpe"="image/jpeg"<br />
".jpe"="application/x-jpe"<br />
".jpeg"="image/jpeg"<br />
".jpg"="image/jpeg"<br />
".jpg"="application/x-jpg"<br />
".js"="application/x-javascript"<br />
".jsp"="text/html"<br />
".la1"="audio/x-liquid-file"<br />
".lar"="application/x-laplayer-reg"<br />
".latex"="application/x-latex"<br />
".lavs"="audio/x-liquid-secure"<br />
".lbm"="application/x-lbm"<br />
".lmsff"="audio/x-la-lms"<br />
".ls"="application/x-javascript"<br />
".ltr"="application/x-ltr"<br />
".m1v"="video/x-mpeg"<br />
".m2v"="video/x-mpeg"<br />
".m3u"="audio/mpegurl"<br />
".m4e"="video/mpeg4"<br />
".mac"="application/x-mac"<br />
".man"="application/x-troff-man"<br />
".math"="text/xml"<br />
".mdb"="application/msaccess"<br />
".mdb"="application/x-mdb"<br />
".mfp"="application/x-shockwave-flash"<br />
".mht"="message/rfc822"<br />
".mhtml"="message/rfc822"<br />
".mi"="application/x-mi"<br />
".mid"="audio/mid"<br />
".midi"="audio/mid"<br />
".mil"="application/x-mil"<br />
".mml"="text/xml"<br />
".mnd"="audio/x-musicnet-download"<br />
".mns"="audio/x-musicnet-stream"<br />
".mocha"="application/x-javascript"<br />
".movie"="video/x-sgi-movie"<br />
".mp1"="audio/mp1"<br />
".mp2"="audio/mp2"<br />
".mp2v"="video/mpeg"<br />
".mp3"="audio/mp3"<br />
".mp4"="video/mpeg4"<br />
".mpa"="video/x-mpg"<br />
".mpd"="application/vnd.ms-project"<br />
".mpe"="video/x-mpeg"<br />
".mpeg"="video/mpg"<br />
".mpg"="video/mpg"<br />
".mpga"="audio/rn-mpeg"<br />
".mpp"="application/vnd.ms-project"<br />
".mps"="video/x-mpeg"<br />
".mpt"="application/vnd.ms-project"<br />
".mpv"="video/mpg"<br />
".mpv2"="video/mpeg"<br />
".mpw"="application/vnd.ms-project"<br />
".mpx"="application/vnd.ms-project"<br />
".mtx"="text/xml"<br />
".mxp"="application/x-mmxp"<br />
".net"="image/pnetvue"<br />
".nrf"="application/x-nrf"<br />
".nws"="message/rfc822"<br />
".odc"="text/x-ms-odc"<br />
".out"="application/x-out"<br />
".p10"="application/pkcs10"<br />
".p12"="application/x-pkcs12"<br />
".p7b"="application/x-pkcs7-certificates"<br />
".p7c"="application/pkcs7-mime"<br />
".p7m"="application/pkcs7-mime"<br />
".p7r"="application/x-pkcs7-certreqresp"<br />
".p7s"="application/pkcs7-signature"<br />
".pc5"="application/x-pc5"<br />
".pci"="application/x-pci"<br />
".pcl"="application/x-pcl"<br />
".pcx"="application/x-pcx"<br />
".pdf"="application/pdf"<br />
".pdf"="application/pdf"<br />
".pdx"="application/vnd.adobe.pdx"<br />
".pfx"="application/x-pkcs12"<br />
".pgl"="application/x-pgl"<br />
".pic"="application/x-pic"<br />
".pko"="application/vnd.ms-pki.pko"<br />
".pl"="application/x-perl"<br />
".plg"="text/html"<br />
".pls"="audio/scpls"<br />
".plt"="application/x-plt"<br />
".png"="image/png"<br />
".png"="application/x-png"<br />
".pot"="application/vnd.ms-powerpoint"<br />
".ppa"="application/vnd.ms-powerpoint"<br />
".ppm"="application/x-ppm"<br />
".pps"="application/vnd.ms-powerpoint"<br />
".ppt"="application/vnd.ms-powerpoint"<br />
".ppt"="application/x-ppt"<br />
".pr"="application/x-pr"<br />
".prf"="application/pics-rules"<br />
".prn"="application/x-prn"<br />
".prt"="application/x-prt"<br />
".ps"="application/x-ps"<br />
".ps"="application/postscript"<br />
".ptn"="application/x-ptn"<br />
".pwz"="application/vnd.ms-powerpoint"<br />
".r3t"="text/vnd.rn-realtext3d"<br />
".ra"="audio/vnd.rn-realaudio"<br />
".ram"="audio/x-pn-realaudio"<br />
".ras"="application/x-ras"<br />
".rat"="application/rat-file"<br />
".rdf"="text/xml"<br />
".rec"="application/vnd.rn-recording"<br />
".red"="application/x-red"<br />
".rgb"="application/x-rgb"<br />
".rjs"="application/vnd.rn-realsystem-rjs"<br />
".rjt"="application/vnd.rn-realsystem-rjt"<br />
".rlc"="application/x-rlc"<br />
".rle"="application/x-rle"<br />
".rm"="application/vnd.rn-realmedia"<br />
".rmf"="application/vnd.adobe.rmf"<br />
".rmi"="audio/mid"<br />
".rmj"="application/vnd.rn-realsystem-rmj"<br />
".rmm"="audio/x-pn-realaudio"<br />
".rmp"="application/vnd.rn-rn_music_package"<br />
".rms"="application/vnd.rn-realmedia-secure"<br />
".rmvb"="application/vnd.rn-realmedia-vbr"<br />
".rmx"="application/vnd.rn-realsystem-rmx"<br />
".rnx"="application/vnd.rn-realplayer"<br />
".rp"="image/vnd.rn-realpix"<br />
".rpm"="audio/x-pn-realaudio-plugin"<br />
".rsml"="application/vnd.rn-rsml"<br />
".rt"="text/vnd.rn-realtext"<br />
".rtf"="application/msword"<br />
".rtf"="application/x-rtf"<br />
".rv"="video/vnd.rn-realvideo"<br />
".sam"="application/x-sam"<br />
".sat"="application/x-sat"<br />
".sdp"="application/sdp"<br />
".sdw"="application/x-sdw"<br />
".sit"="application/x-stuffit"<br />
".slb"="application/x-slb"<br />
".sld"="application/x-sld"<br />
".slk"="drawing/x-slk"<br />
".smi"="application/smil"<br />
".smil"="application/smil"<br />
".smk"="application/x-smk"<br />
".snd"="audio/basic"<br />
".sol"="text/plain"<br />
".sor"="text/plain"<br />
".spc"="application/x-pkcs7-certificates"<br />
".spl"="application/futuresplash"<br />
".spp"="text/xml"<br />
".ssm"="application/streamingmedia"<br />
".sst"="application/vnd.ms-pki.certstore"<br />
".stl"="application/vnd.ms-pki.stl"<br />
".stm"="text/html"<br />
".sty"="application/x-sty"<br />
".svg"="text/xml"<br />
".swf"="application/x-shockwave-flash"<br />
".tdf"="application/x-tdf"<br />
".tg4"="application/x-tg4"<br />
".tga"="application/x-tga"<br />
".tif"="image/tiff"<br />
".tif"="application/x-tif"<br />
".tiff"="image/tiff"<br />
".tld"="text/xml"<br />
".top"="drawing/x-top"<br />
".torrent"="application/x-bittorrent"<br />
".tsd"="text/xml"<br />
".txt"="text/plain"<br />
".uin"="application/x-icq"<br />
".uls"="text/iuls"<br />
".vcf"="text/x-vcard"<br />
".vda"="application/x-vda"<br />
".vdx"="application/vnd.visio"<br />
".vml"="text/xml"<br />
".vpg"="application/x-vpeg005"<br />
".vsd"="application/vnd.visio"<br />
".vsd"="application/x-vsd"<br />
".vss"="application/vnd.visio"<br />
".vst"="application/vnd.visio"<br />
".vst"="application/x-vst"<br />
".vsw"="application/vnd.visio"<br />
".vsx"="application/vnd.visio"<br />
".vtx"="application/vnd.visio"<br />
".vxml"="text/xml"<br />
".wav"="audio/wav"<br />
".wax"="audio/x-ms-wax"<br />
".wb1"="application/x-wb1"<br />
".wb2"="application/x-wb2"<br />
".wb3"="application/x-wb3"<br />
".wbmp"="image/vnd.wap.wbmp"<br />
".wiz"="application/msword"<br />
".wk3"="application/x-wk3"<br />
".wk4"="application/x-wk4"<br />
".wkq"="application/x-wkq"<br />
".wks"="application/x-wks"<br />
".wm"="video/x-ms-wm"<br />
".wma"="audio/x-ms-wma"<br />
".wmd"="application/x-ms-wmd"<br />
".wmf"="application/x-wmf"<br />
".wml"="text/vnd.wap.wml"<br />
".wmv"="video/x-ms-wmv"<br />
".wmx"="video/x-ms-wmx"<br />
".wmz"="application/x-ms-wmz"<br />
".wp6"="application/x-wp6"<br />
".wpd"="application/x-wpd"<br />
".wpg"="application/x-wpg"<br />
".wpl"="application/vnd.ms-wpl"<br />
".wq1"="application/x-wq1"<br />
".wr1"="application/x-wr1"<br />
".wri"="application/x-wri"<br />
".wrk"="application/x-wrk"<br />
".ws"="application/x-ws"<br />
".ws2"="application/x-ws"<br />
".wsc"="text/scriptlet"<br />
".wsdl"="text/xml"<br />
".wvx"="video/x-ms-wvx"<br />
".xdp"="application/vnd.adobe.xdp"<br />
".xdr"="text/xml"<br />
".xfd"="application/vnd.adobe.xfd"<br />
".xfdf"="application/vnd.adobe.xfdf"<br />
".xhtml"="text/html"<br />
".xls"="application/vnd.ms-excel"<br />
".xls"="application/x-xls"<br />
".xlw"="application/x-xlw"<br />
".xml"="text/xml"<br />
".xpl"="audio/scpls"<br />
".xq"="text/xml"<br />
".xql"="text/xml"<br />
".xquery"="text/xml"<br />
".xsd"="text/xml"<br />
".xsl"="text/xml"<br />
".xslt"="text/xml"<br />
".xwd"="application/x-xwd"<br />
".x_b"="application/x-x_b"<br />
".x_t"="application/x-x_t"</p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/167521.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-12-13 16:09 <a href="http://www.blogjava.net/pdw2009/archive/2007/12/13/167521.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Structs2 Action使用</title><link>http://www.blogjava.net/pdw2009/archive/2007/10/31/157204.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Wed, 31 Oct 2007 07:15:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/10/31/157204.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/157204.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/10/31/157204.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/157204.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/157204.html</trackback:ping><description><![CDATA[Action中获取HttpServletResponse ,HttpServletRequest,HttpSession等Servlet相关变量有两种方式；<br />
1、非Ioc方式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<p>要获得上述对象，关键Struts 2.0中com.opensymphony.xwork2.ActionContext类。我们可以通过它的静态方法getContext()获取当前Action的上下文对象。 另外，org.apache.struts2.ServletActionContext作为辅助类（Helper Class），可以帮助您快捷地获得这几个对象。 </p>
<p>HttpServletRequest request = ServletActionContext.getRequest(); <br />
HttpServletResponse response = ServletActionContext.getResponse(); <br />
HttpSession session = request.getSession();</p>
<br />
2、Ioc 方式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 只要Action类实现SessionAware, ServletRequestAware, ServletResponseAware这几个接口，相应的变量会自动注入<br />
<br />
调用action的方法<br />
我们知道，当客户端请求一个action时，会生成一个Action 对应的变量，并执行execute方法，但这是需要跟据配置来确定的<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">&nbsp;action&nbsp;</span><span style="color: #ff0000">name&nbsp;</span><span style="color: #0000ff">="HelloWorld"</span><span style="color: #ff0000">&nbsp;class&nbsp;</span><span style="color: #0000ff">="tutorial.HelloWorld"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">&nbsp;result&nbsp;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;/HelloWorld.jsp&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">&nbsp;result&nbsp;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">&nbsp;action&nbsp;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;</span></div>
要想改变默认执行的方法，需要在action节点加上要调用的方法名，如:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">&lt;</span><span style="color: #800000">action&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="AliasHelloWorld"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="tutorial.HelloWorld"</span><span style="color: #ff0000">&nbsp;method</span><span style="color: #0000ff">="aliasAction"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/HelloWorld.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action</span><span style="color: #0000ff">&gt;</span></div>
<br />
如果要实现类似于Structs1.x那样的DispatchAction方式的调用，配置例子如下：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">action&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="login!*"</span><span style="color: #ff0000">&nbsp;method</span><span style="color: #0000ff">="{1}"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="one.LoginAction"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="success"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="dispatcher"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="location"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/main.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="input"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/login.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="loginfail"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="dispatcher"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="location"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/login.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action</span><span style="color: #0000ff">&gt;</span></div>
如上配置，如果只调用login.action，会执行默认方法execute()。<br />
<br />
Structs 2文件上传例子<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;one;<br />
<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.File;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.text.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.ServletContext;<br />
<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.commons.io.FileUtils;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.apache.struts2.util.ServletContextAware;<br />
<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.opensymphony.xwork2.ActionSupport;<br />
<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;FileUploadAction&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;ActionSupport&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;ServletContextAware{<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;File&nbsp;doc;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;docContentType;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;docFileName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;ServletContext&nbsp;context;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;execute()</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;target</span><span style="color: #000000">=</span><span style="color: #000000">context.getRealPath(</span><span style="color: #000000">"</span><span style="color: #000000">/upload</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;file</span><span style="color: #000000">=</span><span style="color: #000000">generateFileName(docFileName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;dfile</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;File(target,file);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileUtils.copyFile(doc,dfile);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.SUCCESS;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;generateFileName(String&nbsp;fileName)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateFormat&nbsp;format&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SimpleDateFormat(</span><span style="color: #000000">"</span><span style="color: #000000">yyMMddHHmmss</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;formatDate&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;format.format(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Date());&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;random&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Random().nextInt(</span><span style="color: #000000">10000</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;position&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;fileName.lastIndexOf(</span><span style="color: #000000">"</span><span style="color: #000000">.</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;extension&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;fileName.substring(position);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;formatDate&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;random&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;extension;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setServletContext(ServletContext&nbsp;context)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.context</span><span style="color: #000000">=</span><span style="color: #000000">context;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ServletContext&nbsp;getContext()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;context;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setContext(ServletContext&nbsp;context)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.context&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;context;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;File&nbsp;getDoc()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;doc;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setDoc(File&nbsp;doc)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.doc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;doc;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getDocContentType()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;docContentType;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setDocContentType(String&nbsp;docContentType)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.docContentType&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;docContentType;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getDocFileName()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;docFileName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setDocFileName(String&nbsp;docFileName)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.docFileName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;docFileName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
}<br />
</span></div>
<br />
<br />
<br />
1：在action中定义的变量，在jsp页面中显示用：&lt;s:property value="变量名" /&gt; <br />
<br />
2：在页面中实现自动增加的序号用iterator的statuts的index属性 eg： <br />
<br />
&lt;s:iterator value="#request.inOutAccountList" id="data" status="listStat"&gt; <br />
<br />
&lt;s:property value="#listStat.index+1"/&gt; <br />
<br />
&lt;/s:iterator&gt; <br />
<br />
3:在action类中取得request和session对象的方法 <br />
<br />
Map session = ActionContext.getContext().getSession(); <br />
HttpServletRequest request = ServletActionContext.getRequest (); <br />
<br />
设置它们的值的方法 <br />
<br />
session.put("operation", "add"); <br />
request.setAttribute("name", name); <br />
<br />
页面中取得它们的值： <br />
<br />
&lt;s:property value="#session.operation"/&gt; <br />
&lt;s:property value="#request.name"/&gt; <br />
<br />
4:页面中奇偶行样式不一样的控制方法： <br />
<br />
&lt;tr class="&lt;s:if test='#listStat.odd == true '&gt;tableStyle-tr1&lt;/s:if&gt;&lt;s:else&gt;tableStyle-tr2&lt;/s:else&gt;" &gt; <br />
<br />
5:单选框和复选框的使用方法 <br />
<br />
1):可以设置默认选中值，注意list的值的设置，通过这种方式使key和value不一样，这种方法比较常用(checkboxlist or radio) <br />
<br />
&lt;s:radio name="uncarInsPolicy.policyStateCode" <br />
list="#{'5':'通过' , '2':'不通过'}" <br />
listKey="key" <br />
listValue="value" <br />
value='5' <br />
/&gt; <br />
<br />
2):这里的key和value的值是一样的(checkboxlist or radio) <br />
<br />
&lt;s:checkboxlist <br />
list="{'Red', 'Blue', 'Green'}" <br />
name="favoriteColor"/&gt; <br />
<br />
6:struts2 中的标签会生成类似由&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;构成的字串（具体什么标签生成什么，可以查看生成后的页面的源代码）如果不限制这些多余代码的生成，页面将变得无法控制，所以一般我们是不希望它生成多余的代码的，具体的设置方法如果，在struts.xml中统一配置 <br />
&lt;constant name="struts.ui.theme" value="simple"/&gt;加上该句即可 <br />
也可以通过在页面中将tag的theme属性设为"simple"取消其默认的表格布局 <br />
不过最好是：自定义一个theme，并将其设为默认应用到整个站点，如此一来就可以得到统一的站点风格 <br />
<br />
7：jsp页面中格式化日期的方法 <br />
<br />
&lt;s:date name="unCarInsModificationInfo.createTime" format="yyyy-MM-dd" nice="false"/&gt;这样就可以将日期格式化为yyyy－MM－dd的形式 <br />
<br />
8：默认情况下，当请求action发生时，Struts运行时（Runtime）根据struts.xml里的Action映射集(Mapping)，实例化action对应的类，并调用其execute方法。当然，我们可以通过以下两种方法改变这种默认调用 <br />
<br />
1）在classes/sturts.xml中新建Action，并指明其调用的方法 <br />
比如想调用action类中的 <br />
<br />
public String aliasAction() { <br />
message ="自定义Action调用方法"; <br />
return SUCCESS; <br />
} <br />
则在classes/sturts.xml中加入下面代码： <br />
&lt;action name="AliasHelloWorld" class="tutorial.HelloWorld" method="aliasAction"&gt; <br />
&lt;result&gt;/HelloWorld.jsp&lt;/result&gt; <br />
&lt;/action&gt; <br />
既可用action名调用该方法了 <br />
<br />
2）（比较常用） <br />
<br />
访问Action时，在Action名后加上&#8220;!xxx&#8221;（xxx为方法名）。 <br />
<br />
9：Struts 2.0有两个配置文件，struts.xml和struts.properties都是放在WEB-INF/classes/下。 <br />
struts.xml用于应用程序相关的配置 <br />
struts.properties用于Struts 2.0的运行时（Runtime）的配置 <br />
<br />
10:在action类中取得web下某一文件夹物理路径（绝对路径）的方法 <br />
filePath = ServletActionContext.getServletContext().getRealPath("/upLoadFiles") <br />
<br />
11：要想返回的页面不是一个直接JSP页面而是要先通过返回action中的方法读取相应的数据再返回到jsp页面，有两种方法 <br />
<br />
1）在struts.xml中这么设置 <br />
<br />
&lt;result name="list" type="redirect-action"&gt;sysmanage/UserBaseInfoAction!findUserBaseInfo.action&lt;/result&gt; <br />
<br />
2）在action中返回时直接调用这个方法即可 <br />
<br />
return findList（）； <br />
<br />
12：设置checkboxlist中默认值的方法 <br />
<br />
&lt;s:checkboxlist name="skills1" <br />
="Skills 1" <br />
list="{ 'Java', '.Net', 'RoR', 'PHP' }" <br />
value="{ 'Java', '.Net' }" /&gt; <br />
&lt;s:checkboxlist name="skills2" <br />
label="Skills 2" <br />
list="#{ 1:'Java', 2: '.Net', 3: 'RoR', 4: 'PHP' }" <br />
listKey="key" <br />
listValue="value" <br />
value="{ 1, 2, 3 }"/&gt; <br />
<br />
13：二级级连下拉框 <br />
<br />
&lt;s:set name="foobar" <br />
value="#{'Java': {'Spring', 'Hibernate', 'Struts 2'}, '.Net': {'Linq', ' ASP.NET 2.0'}, 'Database': {'Oracle', 'SQL Server', 'DB2', 'MySQL'}}" /&gt; <br />
&lt;s:doubleselect list="#foobar.keySet()" <br />
doubleName="technology" <br />
doubleList="#foobar[top]" <br />
label="Technology" /&gt; 
<img src ="http://www.blogjava.net/pdw2009/aggbug/157204.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-10-31 15:15 <a href="http://www.blogjava.net/pdw2009/archive/2007/10/31/157204.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2表单标签使用</title><link>http://www.blogjava.net/pdw2009/archive/2007/10/23/155356.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Tue, 23 Oct 2007 09:52:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/10/23/155356.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/155356.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/10/23/155356.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/155356.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/155356.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&lt;%</span><span style="color: #000000">@&nbsp;page&nbsp;language</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">java</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;contentType</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text/html;&nbsp;charset=utf-8</span><span style="color: #000000">"</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;pageEncoding</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">utf-8</span><span style="color: #000000">"</span><span style="color: #000000">%&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;%</span><span style="color: #000000">@&nbsp;taglib&nbsp;prefix</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">s</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;uri</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/struts-tags</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">%&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;!</span><span style="color: #000000">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">http://www.w3.org/TR/html4/loose.dtd</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">html</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">head</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">meta&nbsp;http</span><span style="color: #000000">-</span><span style="color: #000000">equiv</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">Content-Type</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;content</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text/html;&nbsp;charset=utf-8</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">title</span><span style="color: #000000">&gt;</span><span style="color: #000000">Struct2&nbsp;标签</span><span style="color: #000000">&lt;/</span><span style="color: #000000">title</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">style&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">css/text</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;body{font</span><span style="color: #000000">-</span><span style="color: #000000">size:12px}<br />
&nbsp;&nbsp;&nbsp;&nbsp;div{font</span><span style="color: #000000">-</span><span style="color: #000000">size:12px}<br />
&nbsp;&nbsp;&nbsp;&nbsp;td{font</span><span style="color: #000000">-</span><span style="color: #000000">size:12px}<br />
</span><span style="color: #000000">&lt;/</span><span style="color: #000000">style</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">link&nbsp;href</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">&lt;s:url&nbsp;value=</span><span style="color: #000000">"</span><span style="color: #000000">/</span><span style="color: #000000">webwork</span><span style="color: #000000">/</span><span style="color: #000000">jscalendar</span><span style="color: #000000">/</span><span style="color: #000000">calendar</span><span style="color: #000000">-</span><span style="color: #000000">blue.css</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;rel</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">stylesheet</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text/css</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;media</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">all</span><span style="color: #000000">"</span><span style="color: #000000">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;/</span><span style="color: #000000">head</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">body</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">div&nbsp;style</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">border:&nbsp;1px&nbsp;solid&nbsp;#CCCCCC;width:350px;align:center</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">s:form&nbsp;action</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">myTagAction!submit.action</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;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">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">s:checkbox&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">chk</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;label</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">chk..</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;value</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">ab</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;title</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">A<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;姓名</span><span style="color: #000000">&lt;</span><span style="color: #000000">s:textfield&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">fname</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;label</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">&nbsp;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;&lt;</span><span style="color: #000000">br</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">s:checkboxlist&nbsp;list</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">chklist</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">selchk</span><span style="color: #000000">"</span><span style="color: #000000">/&gt;&lt;</span><span style="color: #000000">br</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">s:combobox&nbsp;list</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">years</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">year</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;maxlength</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">2</span><span style="color: #000000">"</span><span style="color: #000000">&gt;&lt;/</span><span style="color: #000000">s:combobox</span><span style="color: #000000">&gt;&lt;</span><span style="color: #000000">br</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;!--</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">s:datepicker&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">date</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">date</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;format</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">%Y-%m-%e</span><span style="color: #000000">"</span><span style="color: #000000">/&gt;&lt;</span><span style="color: #000000">br</span><span style="color: #000000">&gt;--&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">s:hidden&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">vvname</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;value</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">hidden标签测试</span><span style="color: #000000">"</span><span style="color: #000000">/&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">s:label&nbsp;label</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">%{text('kk')}</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">kk</span><span style="color: #000000">"</span><span style="color: #000000">/&gt;&lt;</span><span style="color: #000000">br</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">s:radio&nbsp;list</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">chklist</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">selchk</span><span style="color: #000000">"</span><span style="color: #000000">&gt;&lt;/</span><span style="color: #000000">s:radio</span><span style="color: #000000">&gt;&lt;</span><span style="color: #000000">br</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">s:select&nbsp;list</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">citylist</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">city</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;listKey</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">local_net</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;listValue</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">city_name</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">s:select</span><span style="color: #000000">&gt;&lt;</span><span style="color: #000000">br</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">s:textarea&nbsp;label</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">Comments</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">kk</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;cols</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">10</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;rows</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">3</span><span style="color: #000000">"</span><span style="color: #000000">/&gt;&lt;</span><span style="color: #000000">br</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">s:submit&nbsp;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;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">s:form</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;/</span><span style="color: #000000">div</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;/</span><span style="color: #000000">body</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;/</span><span style="color: #000000">html</span><span style="color: #000000">&gt;</span></div>
<br />
Action代码<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;one;<br />
<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.opensymphony.xwork2.ActionSupport;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;com.opensymphony.xwork2.ModelDriven;<br />
<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;domain.City;<br />
<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
<br />
<br />
<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TagAction&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;ActionSupport&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;List&nbsp;citylist;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;city;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;chk;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;fname;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Map&nbsp;chklist;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;selchk[];<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;year;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;List&nbsp;years;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Date&nbsp;date;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;vvname;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;kk;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;execute()</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.SUCCESS;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;submit()</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">chk=</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">chk);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">city=</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">city);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">fname=</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">fname);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">selchk=</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">selchk.length);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">selchk.length;i</span><span style="color: #000000">++</span><span style="color: #000000">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(selchk[i]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">vvname=</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">vvname);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.INPUT;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;TagAction(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;citylist&nbsp;</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;citylist.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;City(</span><span style="color: #000000">"</span><span style="color: #000000">510</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">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;citylist.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;City(</span><span style="color: #000000">"</span><span style="color: #000000">530</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">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;citylist.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;City(</span><span style="color: #000000">"</span><span style="color: #000000">550</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">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chklist&nbsp;</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;HashMap();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chklist.put(</span><span style="color: #000000">"</span><span style="color: #000000">zh</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">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chklist.put(</span><span style="color: #000000">"</span><span style="color: #000000">en</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">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chklist.put(</span><span style="color: #000000">"</span><span style="color: #000000">eg</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">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chklist.put(</span><span style="color: #000000">"</span><span style="color: #000000">jp</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">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;years</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;years.add(</span><span style="color: #000000">"</span><span style="color: #000000">2001</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;years.add(</span><span style="color: #000000">"</span><span style="color: #000000">2002</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;years.add(</span><span style="color: #000000">"</span><span style="color: #000000">2003</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;years.add(</span><span style="color: #000000">"</span><span style="color: #000000">2004</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;years.add(</span><span style="color: #000000">"</span><span style="color: #000000">2005</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;years.add(</span><span style="color: #000000">"</span><span style="color: #000000">2006</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;isChk()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;chk;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setChk(</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;chk)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.chk&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;chk;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;List&nbsp;getCitylist()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;citylist;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setCitylist(List&nbsp;citylist)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.citylist&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;citylist;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getFname()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;fname;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setFname(String&nbsp;fname)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.fname&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;fname;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getCity()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;city;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setCity(String&nbsp;city)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.city&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;city;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String[]&nbsp;getSelchk()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;selchk;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setSelchk(String[]&nbsp;selchk)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.selchk&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;selchk;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Map&nbsp;getChklist()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;chklist;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setChklist(Map&nbsp;chklist)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.chklist&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;chklist;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getYear()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;year;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setYear(String&nbsp;year)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.year&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;year;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;List&nbsp;getYears()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;years;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setYears(List&nbsp;years)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.years&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;years;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Date&nbsp;getDate()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;date;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setDate(Date&nbsp;date)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.date&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;date;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getVvname()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;vvname;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setVvname(String&nbsp;vvname)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.vvname&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;vvname;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getKk()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;kk;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setKk(String&nbsp;kk)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.kk&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;kk;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
}<br />
</span></div>
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">action&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="myTagAction!*"</span><span style="color: #ff0000">&nbsp;method</span><span style="color: #0000ff">="{1}"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="one.TagAction"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="input"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/tag_1.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/tag_1.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action</span><span style="color: #0000ff">&gt;</span></div>
<br />
没有任何语言上的解析，详细文档，请参考：<br />
http://www.blogjava.net/pdw2009/archive/2007/04/06/108935.html
<img src ="http://www.blogjava.net/pdw2009/aggbug/155356.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-10-23 17:52 <a href="http://www.blogjava.net/pdw2009/archive/2007/10/23/155356.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一些优秀的自己却没用的小开源项目，</title><link>http://www.blogjava.net/pdw2009/archive/2007/10/11/152019.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Thu, 11 Oct 2007 05:57:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/10/11/152019.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/152019.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/10/11/152019.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/152019.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/152019.html</trackback:ping><description><![CDATA[Jettison&nbsp;&nbsp; <a href="http://jettison.codehaus.org/">http://jettison.codehaus.org/</a>&nbsp;&nbsp; json解析器，扣说xfire也使用了它&nbsp; <br />
XStream&nbsp;<a href="http://xstream.codehaus.org/">http://xstream.codehaus.org/</a>&nbsp; xml/json和java对象互换&nbsp;&nbsp;<br />
<br />
<font color="#c60a00">Hessian</font>&nbsp;&nbsp;&nbsp; <a href="http://www.caucho.com/hessian">http://www.caucho.com/<font color="#c60a00">hessian</a>&nbsp;&nbsp;&nbsp; 一种高效的RPC编程方式,Resin就是该出品的</font>
<img src ="http://www.blogjava.net/pdw2009/aggbug/152019.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-10-11 13:57 <a href="http://www.blogjava.net/pdw2009/archive/2007/10/11/152019.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>window下tomcat集群和负载均衡(转)</title><link>http://www.blogjava.net/pdw2009/archive/2007/08/03/134353.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Fri, 03 Aug 2007 15:53:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/08/03/134353.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/134353.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/08/03/134353.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/134353.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/134353.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; 在企业级应用中，采用Tomcat作为应用服务器的系统不在少数，但是Tomcat作为轻量级应用服务器，它的负载能力确实有限，在系统上线后不堪重负，这时候人们都会想起集群来，可惜以往的版本做起集群来，实在不方便得很。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Tomcat5.5在这方面作了很大的改进，我们首先可以实现Tomcat5.5的集群。<br>&nbsp;<br>一、配置Tomcat<br>1、直接将下载的apache-tomcat-5.5.17.zip解压缩到一个驱动器根目录下，将目录名改为Tomcat5517_S1，作为集群的第一个Tomcat服务器。<br>2、删除Tomcat5517_S1\ webapps、Tomcat5517_S1\temp下的所有内容。<br>3、在Tomcat5517_S1\conf\Catalina\localhost下建立ROOT.xml文件（注意：一定要用ROOT.xml这个文件名）。添加内容：<br>&lt;Context path="" docBase="发布路径" displayName="Tomcat_1"<br>&nbsp; debug="0" privileged="true"&gt;<br>&nbsp;<br>&nbsp;&nbsp;&nbsp; &lt;!-- Default set of monitored resources --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;WatchedResource&gt;WEB-INF/web.xml&lt;/WatchedResource&gt;<br>&lt;/Context&gt;<br>&nbsp;<br>4、确认你的应用发布没有问题的情况下，运行Tomcat5517_S1\bin中的Startup.bat。<br>5、在浏览器中访问：<a href="http://localhost:8080/" target=_blank><u><font color=#0000ff>http://localhost:8080</font></u></a>，你的应用应该可以在此Tomcat中成功发布了。<br>这里要注意的是：<br>如果你的系统中使用了Taglib尤其是c.tld，请下载最新版本的jakarta-taglibs-standard-1.1.2.zip，从中取得standard.jar、jstl.jar和c.tld，放在相应的目录下，然后修改web.xml：<br>&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "<a href="http://java.sun.com/dtd/web-app_2_3.dtd" target=_blank><u><font color=#0000ff>http://java.sun.com/dtd/web-app_2_3.dtd</font></u></a>"&gt;<br>&nbsp;<br>&lt;web-app xmlns="<a href="http://java.sun.com/xml/ns/j2ee" target=_blank><u><font color=#0000ff>http://java.sun.com/xml/ns/j2ee</font></u></a>"<br>&nbsp;&nbsp;&nbsp; xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance" target=_blank><u><font color=#0000ff>http://www.w3.org/2001/XMLSchema-instance</font></u></a>"<br>&nbsp;&nbsp;&nbsp; xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/j2ee" target=_blank><u><font color=#0000ff>http://java.sun.com/xml/ns/j2ee</font></u></a> <a href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" target=_blank><u><font color=#0000ff>http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</font></u></a>"<br>&nbsp;&nbsp;&nbsp; version="2.4"&gt;<br>&lt;/web-app&gt;<br>&nbsp;<br>其中所有的<br>&nbsp; &lt;taglib&gt;<br>&nbsp;&nbsp;&nbsp; &lt;taglib-uri&gt;/WEB-INF/struts-html.tld&lt;/taglib-uri&gt;<br>&nbsp;&nbsp;&nbsp; &lt;taglib-location&gt;/WEB-INF/struts-html.tld&lt;/taglib-location&gt;<br>&nbsp; &lt;/taglib&gt;<br>&nbsp;<br>要放在&lt;jsp-config&gt;元素中，像这样：<br>&lt;jsp-config&gt;<br>&nbsp;&nbsp; &lt;taglib&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;taglib-uri&gt;/WEB-INF/struts-template.tld&lt;/taglib-uri&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;taglib-location&gt;/WEB-INF/struts-template.tld&lt;/taglib-location&gt;<br>&nbsp;&nbsp; &lt;/taglib&gt;<br>&nbsp;&nbsp; &lt;taglib&gt;<br>&lt;taglib-uri&gt;/WEB-INF/c.tld&lt;/taglib-uri&gt;<br>&lt;taglib-location&gt;/WEB-INF/c.tld&lt;/taglib-location&gt;<br>&nbsp;&nbsp; &lt;/taglib&gt;<br>&lt;/jsp-config&gt; <br><br><span class=content>
<p>二、配置同一台机器中的Tomcat集群<br>1、将Tomcat5517_S1\ Catalina文件夹改名为Tomcat5517_S1\ Standalone，然后打开Tomcat5517_S1\conf\server.xml，修改几个关键的地方。<br>★ 远程关闭Tomcat的服务端口，原来是8005，改为10005。<br>★ 两个对外服务的Connector的端口：Http协议端口原来是8080，改为10001；AJP1.3协议端口原来是8009，改为10009。（这 里要注意的是在开始的调试阶段我们保持http协议端口的打开状态，用于浏览器直接与此Tomcat连接，等到调试成功后，所有的客户端只允许通过 apache访问，我们就要将提供Http协议的Connector关掉。）其中的redirectPort我都改成了10043。<br>★ 将原来的：&lt;Engine name="Catalina" defaultHost="localhost"&gt;注释掉，打开它上面的：&lt;Engine name="Standalone" defaultHost="localhost" jvmRoute="Tomcat1"&gt;，并且将jvmRoute的值改为Tomcat1。<br>★ 打开Cluster元素的注释，并且将Receiver元素的监听端口tcpListenPort改为10011。<br>2、修改Web.xml，加上&lt;distributable/&gt;，如下：<br>&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "<a href="http://java.sun.com/dtd/web-app_2_3.dtd" target=_blank><u><font color=#0000ff>http://java.sun.com/dtd/web-app_2_3.dtd</font></u></a>"&gt;<br>&nbsp;<br>&lt;web-app xmlns="<a href="http://java.sun.com/xml/ns/j2ee" target=_blank><u><font color=#0000ff>http://java.sun.com/xml/ns/j2ee</font></u></a>"<br>&nbsp;xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance" target=_blank><u><font color=#0000ff>http://www.w3.org/2001/XMLSchema-instance</font></u></a>"<br>&nbsp;xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/j2ee" target=_blank><u><font color=#0000ff>http://java.sun.com/xml/ns/j2ee</font></u></a> <a href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" target=_blank><u><font color=#0000ff>http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</font></u></a>"<br>&nbsp;version="2.4"&gt;<br>&nbsp;&lt;distributable/&gt;<br>&lt;/web-app&gt;<br>&nbsp;<br>然后启动此Tomcat,可以看到有这样的提示信息：<br>2006-6-28 13:33:57 org.apache.catalina.cluster.tcp.SimpleTcpCluster start<br>信息: Cluster is about to start<br>2006-6-28 13:33:57 org.apache.catalina.cluster.tcp.ReplicationTransmitter start<br>信息: Start ClusterSender at cluster Standalone:type=Cluster,host=localhost with name Standalone:type=ClusterSender,host=localhost<br>2006-6-28 13:33:57 org.apache.catalina.cluster.mcast.McastService start<br>信息: Sleeping for 2000 milliseconds to establish cluster membership<br>2006-6-28 13:33:59 org.apache.catalina.cluster.mcast.McastService registerMBean<br>信息: membership mbean registered (Standalone:type=ClusterMembership,host=localhost)<br>2006-6-28 13:33:59 org.apache.catalina.cluster.deploy.FarmWarDeployer start<br>信息: Cluster FarmWarDeployer started.<br>2006-6-28 13:34:30 org.apache.coyote.http11.Http11BaseProtocol start<br>信息: Starting Coyote HTTP/1.1 on http-10001<br>2006-6-28 13:34:30 org.apache.jk.common.ChannelSocket init<br>信息: JK: ajp13 listening on /0.0.0.0:10009<br>2006-6-28 13:34:30 org.apache.jk.server.JkMain start<br>信息: Jk running ID=0 time=0/141&nbsp; config=null<br>&nbsp;<br>这表示Tomcat集群正常启动了。<br>3、复制Tomcat5517_S1文件夹，并更名为Tomcat5517_S2；然后修改Tomcat5517_S1\conf\server.xml，修改内容同上，要注意的是端口的修改：<br>★ 远程关闭Tomcat的服务端口，原来是8005，改为20005。<br>★ 两个对外服务的Connector的端口：Http协议端口原来是8080，改为20001；AJP1.3协议端口原来是8009，改为20009。其中的redirectPort我都改成了20043。<br>★ 将原来的：&lt;Engine name="Catalina" defaultHost="localhost"&gt;注释掉，打开它上面的：&lt;Engine name="Standalone" defaultHost="localhost" jvmRoute="Tomcat2"&gt;，并且将jvmRoute的值改为Tomcat2。<br>★ 打开Cluster元素的注释，并且将Receiver元素的监听端口tcpListenPort改为20011。<br>启动Tomcat2，可以看到有如下提示：<br>在Tomcat1中：<br>2006-6-28 14:25:46 org.apache.catalina.cluster.tcp.SimpleTcpCluster memberAdded<br>信 息: Replication member added:org.apache.catalina.cluster.mcast.McastMember[tcp://192.168.1.192:20011,catalina,192.168.1.192,20011, alive=40]<br>&nbsp;<br>在Tomcat2中：<br>2006-6-28 14:25:44 org.apache.catalina.cluster.tcp.SimpleTcpCluster memberAdded<br>信 息: Replication member added:org.apache.catalina.cluster.mcast.McastMember[tcp://192.168.1.192:10011,catalina,192.168.1.192,10011, alive=3105085]<br>&nbsp;<br>这表示两个Tomcat已经建立了集群，并保持Session同步了<br><br><span class=content>
<p>三、配置Apache</p>
<p>Apache2.2提供了最新的mod_proxy_balancer模块，这是我们这次实践过程中完成负载均衡的利器。安装完Apache之后，直接打开conf\httpd.conf文件：</p>
<p>★ 打开必要的模块：<br>LoadModule proxy_module modules/mod_proxy.so<br>LoadModule proxy_ajp_module modules/mod_proxy_ajp.so<br>LoadModule proxy_balancer_module modules/mod_proxy_balancer.so<br>LoadModule proxy_http_module modules/mod_proxy_http.so</p>
<p>★ 在httpd.conf的最后加上：</p>
<p>ProxyRequests Off</p>
<p>ProxyPass / balancer://myCluster/<br>&lt;Proxy balancer://myCluster/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BalancerMember ajp://localhost:10009 route=Tomcat1 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BalancerMember ajp://localhost:20009 route=Tomcat2 <br>&lt;/Proxy&gt;</p>
<p>然后启动apache，开始测试你的应用在集群环境下的表现吧！</p>
</span>
<p>&#160;</p>
</span><br>
<img src ="http://www.blogjava.net/pdw2009/aggbug/134353.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-08-03 23:53 <a href="http://www.blogjava.net/pdw2009/archive/2007/08/03/134353.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xwork配置详述</title><link>http://www.blogjava.net/pdw2009/archive/2007/04/06/108995.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Fri, 06 Apr 2007 10:36:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/04/06/108995.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/108995.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/04/06/108995.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/108995.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/108995.html</trackback:ping><description><![CDATA[&nbsp;
<h2><a name=_Toc76287483></a><a name=_Toc75838950><span><span>XWork</span></span></a><span><span><span>配置详述</span></span></span></h2>
<p><span>XWork</span><span>配置文件是以&#8220;</span><span>xwork</span><span>&#8221;命名的</span><span>.xml</span><span>文件，它必需放到类路径（</span><span>classPath</span><span>）的根目录，</span> <span>Web</span><span>应用一般放在</span><span>classes</span><span>目录中，它需要遵守</span><span>DTD</span><span>的规范（现在是</span><span>xwork-1.0.dtd</span><span>）。这个文件定义了我们的</span><span>Action</span><span>，</span><span>Interceptor</span><span>，</span><span>Result</span><span>的配置和相互之间的映射。下面我们看看用户注册的完整</span><span>XWork</span><span>配置文件：</span></p>
<p><span>&lt;!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd"&gt;</span></p>
<p>&nbsp;</p>
<p><span>&lt;xwork&gt;</span></p>
<p>&nbsp;</p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;include file="webwork-default.xml"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;package name="example" extends="webwork-default"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;action name="register" class="example.register.RegisterAction" &gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;result name="success" type="dispatcher"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;param name="location"&gt;/register-result.jsp&lt;/param&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/result&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;interceptor-ref name="params"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/action&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;action name="registersupport" class="example.register.RegisterActionSupport" &gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;result name="success" type="dispatcher"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;param name="location"&gt;/register-result.jsp&lt;/param&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/result&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;result name="input" type="dispatcher"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;param name="location"&gt;/registerSupport.jsp&lt;/param&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/result&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;interceptor-ref name="validationWorkflowStack"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/action&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;/package&gt;</span></p>
<p>&nbsp;</p>
<p><span>&lt;/xwork&gt;</span></p>
<h3><a name=_Toc76287484></a><a name=_Toc75838951><span><span>xwork.xml</span></span></a><span><span><span>文件的标签元素</span></span></span></h3>
<p><strong><span>Xwork</span></strong><strong><span>：</span></strong><span>xwork</span><span>配置文件的所有内容，都是定义在</span><span>&lt;xwork&gt;</span><span>标签中，它的直接子标签有</span><span>&lt;package&gt;</span><span>和</span><span>&lt;include&gt;</span><span>。</span></p>
<p><strong><span>Package</span></strong><strong><span>：</span></strong><span>我们的</span><span>Action</span><span>，</span><span>Interceptor</span><span>，</span><span>Result</span><span>都是在此标签中定义。</span><span>&lt;package&gt;</span><span>标签有一个必需的属性&#8220;</span><span>name</span><span>&#8221;，它用来标识唯一的一个</span><span>package</span><span>。属性&#8220;</span><span>extends</span><span>&#8221;是可选的，它用来继承前面定义的一个或一个以上</span><span>package</span><span>配置信息，包括所有的</span><span>interceptor</span><span>、</span><span>interceptor-stack</span><span>和</span><span>action</span><span>的配置信息。注意，配置文件按文档的顺序，由上向下执行，因此，用&#8220;</span><span>extends</span><span>&#8221;引用的</span><span>package</span><span>必需在引用之前定义。属性&#8220;</span><span>sbstract</span><span>&#8221;是可选的，它用来设置</span><span>package</span><span>为抽象的</span><span>package</span><span>，它可以被继承同时它的</span><span>Action</span><span>配置信息在运行时将不可见。</span></p>
<p><span>属性</span><span>namespace</span><span>也是可选的，它用来分隔不同</span><span>package</span><span>定义的</span><span>action</span><span>，让这些</span><span>action</span><span>处于不同的命名空间（</span><span>namespaces</span><span>）。这样，我们不同的</span><span>package</span><span>可以有相同的</span><span>action</span><span>命名，因为可以通过命名空间来区分。如果不指定</span><span>namespace</span><span>，默认的是空字符串。命名空间也可以被用在安全控制方面，它可以根据不同的命名空间指定不同的访问权限。</span></p>
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td vAlign=top width=79>
            <p><strong><span>属</span> </strong><strong><span>性</span></strong></p>
            </td>
            <td vAlign=top width=72>
            <p><strong><span>是否必需</span></strong></p>
            </td>
            <td vAlign=top width=417>
            <p><strong><span>描</span><span><span>&nbsp;&nbsp; </span></span></strong><strong><span>述</span></strong></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=79>
            <p><span>name</span></p>
            </td>
            <td vAlign=top width=72>
            <p><span>是</span></p>
            </td>
            <td vAlign=top width=417>
            <p><span>用来标识</span><span>package</span><span>的名称</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=79>
            <p><span>extends</span></p>
            </td>
            <td vAlign=top width=72>
            <p><span>否</span></p>
            </td>
            <td vAlign=top width=417>
            <p><span>继承它所扩展的</span><span>package</span><span>配置信息</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=79>
            <p><span>namespace</span></p>
            </td>
            <td vAlign=top width=72>
            <p><span>否</span></p>
            </td>
            <td vAlign=top width=417>
            <p><span>指定</span><span>package</span><span>的命名空间，默认是</span><span>&#8221;&#8221;</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=79>
            <p><span>abstract</span></p>
            </td>
            <td vAlign=top width=72>
            <p><span>否</span></p>
            </td>
            <td vAlign=top width=417>
            <p><span>声明</span><span>package</span><span>是抽象的</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>
<p><strong><span>Result-type</span></strong><strong><span>：</span></strong><span>用来定义输出结果类型的</span><span>Class</span><span>，它用简单的名－值对来定义。当然，我们自己写的输出结果类型也必需在这里定义。例如：</span></p>
<p><span>&lt;result-type name="dispatcher" class="com.opensymphony.webwork.dispatcher.ServletDispatcherResult" default="true"/&gt;</span><span>，</span><span>default="true"</span><span>表示如果在</span><span>Action</span><span>的</span><span>result</span><span>中不指定</span><span>result-type</span><span>，就使用这个默认的</span><span>result-type</span><span>。</span></p>
<p>&nbsp;</p>
<p><strong><span>Interceptors</span></strong><strong><span>：</span></strong><span>它是一个简单的</span><span>&lt;interceptors&gt; &nbsp;&lt;interceptors/&gt;</span><span>标签，我们的</span><span>interceptor</span><span>和</span><span>interceptor-stack</span><span>都在此标签内定义。</span></p>
<p>&nbsp;</p>
<p><strong><span>Interceptor</span></strong><strong><span>：</span></strong><span>当然，就是用来定义我们的拦截器。它的定义非常简单，名－值对的形式。例如：</span><span>&lt;interceptor</span><span> <span>name=</span><span>"timer"</span> <span>class=</span><span>"com.opensymphony.xwork.interceptor.TimerInterceptor"</span><span>/&gt;</span></span><span>。在</span><span>action</span><span>中，可以通过</span><span>&lt;interceptor-ref /&gt;</span><span>来直接引用前面定义了的拦截器。</span></p>
<p>&nbsp;</p>
<p><strong><span>Interceptor-stack</span></strong><strong><span>：</span></strong><span>用来将上面定义的</span><span>interceptor</span><span>组织成堆栈的形式，这样我们就可以创建一组标准的</span><span>interceptor</span><span>，让它按照顺序执行。在我们的</span><span>Action</span><span>中直接引用这个</span><span>interceptor</span><span>堆栈就可以了，不用逐个</span><span>interceptor</span><span>去引用。</span></p>
<p><span>例如：</span></p>
<p align=left><span>&lt;interceptor-stack</span><span> <span>name=</span><span>"validationWorkflowStack"</span><span>&gt;</span></span></p>
<p align=left><span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>&lt;interceptor-ref</span> <span>name=</span><span>"defaultStack"</span><span>/&gt;</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&lt;interceptor-ref</span> <span>name=</span><span>"validation"</span><span>/&gt;</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&lt;interceptor-ref</span> <span>name=</span><span>"workflow"</span><span>/&gt;</span></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&lt;/interceptor-stack&gt;</span></span></p>
<p><span>Interceptor Param</span><span>：我们的</span><span>interceptor</span><span>是在</span><span>ActionConfig</span><span>级别被实例化和存储的，也就是说一个</span><span>Action</span><span>引用的每个</span><span>interceptor</span><span>都会有相应的实例。这样，我们在定义和引用</span><span>interceptor</span><span>的时候都可以为它设置相应的参数值。例如：</span></p>
<p><span>&lt;interceptor name="test" class="com.opensymphony.xwork.TestInterceptor"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;param name="foo"&gt;expectedFoo&lt;/param&gt;</span></p>
<p><span>&lt;/interceptor&gt;</span></p>
<p><span>在</span><span>Action</span><span>或</span><span>Interceptor-stack</span><span>中引用时也可以设置参数，例如：</span></p>
<p><span>&lt;interceptor-ref name="test"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;param name="expectedFoo"&gt;expectedFoo&lt;/param&gt;</span></p>
<p><span>&lt;/interceptor-ref&gt;</span></p>
<p><span>注意：在</span><span>Action</span><span>引用的时候，如果引用的是</span><span>Interceptor-stack</span><span>，则不允许设置参数，否则会报错。</span></p>
<p>&nbsp;</p>
<p><strong><span>Global-results</span></strong><strong><span>：</span></strong><span>它允许我们定义全局的输出结果（</span><span>global result</span><span>），比如登陆页面、操作错误处理页面。只要继承它所在的</span><span>package</span><span>，这些输出结果都是可见的。</span></p>
<p><span>例如：</span></p>
<p align=left><span>&lt;global-results&gt;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&lt;result</span> <span>name=</span><span>"login"</span> <span>type=</span><span>"dispatcher"</span><span>&gt;</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&lt;param</span> <span>name=</span><span>"location"</span><span>&gt;</span><span>/login.jsp</span><span>&lt;/param&gt;</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&lt;/result&gt;</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&lt;result</span> <span>name=</span><span>"error"</span> <span>type=</span><span>"dispatcher"</span><span>&gt;</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&lt;param</span> <span>name=</span><span>"location"</span><span>&gt;</span><span>/error.jsp</span><span>&lt;/param&gt;</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&lt;/result&gt;</span></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&lt;/global-results&gt;</span></span></p>
<p><span>如果我们的</span><span>Action</span><span>执行完返回&#8220;</span><span>login</span><span>&#8221;，它将调用上面的这个输出结果，将输出派遣到根目录下的</span><span>login.jsp</span><span>页面。</span></p>
<p>&nbsp;</p>
<p><strong><span>Action</span></strong><strong><span>：</span></strong><span>用来配置</span><span>Action</span><span>的名称（</span><span>name</span><span>）和它对应的</span><span>Class</span><span>。我们将通过这个</span><span>Action</span><span>的名称和它所在</span><span>package</span><span>的</span><span>namespace</span><span>去配置文件中取得这个</span><span>Action</span><span>的配置信息。它可以通过</span><span>&lt;param&gt;</span><span>来设置参数，</span><span>Action</span><span>在执行的时候会取得配置文件里设置的参数（通过拦截器</span><span>StaticParametersInterceptor</span><span>）。</span></p>
<p><span>Action</span><span>可以配置一个或多个输出结果</span><span>(result)</span><span>。一个输出结果的名称，对应于</span><span>Action</span><span>执行完成返回的字符串。</span><span>&lt;result&gt;</span><span>标签的</span><span>type</span><span>属性，对应我们前面定义过的</span><span>result-type</span><span>，说明</span><span>reslut</span><span>的类型。例如：</span></p>
<p><span>&lt;action name="register" class="example.register.RegisterAction" &gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;result name="success" type="dispatcher"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;param name="location"&gt;/register-result.jsp&lt;/param&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/result&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;interceptor-ref name="params"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/action&gt;</span></p>
<p><span>当然，我们的</span><span>Action</span><span>用到的拦截器也是在这里配置的，通过</span><span>&lt;interceptor-ref&gt;</span><span>标签，属性&#8220;</span><span>name</span><span>&#8221;的值，对应前面定义的</span><span>interceptor</span><span>或</span><span>interceptor-stack</span><span>。</span><span>如果</span><span>Action</span><span>中没有用</span><span>&lt;interceptor-ref&gt;</span><span>标签指定拦截器，它将使用默认的</span><span>&lt;default-interceptor-ref</span><span>&gt;</span><span>标签定义的拦截器。</span></p>
<p>&nbsp;</p>
<p><strong><span>Include</span></strong><strong><span>：</span></strong><span>xwork..xml</span><span>文件可以被分成好几个不同的文件，</span><span>xwork..xml</span><span>通过</span><span>&lt;include&gt;</span><span>标签引用被包含的文件，例如：</span><span>&lt;include file="webwork-default.xml"/&gt;</span><span>。被包含的文件必需是</span><span>package</span><span>标签里的内容，我们看看</span><span>&lt;include&gt;</span><span>标签在配置文件里的位置就知道了。如果要继承被包含文件的</span><span>package</span><span>，我们必需将</span><span>&lt;include&gt;</span><span>标签放在其上面，因为配置文件是按照由上而下的顺序解析的。</span></p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/108995.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-04-06 18:36 <a href="http://www.blogjava.net/pdw2009/archive/2007/04/06/108995.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2表单标签(转)</title><link>http://www.blogjava.net/pdw2009/archive/2007/04/06/108935.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Fri, 06 Apr 2007 06:40:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/04/06/108935.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/108935.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/04/06/108935.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/108935.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/108935.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JavaScud | Forum | JIRA | Blog |                                                                                                 &nbsp;                         function sho...&nbsp;&nbsp;<a href='http://www.blogjava.net/pdw2009/archive/2007/04/06/108935.html'>阅读全文</a><img src ="http://www.blogjava.net/pdw2009/aggbug/108935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-04-06 14:40 <a href="http://www.blogjava.net/pdw2009/archive/2007/04/06/108935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2数据标签</title><link>http://www.blogjava.net/pdw2009/archive/2007/04/06/108890.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Fri, 06 Apr 2007 04:28:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/04/06/108890.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/108890.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/04/06/108890.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/108890.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/108890.html</trackback:ping><description><![CDATA[Data标签用来提供各种数据相关的功能.范围从显示一个action的直接结果,到获取本地化的数值等.<br>
<ol>
    <li><a title=action href="http://wiki.javascud.org/display/ww2cndoc/action">action</a> <br>通过指定命名空间和action名称,该标签允许你在jsp页面直接调用Action. 标签体用来渲染Action执行结果. 除非你设定了executeResult参数为true,否则你在xwork.xml中为该Action指定的Result Processor不会执行.<br>
    <table class=confluenceTable style="BORDER-RIGHT: #c0c0c0 1px; BORDER-TOP: #c0c0c0 1px; BORDER-LEFT: #c0c0c0 1px; BORDER-BOTTOM: #c0c0c0 1px">
        <tbody>
            <tr>
                <th class=confluenceTh><strong>名称</strong></th>
                <th class=confluenceTh><strong>必填</strong></th>
                <th class=confluenceTh><strong>缺省</strong></th>
                <th class=confluenceTh><strong>类型</strong></th>
                <th class=confluenceTh><strong>描述</strong></th>
            </tr>
            <tr>
                <td class=confluenceTd>id</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>String</td>
                <td class=confluenceTd>如果设定,将作为该Action在栈中的标识</td>
            </tr>
            <tr>
                <td class=confluenceTd>name</td>
                <td class=confluenceTd>true</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>String</td>
                <td class=confluenceTd>action名字(不包括后缀,如.action)</td>
            </tr>
            <tr>
                <td class=confluenceTd>namespace</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>String</td>
                <td class=confluenceTd>action所在命名空间</td>
            </tr>
            <tr>
                <td class=confluenceTd>executeResult</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>Boolean</td>
                <td class=confluenceTd>Action的result是否需要被执行</td>
            </tr>
            <tr>
                <td class=confluenceTd>ignoreContextParams</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>Boolean</td>
                <td class=confluenceTd>request中的参数是否需要传入该Action</td>
            </tr>
        </tbody>
    </table>
    <li><a title=bean href="http://wiki.javascud.org/display/ww2cndoc/bean">bean</a> <br>
    <p>实例化一个符合JavaBeans规范的class,标签体内可以包含几个Param元素,用于调用setter方法给此class的属性赋值.如果是定了id属性,则该实例将会放到stack的context中.<br>
    <table class=confluenceTable>
        <tbody>
            <tr>
                <th class=confluenceTh><strong>名称</strong></th>
                <th class=confluenceTh><strong>必填</strong></th>
                <th class=confluenceTh><strong>缺省</strong></th>
                <th class=confluenceTh><strong>类型</strong></th>
                <th class=confluenceTh><strong>描述</strong></th>
            </tr>
            <tr>
                <td class=confluenceTd>name</td>
                <td class=confluenceTd>true</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>String</td>
                <td class=confluenceTd>要被实例化的class名字(必须符合JavaBeans规范)</td>
            </tr>
            <tr>
                <td class=confluenceTd>id</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>String/Object</td>
                <td class=confluenceTd>标识该元素</td>
            </tr>
        </tbody>
    </table>
    </p>
    <li><a title=debug href="http://wiki.javascud.org/display/ww2cndoc/debug">debug</a> <br>
    <li><a title=i18n href="http://wiki.javascud.org/display/ww2cndoc/i18n">i18n</a> <br>将某个特定resource bundle放入value stack. 然后通过text标签拿到相应message, 而不是仅限于绑定到当前action的bundle.<br>
    <table class=confluenceTable>
        <tbody>
            <tr>
                <th class=confluenceTh><strong>名称</strong></th>
                <th class=confluenceTh><strong>必填</strong></th>
                <th class=confluenceTh><strong>缺省</strong></th>
                <th class=confluenceTh><strong>类型</strong></th>
                <th class=confluenceTh><strong>描述</strong></th>
            </tr>
            <tr>
                <td class=confluenceTd>name</td>
                <td class=confluenceTd>true</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>String</td>
                <td class=confluenceTd>要使用的resource bundle.(如 foo/bar/customBundle)</td>
            </tr>
            <tr>
                <td class=confluenceTd>id</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>String/Object</td>
                <td class=confluenceTd>标识该元素</td>
            </tr>
        </tbody>
    </table>
    <li><a title=include href="http://wiki.javascud.org/display/ww2cndoc/include">include</a> <br>包含servlet的输出(servlet或JSP页面)<br>
    <table class=confluenceTable>
        <tbody>
            <tr>
                <th class=confluenceTh><strong>名称</strong></th>
                <th class=confluenceTh><strong>必填</strong></th>
                <th class=confluenceTh><strong>缺省</strong></th>
                <th class=confluenceTh><strong>类型</strong></th>
                <th class=confluenceTh><strong>描述</strong></th>
            </tr>
            <tr>
                <td class=confluenceTd>value</td>
                <td class=confluenceTd>true</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>String</td>
                <td class=confluenceTd>包含的jsp或servlet</td>
            </tr>
            <tr>
                <td class=confluenceTd>id</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>元素标识</td>
            </tr>
        </tbody>
    </table>
    例子:<br>&lt;ww:include value=<span class=code-quote>"myJsp.jsp"</span>&gt;<br>&nbsp;&nbsp; &lt;ww:param name=<span class=code-quote>"param1"</span> value=<span class=code-quote>"value2"</span> /&gt;<br>&nbsp;&nbsp; &lt;ww:param name=<span class=code-quote>"param2"</span> value=<span class=code-quote>"value2"</span> /&gt;<br>&lt;/ww:include&gt;<br><br><br>
    <li><a title=param href="http://wiki.javascud.org/display/ww2cndoc/param">param</a> <br>
    <p>为其他标签提供参数,比如include标签和bean标签.<br>参数的name属性是可选的,如果提供,会调用Component的方法addParameter(String, Object),如果不提供,则外层嵌套标签必须实现UnnamedParametric接口(如TextTag).</p>
    <p>该标签的两个属性 </p>
    <ul>
        <li>name (String) - 参数名
        <li>value (Object) - 参数值 <br>
        <p><strong>注意</strong> : value的提供有两种方式,通过value属性或者标签中间的text,不同之处我们看一下例子:</p>
        <div class=code>
        <div class=codeContent>
        <pre class=code-java>&lt;param name=<span class=code-quote>"color"</span>&gt;blue&lt;/param&gt; &lt;-- (A) --&gt;
        &lt;param name=<span class=code-quote>"color"</span> value=<span class=code-quote>"blue"</span>/&gt; &lt;-- (B) --&gt;</pre>
        </div>
        </div>
        <p>(A)中,参数值会以String的格式放入statck. (B)中该值会以java.lang.Object的格式放入statck.</p>
        </li>
    </ul>
    <li><a title=push href="http://wiki.javascud.org/display/ww2cndoc/push">push</a> <br>push值到堆栈中,方便应用.<br>
    <table class=confluenceTable>
        <tbody>
            <tr>
                <th class=confluenceTh><strong>名称</strong></th>
                <th class=confluenceTh><strong>必填</strong></th>
                <th class=confluenceTh><strong>缺省</strong></th>
                <th class=confluenceTh><strong>类型</strong></th>
                <th class=confluenceTh><strong>描述</strong></th>
            </tr>
            <tr>
                <td class=confluenceTd>value</td>
                <td class=confluenceTd>true</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>要push到堆栈中的值</td>
            </tr>
            <tr>
                <td class=confluenceTd>id</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>该元素标识</td>
            </tr>
        </tbody>
    </table>
    &lt;ww:push value=<span class=code-quote>"user"</span>&gt;<br>&nbsp;&nbsp;&nbsp; &lt;ww:propery value=<span class=code-quote>"firstName"</span> /&gt;<br>&nbsp;&nbsp;&nbsp; &lt;ww:propery value=<span class=code-quote>"lastName"</span> /&gt;<br>&lt;/ww:push&gt;<br><br>将user的值push到栈中,从而使property标签的能够获取user的属性(firstName, lastName etc)<br>
    <li><a title=set href="http://wiki.javascud.org/display/ww2cndoc/set">set</a> <br>set标签赋予变量一个特定范围内的值. 当希望给一个变量赋一个复杂的表达式,每次访问该变量而不是复杂的表达式时用到.其在两种情况下非常有用: 复杂的表达式很耗时 (性能提升) 或者很难理解 (代码可读性提高).<br>
    <table class=confluenceTable>
        <tbody>
            <tr>
                <th class=confluenceTh><strong>名称</strong></th>
                <th class=confluenceTh><strong>必填</strong></th>
                <th class=confluenceTh><strong>缺省</strong></th>
                <th class=confluenceTh><strong>类型</strong></th>
                <th class=confluenceTh><strong>描述</strong></th>
            </tr>
            <tr>
                <td class=confluenceTd>name</td>
                <td class=confluenceTd>true</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>String</td>
                <td class=confluenceTd>变量的名字</td>
            </tr>
            <tr>
                <td class=confluenceTd>scope</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>action</td>
                <td class=confluenceTd>String</td>
                <td class=confluenceTd>变量作用域,可以为application, session, request, page, 或action.</td>
            </tr>
            <tr>
                <td class=confluenceTd>value</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>将会赋给变量的值</td>
            </tr>
            <tr>
                <td class=confluenceTd>id</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>元素标识</td>
            </tr>
        </tbody>
    </table>
    <li>&lt;ww:set name=<span class=code-quote>"personName"</span> value=<span class=code-quote>"person.name"</span>/&gt;<br>Hello, &lt;ww:property value=<span class=code-quote>"#personName"</span>/&gt;. How are you?
    <li><a title=text href="http://wiki.javascud.org/display/ww2cndoc/text">text</a> <br>
    <p>支持国际化信息的标签</p>
    <p>国际化信息必须放在一个和当前action同名的resource bundle中,如果没有找到相应message,tag body将被当作默认message,如果没有tag body,message的name会被作为默认message<br>
    <table class=confluenceTable>
        <tbody>
            <tr>
                <th class=confluenceTh><strong>名称</strong></th>
                <th class=confluenceTh><strong>必填</strong></th>
                <th class=confluenceTh><strong>缺省</strong></th>
                <th class=confluenceTh><strong>类型</strong></th>
                <th class=confluenceTh><strong>描述</strong></th>
            </tr>
            <tr>
                <td class=confluenceTd>name</td>
                <td class=confluenceTd>true</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>资源属性的名字</td>
            </tr>
            <tr>
                <td class=confluenceTd>name</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>该元素标识</td>
            </tr>
        </tbody>
    </table>
    </p>
    <li><a title=url href="http://wiki.javascud.org/display/ww2cndoc/url">url</a> <br>
    <p>该标签用于创建url,可以通过"param"标签提供request参数.</p>
    <p>注意:<br>当includeParams的值时'all'或者'get', param标签中定义的参数将有优先权,也就是说其会覆盖其他同名参数的值.<br>
    <table class=confluenceTable>
        <tbody>
            <tr>
                <th class=confluenceTh><strong>名称</strong></th>
                <th class=confluenceTh><strong>必填</strong></th>
                <th class=confluenceTh><strong>缺省</strong></th>
                <th class=confluenceTh><strong>类型</strong></th>
                <th class=confluenceTh><strong>描述</strong></th>
            </tr>
            <tr>
                <td class=confluenceTd>includeParams</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>get</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>值为'none', 'get' 或'all'.</td>
            </tr>
            <tr>
                <td class=confluenceTd>scheme</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>scheme属性</td>
            </tr>
            <tr>
                <td class=confluenceTd>value</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>value如果不提供就用当前action</td>
            </tr>
            <tr>
                <td class=confluenceTd>action</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>用来生成url的action,如果没有则使用value</td>
            </tr>
            <tr>
                <td class=confluenceTd>namespace</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>命名空间</td>
            </tr>
            <tr>
                <td class=confluenceTd>method</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>使用的action的方法</td>
            </tr>
            <tr>
                <td class=confluenceTd>encode</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>true</td>
                <td class=confluenceTd>Boolean</td>
                <td class=confluenceTd>是否encode参数</td>
            </tr>
            <tr>
                <td class=confluenceTd>includeContext</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>true</td>
                <td class=confluenceTd>Boolean</td>
                <td class=confluenceTd>是否实际的上下文环境应该包含在url中</td>
            </tr>
            <tr>
                <td class=confluenceTd>portletMode</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>结果portlet 的模式(mode)</td>
            </tr>
            <tr>
                <td class=confluenceTd>windowState</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>结果portlet窗口的状态</td>
            </tr>
            <tr>
                <td class=confluenceTd>portletUrlType</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>指定这时一个 portlet 输出还是一个 action url</td>
            </tr>
            <tr>
                <td class=confluenceTd>anchor</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>URL的锚点( anchor)</td>
            </tr>
            <tr>
                <td class=confluenceTd>id</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>该元素标识</td>
            </tr>
        </tbody>
    </table>
    </p>
    <li>
    <p>&lt;ww:url value=<span class=code-quote>"editGadget.action"</span>&gt;<br>&nbsp;&nbsp;&nbsp; &lt;ww:param name=<span class=code-quote>"id"</span> value=<span class=code-quote>"%{selected}"</span> /&gt;<br>&lt;/ww:url&gt;</p>
    <li><a title=property href="http://wiki.javascud.org/display/ww2cndoc/property">property</a> <br>得到'value'的属性,如果value没提供,默认为堆栈顶端的元素.<br>
    <table class=confluenceTable>
        <tbody>
            <tr>
                <th class=confluenceTh><strong>名称</strong></th>
                <th class=confluenceTh><strong>必填</strong></th>
                <th class=confluenceTh><strong>缺省</strong></th>
                <th class=confluenceTh><strong>类型</strong></th>
                <th class=confluenceTh><strong>描述</strong></th>
            </tr>
            <tr>
                <td class=confluenceTd>default</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>String</td>
                <td class=confluenceTd>如果属性是null则显示的default值</td>
            </tr>
            <tr>
                <td class=confluenceTd>escape</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>true</td>
                <td class=confluenceTd>Boolean</td>
                <td class=confluenceTd>是否escape HTML</td>
            </tr>
            <tr>
                <td class=confluenceTd>value</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&lt;top of stack&gt;</td>
                <td class=confluenceTd>Object</td>
                <td class=confluenceTd>value to be displayed</td>
            </tr>
            <tr>
                <td class=confluenceTd>id</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>该元素标识</td>
            </tr>
        </tbody>
    </table>
    <br>
    <pre class=code-java>&lt;ww:push value=<span class=code-quote>"myBean"</span>&gt;
    &lt;!-- Example 1: --&gt;
    &lt;ww:property value=<span class=code-quote>"myBeanProperty"</span> /&gt;
    &lt;!-- Example 2: --&gt;
    &lt;ww:property value=<span class=code-quote>"myBeanProperty"</span> <span class=code-keyword>default</span>=<span class=code-quote>"a <span class=code-keyword>default</span> value"</span> /&gt;
    &lt;/ww:push&gt;</pre>
    </li>
</ol>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/108890.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-04-06 12:28 <a href="http://www.blogjava.net/pdw2009/archive/2007/04/06/108890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2控制标签</title><link>http://www.blogjava.net/pdw2009/archive/2007/04/06/108876.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Fri, 06 Apr 2007 03:21:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/04/06/108876.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/108876.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/04/06/108876.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/108876.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/108876.html</trackback:ping><description><![CDATA[<div>struts2可以直接使用jstl标签它的标签分为两大类了，近制标签和html标签和数据标签。以下是控制标签的用法：<br></div>
<ol>
    <li><a title=if href="http://wiki.javascud.org/display/ww2cndoc/if"><u><font color=#800080>if</font></u></a> <br>
    <p>基本的流程控制.'If'标签可单独使用也可以和'Else If'标签和(或)一个多个'Else'一起使用.<br>
    <table class=confluenceTable>
        <tbody>
            <tr>
                <th class=confluenceTh><strong>名称</strong></th>
                <th class=confluenceTh><strong>必填</strong></th>
                <th class=confluenceTh><strong>缺省</strong></th>
                <th class=confluenceTh><strong>类型</strong></th>
                <th class=confluenceTh><strong>描述</strong></th>
            </tr>
            <tr>
                <td class=confluenceTd>test</td>
                <td class=confluenceTd><strong>true</strong></td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Boolean</td>
                <td class=confluenceTd>决定If标签内容是否显示的表达式</td>
            </tr>
            <tr>
                <td class=confluenceTd>id</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>所指元素的Id. 对于UI和form标签此Id就作为所对应的html标签的id属性</td>
            </tr>
        </tbody>
    </table>
    <br></p>
    <li><a title=elseIf href="http://wiki.javascud.org/display/ww2cndoc/elseIf"><u><font color=#0000ff>elseIf / elseif</font></u></a> <br>基本的流程控制.'If'标签可单独使用也可以和'Else If'标签和(或)一个多个'Else'一起使用.<br>
    <table class=confluenceTable>
        <tbody>
            <tr>
                <th class=confluenceTh><strong>名称</strong></th>
                <th class=confluenceTh><strong>必填</strong></th>
                <th class=confluenceTh><strong>缺省</strong></th>
                <th class=confluenceTh><strong>类型</strong></th>
                <th class=confluenceTh><strong>描述</strong></th>
            </tr>
            <tr>
                <td class=confluenceTd>test</td>
                <td class=confluenceTd><strong>true</strong></td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Boolean</td>
                <td class=confluenceTd>决定If标签内容是否显示的表达式</td>
            </tr>
            <tr>
                <td class=confluenceTd>id</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>所指元素的Id. 对于UI和form标签此Id就作为所对应的html标签的id属性</td>
            </tr>
        </tbody>
    </table>
    <li><a title=else href="http://wiki.javascud.org/display/ww2cndoc/else"><u><font color=#0000ff>else</font></u></a> <br>
    <p>基本的流程控制.'If'标签可单独使用也可以和'Else If'标签和(或)一个多个'Else'一起使用.<br>
    <table class=confluenceTable>
        <tbody>
            <tr>
                <th class=confluenceTh><strong>名称</strong></th>
                <th class=confluenceTh><strong>必填</strong></th>
                <th class=confluenceTh><strong>缺省</strong></th>
                <th class=confluenceTh><strong>类型</strong></th>
                <th class=confluenceTh><strong>描述</strong></th>
            </tr>
            <tr>
                <td class=confluenceTd>id</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>所指元素的Id. 对于UI和form标签此Id就作为所对应的html标签的id属性</td>
            </tr>
        </tbody>
    </table>
    </p>
    <li><a title=append href="http://wiki.javascud.org/display/ww2cndoc/append"><u><font color=#800080>append</font></u></a> <br>
    <p>常和Iterator标签一起使用, 功能就是将不同的迭代器组合在一起,使一个迭代器迭代完成后转移到下一个迭代器中继续迭代.</p>
    <p>例如有三个迭代器组合在一起 (每一个迭代器有三个元素), 下面说明了新生成的迭代器中的元素是如何被迭代的;</p>
    <p>1. 第一个迭代器中的第一个元素<br>2. 第一个迭代器中的第二个元素<br>3. 第一个迭代器中的第三个元素<br>4. 第二个迭代器中的第一个元素<br>5. 第二个迭代器中的第二个元素<br>6. 第二个迭代器中的第三个元素<br>7. 第三个迭代器中的第一个元素<br>8. 第三个迭代器中的第二个元素<br>9. 第三个迭代器中的第三个元素<br>
    <table class=confluenceTable>
        <tbody>
            <tr>
                <th class=confluenceTh><strong>名称</strong></th>
                <th class=confluenceTh><strong>必填</strong></th>
                <th class=confluenceTh><strong>缺省</strong></th>
                <th class=confluenceTh><strong>类型</strong></th>
                <th class=confluenceTh><strong>描述</strong></th>
            </tr>
            <tr>
                <td class=confluenceTd>id </td>
                <td class=confluenceTd>false </td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String </td>
                <td class=confluenceTd>标明新产生的迭代器在stack context中的名字 </td>
            </tr>
        </tbody>
    </table>
    <br></p>
    <li><a title=generator href="http://wiki.javascud.org/display/ww2cndoc/generator"><u><font color=#800080>generator</font></u></a> <br>
    <p><strong>NOTE: JSP-TAG</strong><br>由val属性提供的值产生一个迭代器.</p>
    <p><strong>注意</strong>: 所产生的迭代器 <strong>总是</strong> 在value stack的顶端并在此标签结束后被pop出value statck<br><br></p>
    <table class=confluenceTable>
        <tbody>
            <tr>
                <th class=confluenceTh><strong>名称</strong></th>
                <th class=confluenceTh><strong>必填</strong></th>
                <th class=confluenceTh><strong>缺省</strong></th>
                <th class=confluenceTh><strong>类型</strong></th>
                <th class=confluenceTh><strong>描述</strong></th>
            </tr>
            <tr>
                <td class=confluenceTd>count </td>
                <td class=confluenceTd>false </td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Integer </td>
                <td class=confluenceTd>所生成迭代器中元素的数量 </td>
            </tr>
            <tr>
                <td class=confluenceTd>separator </td>
                <td class=confluenceTd>true </td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>String </td>
                <td class=confluenceTd>val属性中的分隔符 </td>
            </tr>
            <tr>
                <td class=confluenceTd>val </td>
                <td class=confluenceTd>true </td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>String/Object </td>
                <td class=confluenceTd>用于生成迭代器 </td>
            </tr>
            <tr>
                <td class=confluenceTd>converter </td>
                <td class=confluenceTd>false </td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>com.opensymphony.webwork.util.IteratorGenerator.Converter </td>
                <td class=confluenceTd>转换val属性提供的值转换为对象的转换器 </td>
            </tr>
            <tr>
                <td class=confluenceTd>id </td>
                <td class=confluenceTd>false </td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>String </td>
                <td class=confluenceTd>如果提供,将代表page context中生成的迭代器 </td>
            </tr>
        </tbody>
    </table>
    <li><a title=iterator href="http://wiki.javascud.org/display/ww2cndoc/iterator"><u><font color=#800080>iterator</font></u></a> <br>可以对java.util.Collection,java.util.Iterator类型的值进行迭代<br>
    <table class=confluenceTable>
        <tbody>
            <tr>
                <th class=confluenceTh><strong>名称</strong></th>
                <th class=confluenceTh><strong>必填</strong></th>
                <th class=confluenceTh><strong>缺省</strong></th>
                <th class=confluenceTh><strong>类型</strong></th>
                <th class=confluenceTh><strong>描述</strong></th>
            </tr>
            <tr>
                <td class=confluenceTd>status </td>
                <td class=confluenceTd>false </td>
                <td class=confluenceTd>false </td>
                <td class=confluenceTd>Boolean </td>
                <td class=confluenceTd>如果提供该属性 每次迭代时候将生成一个IteratorStatus实例并放入堆栈中 </td>
            </tr>
            <tr>
                <td class=confluenceTd>value </td>
                <td class=confluenceTd>false </td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String </td>
                <td class=confluenceTd>迭代源, 或者一个对象被放入最新创建的List </td>
            </tr>
            <tr>
                <td class=confluenceTd>id </td>
                <td class=confluenceTd>false </td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String </td>
                <td class=confluenceTd>element的id属性 </td>
            </tr>
        </tbody>
    </table>
    <li><a title=merge href="http://wiki.javascud.org/display/ww2cndoc/merge"><u><font color=#800080>merge</font></u></a> <br>
    <p>MergeIteratorTag的组件,作用是合并迭代器,合并后的迭代器迭代时依次调用每一个被合并的迭代器(除非这个迭代器已经迭代完毕)</p>
    <p>背后的工作是交给 MergeIteratorFilter完成的</p>
    <p>例如有三个list被合并,每一个有三个元素,以下就是调用顺序:</p>
    <p>1. 第一个list的第一个元素<br>2. 第二个list的第一个元素<br>3. 第三个list的第一个元素<br>4. 第一个list的第二个元素<br>5. 第二个list的第二个元素<br>6. 第三个list的第二个元素<br>7. 第一个list的第三个元素<br>8. 第二个list的第三个元素<br>9. 第三个list的第三个元素<br>
    <table class=confluenceTable>
        <tbody>
            <tr>
                <th class=confluenceTh><strong>名称</strong></th>
                <th class=confluenceTh><strong>必填</strong></th>
                <th class=confluenceTh><strong>缺省</strong></th>
                <th class=confluenceTh><strong>类型</strong></th>
                <th class=confluenceTh><strong>描述</strong></th>
            </tr>
            <tr>
                <td class=confluenceTd>id </td>
                <td class=confluenceTd>false </td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String </td>
                <td class=confluenceTd>标明新产生的迭代器在stack context中的名字 </td>
            </tr>
        </tbody>
    </table>
    </p>
    <li><a title=sort href="http://wiki.javascud.org/display/ww2cndoc/sort"><u><font color=#800080>sort</font></u></a> <br><strong>NOTE:JSP-TAG<br></strong>用传入的 Comparator对List进行排序.如果提供id属性,该属性作为排序后的list在PageContext中的标识. 排序后的list放在堆栈顶端,并在此tag结束后弹出.<br>
    <table class=confluenceTable>
        <tbody>
            <tr>
                <th class=confluenceTh><strong>名称</strong></th>
                <th class=confluenceTh><strong>必填</strong></th>
                <th class=confluenceTh><strong>缺省</strong></th>
                <th class=confluenceTh><strong>类型</strong></th>
                <th class=confluenceTh><strong>描述</strong></th>
            </tr>
            <tr>
                <td class=confluenceTd>comparator</td>
                <td class=confluenceTd>true</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>java.util.Comparator</td>
                <td class=confluenceTd>用来做比较的comparator</td>
            </tr>
            <tr>
                <td class=confluenceTd>source</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>迭代的内容来源</td>
            </tr>
            <tr>
                <td class=confluenceTd>id</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>String</td>
                <td class=confluenceTd>tag元素的id属性</td>
            </tr>
        </tbody>
    </table>
    <li><a title=subset href="http://wiki.javascud.org/display/ww2cndoc/subset"><u><font color=#800080>subset</font></u></a> <br>取一个迭代器的子集.内部实现是通过com.opensymphony.webwork.util.SubsetIteratorFilter.<br>
    <table class=confluenceTable>
        <tbody>
            <tr>
                <th class=confluenceTh><strong>名称</strong></th>
                <th class=confluenceTh><strong>必填</strong></th>
                <th class=confluenceTh><strong>缺省</strong></th>
                <th class=confluenceTh><strong>类型</strong></th>
                <th class=confluenceTh><strong>描述</strong></th>
            </tr>
            <tr>
                <td class=confluenceTd>count</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Integer</td>
                <td class=confluenceTd>子集中的元素个数</td>
            </tr>
            <tr>
                <td class=confluenceTd>source</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Object/String</td>
                <td class=confluenceTd>源集合</td>
            </tr>
            <tr>
                <td class=confluenceTd>start</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>Integer</td>
                <td class=confluenceTd>子集在源集合中的开始索引(如从0开始)</td>
            </tr>
            <tr>
                <td class=confluenceTd>decider</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>com.opensymphony.webwork.util.SubsetIteratorFilter.Decider</td>
                <td class=confluenceTd>用于判断是否某特定元素包含在子集中</td>
            </tr>
            <tr>
                <td class=confluenceTd>id</td>
                <td class=confluenceTd>false</td>
                <td class=confluenceTd>&nbsp;</td>
                <td class=confluenceTd>String</td>
                <td class=confluenceTd>标签元素的id属性</td>
            </tr>
        </tbody>
    </table>
    </li>
</ol>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/108876.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-04-06 11:21 <a href="http://www.blogjava.net/pdw2009/archive/2007/04/06/108876.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Sruts2标签</title><link>http://www.blogjava.net/pdw2009/archive/2007/03/25/106251.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Sun, 25 Mar 2007 09:34:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/03/25/106251.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/106251.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/03/25/106251.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/106251.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/106251.html</trackback:ping><description><![CDATA[
		<a href="http://www.360doc.com/showWeb/0/0/288655.aspx">http://www.360doc.com/showWeb/0/0/288655.aspx</a>
		<br />
		<a href="http://wiki.javascud.org/display/ww2cndoc/Tags">http://wiki.javascud.org/display/ww2cndoc/Tags</a>   标签总页<br /><a href="http://wiki.javascud.org/display/ww2cndoc/Form+Tags">http://wiki.javascud.org/display/ww2cndoc/Form+Tags</a>   中文文档，Form标签<img src ="http://www.blogjava.net/pdw2009/aggbug/106251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-03-25 17:34 <a href="http://www.blogjava.net/pdw2009/archive/2007/03/25/106251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>j2ee中文解决终极之道（转）</title><link>http://www.blogjava.net/pdw2009/archive/2007/03/23/105784.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Fri, 23 Mar 2007 03:31:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/03/23/105784.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/105784.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/03/23/105784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/105784.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/105784.html</trackback:ping><description><![CDATA[
		<p>Java中文问题一直困扰着很多初学者，如果了解了Java系统的中文问题原理，我们就可以对中文问题能够采取根本的解决之道。　　最古老的解决方案是使用String的字节码转换，这种方案问题是不方便，我们需要破坏对象封装性，进行字节码转换。</p>
		<p>　　还有一种方式是对J2EE容器进行编码设置，如果J2EE应用系统脱离该容器，则会发生乱码，而且指定容器配置不符合J2EE应用和容器分离的原则。</p>
		<p>　　在Java内部运算中，涉及到的所有字符串都会被转化为UTF-8编码来进行运算。那么，在被Java转化之前，字符串是什么样的字符集？ Java总是根据操作系统的默认编码字符集来决定字符串的初始编码，而且Java系统的输入和输出的都是采取操作系统的默认编码。</p>
		<p>　　因此，如果能统一Java系统的输入、输出和操作系统3者的编码字符集合，将能够使Java系统正确处理和显示汉字。这是处理Java系统汉字的一个原则，但是在实际项目中，能够正确抓住和控制住Java系统的输入和输出部分是比较难的。J2EE中，由于涉及到外部浏览器和数据库等，所以中文问题乱码显得非常突出。</p>
		<p>　　J2EE应用程序是运行在J2EE容器中。在这个系统中，输入途径有很多种：一种是通过页面表单打包成请求（request）发往服务器的；第二种是通过数据库读入；还有第3种输入比较复杂，JSP在第一次运行时总是被编译成Servlet，JSP中常常包含中文字符，那么编译使用javac时，Java将根据默认的操作系统编码作为初始编码。除非特别指定，如在Jbuilder/eclipse中可以指定默认的字符集。</p>
		<p>　　输出途径也有几种：第一种是JSP页面的输出。由于JSP页面已经被编译成Servlet，那么在输出时，也将根据操作系统的默认编码来选择输出编码，除非指定输出编码方式；还有输出途径是数据库，将字符串输出到数据库。</p>
		<p>　　由此看来，一个J2EE系统的输入输出是非常复杂，而且是动态变化的，而Java是跨平台运行的，在实际编译和运行中，都可能涉及到不同的操作系统，如果任由Java自由根据操作系统来决定输入输出的编码字符集，这将不可控制地出现乱码。</p>
		<p>　　正是由于Java的跨平台特性，使得字符集问题必须由具体系统来统一解决，所以在一个Java应用系统中，<strong>解决中文乱码的根本办法是明确指定整个应用系统统一字符集。</strong></p>
		<p>　　指定统一字符集时，到底是指定ISO8859_1 、GBK还是UTF-8呢？</p>
		<p>　　（1）如统一指定为ISO8859_1，因为目前大多数软件都是西方人编制的，他们默认的字符集就是ISO8859_1，包括操作系统Linux和数据库MySQL等。这样，如果指定Jive统一编码为ISO8859_1，那么就有下面3个环节必须把握：</p>
		<p>　　开发和编译代码时指定字符集为ISO8859_1。</p>
		<p>　　运行操作系统的默认编码必须是ISO8859_1，如Linux。</p>
		<p>　　在JSP头部声明：。</p>
		<p>　　（2）如果统一指定为GBK中文字符集，上述3个环节同样需要做到，不同的是只能运行在默认编码为GBK的操作系统，如中文Windows。</p>
		<p>　　统一编码为ISO8859_1和GBK虽然带来编制代码的方便，但是各自只能在相应的操作系统上运行。但是也破坏了Java跨平台运行的优越性，只在一定范围内行得通。例如，为了使得GBK编码在linux上运行，设置Linux编码为GBK。</p>
		<p>　　那么有没有一种除了应用系统以外不需要进行任何附加设置的中文编码根本解决方案呢？</p>
		<p>　　将Java/J2EE系统的统一编码定义为UTF-8。UTF-8编码是一种兼容所有语言的编码方式，惟一比较麻烦的就是要找到应用系统的所有出入口，然后使用UTF-8去“结扎”它。</p>
		<p>　　一个J2EE应用系统需要做下列几步工作：</p>
		<ol>
				<li>开发和编译代码时指定字符集为UTF-8。JBuilder和Eclipse都可以在项目属性中设置。 
</li>
				<li>使用过滤器，如果所有请求都经过一个Servlet控制分配器，那么使用Servlet的filter执行语句，将所有来自浏览器的请求（request）转换为UTF-8，因为浏览器发过来的请求包根据浏览器所在的操作系统编码，可能是各种形式编码。关键一句：<br />request.setCharacterEncoding(”UTF-8″)。<br />网上有此filter的源码，<a href="http://sourceforge.net/projects/jdon/" target="_blank">Jdon框架源码</a>中com.jdon.util.SetCharacterEncodingFilter<br />需要配置web.xml 激活该Filter。 
</li>
				<li>在JSP头部声明：。 
</li>
				<li>在Jsp的html代码中，声明UTF-8: 
</li>
				<li>设定数据库连接方式是UTF-8。例如连接MYSQL时配置URL如下：<br />jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8<br />注意，上述写法是JBoss的mysql-ds.xml写法，多亏网友提示，在tomcat中&amp;要写成&amp;即可。一般其他数据库都可以通过管理设置设定UTF-8 
</li>
				<li>其他和外界交互时能够设定编码时就设定UTF-8，例如读取文件，操作XML等。 </li>
		</ol>
		<p>　　　　 笔者以前在Jsp/Servlet时就采取这个原则，后来使用Struts、Tapestry、EJB、Hibernate、Jdon等框架时，从未被乱码困扰过，可以说适合各种架构。希望本方案供更多初学者分享，减少Java/J2EE的第一个拦路虎，也避免因为采取一些临时解决方案，导致中文问题一直出现在新的技术架构中。<br /><br /><br />另一篇文章<br /><br /><br />对于一个Java初学者来说，经常碰到的一个问题恐怕就是中文问题了。其实很正常，我们有几千年的悠久历史嘛，博大精深，岂能是小小的计算机语言所能包容的？呵呵，开个玩笑。但是不可否认的一个事实就是，就算是一个比较有经验的开发人员，也经常面对着屏幕上的乱码而大伤脑筋。<br /><br />　　想究其原因、彻底解决这一问题吗？follow me…… <br /><br /><strong>乱码原因</strong><br />　　java内核是unicode的。但Java总是根据操作系统的默认编码字符集来决定字符串的初始编码，而且Java系统的输入和输出的都是采取操作系统的默认编码，而数据库、文件、网络传输中的字节流……采用的编码更是各不相同。所以不可避免的就会出现烦人的乱码问题了。 <br /><br /><strong>解决办法</strong><br />　　1、GB2312、GBK、Unicode（UTF8）？<br />　　从字符集的大小比较 GB2312 &lt; GBK &lt; UTF8，很显然，如果我们采用UTF8作为系统编码的话，是不会有错的。而且如果你要考虑国际化的话，UTF8似乎是你唯一的选择<br />　　2、开发和编译代码时指定字符集为UTF-8<br />　　JBuilder和Eclipse都可以在项目属性中设置。<br />　　3、使用过滤器<br />　　编写过滤器<br /></p>
		<table width="90%" align="center" bgcolor="#e0e0e0" border="0">
				<tbody>
						<tr>
								<td>package com.javer.test.language;<br /><br />import javax.servlet.Filter;<br />import javax.servlet.FilterChain;<br />import javax.servlet.FilterConfig;<br />import javax.servlet.ServletRequest;<br />import javax.servlet.ServletResponse;<br /><br />/**<br />* &lt;p&gt;Title: EncodingFilter&lt;/p&gt;<br />* @author javer(QQ:84831612)<br />* @version 1.0<br />* @link <a href="http://blog.csdn.net/java008">http://blog.csdn.net/java008</a><br />*/<br />public class EncodingFilter<br />implements Filter<br />{<br />FilterConfig config;<br /><br />public void init(FilterConfig parm1)<br />throws javax.servlet.ServletException<br />{<br />this.config = parm1;<br />}<br /><br />public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)<br />throws java.io.IOException, javax.servlet.ServletException<br />{<br />if (req.getCharacterEncoding() == null || !req.getCharacterEncoding().equals("UTF-8"))<br />{<br />req.setCharacterEncoding("UTF-8");<br />}<br />chain.doFilter(req, res);<br />}<br /><br />public void destroy()<br />{<br />this.config = null;<br />}<br />}</td>
						</tr>
				</tbody>
		</table>　　在web.xml文件中配置该过滤器<br /><table width="90%" align="center" bgcolor="#e0e0e0" border="0"><tbody><tr><td>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"&gt;<br />&lt;web-app&gt;<br />&lt;display-name&gt;javer‘s project&lt;/display-name&gt;<br />&lt;filter&gt;<br />&lt;filter-name&gt;EncodingFilter&lt;/filter-name&gt;<br />&lt;display-name&gt;EncodingFilter&lt;/display-name&gt;<br />&lt;description&gt;对编码进行转换&lt;/description&gt;<br />&lt;filter-class&gt;com.javer.test.language.EncodingFilter&lt;/filter-class&gt;<br />&lt;/filter&gt;<br />&lt;filter-mapping&gt;<br />&lt;filter-name&gt;EncodingFilter&lt;/filter-name&gt;<br />&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />&lt;/filter-mapping&gt;<br />&lt;welcome-file-list&gt;<br />&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br />&lt;/welcome-file-list&gt;<br />&lt;/web-app&gt;</td></tr></tbody></table>　　4、在JSP 中进行声明<br />　　在JSP头部声明&lt;%@ page contentType="text/html;charset= UTF-8" %&gt;<br />　　在Jsp的html代码中声明&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;<br />　　5、数据库管理<br />　　一般数据库都可以通过管理设置设定UTF-8 <br />　　也可以通过jdbc链接时指定编码参数，如：mysql：jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf-8<br />　　6、其它<br />　　其他所有和外界交互时能够设定编码时就设定UTF-8，例如读取文件，操作XML等。总之，记住一个原则：在所有系统的出入口处都用UTF8编码进行“翻译”！<br /><img src ="http://www.blogjava.net/pdw2009/aggbug/105784.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-03-23 11:31 <a href="http://www.blogjava.net/pdw2009/archive/2007/03/23/105784.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2入门---2</title><link>http://www.blogjava.net/pdw2009/archive/2007/03/21/105269.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Wed, 21 Mar 2007 06:59:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/03/21/105269.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/105269.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/03/21/105269.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/105269.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/105269.html</trackback:ping><description><![CDATA[
		<p>处理流程<br /><br />1、在struts2中所有的请求由org.apache.struts2.dispatcher.FilterDispatcher传递过来。从请求的服务名解析出对应的action名称，并遍历HttpServletRequest、HttpSession、ServletContext 中的数据，并将其复制到Webwork的Map实现中，至此之后，所有数据操作均在此Map结构中进行，从而将内部结构与Servlet API相分离<font size="2">。<br /><br /></font><font size="3">2、以上述信息作为参数，调用ActionProxyFactory创建对应的ActionProxy实例。ActionProxyFactory 将根据Xwork 配置文件（xwork.xml）中的设定，创建ActionProxy实例，ActionProxy中包含了Action的配置信息（包括Action名称，对应实现类等等）。<br /><br />3、ActionProxy创建对应的Action实例，并根据配置进行一系列的处理程序。包括执行相应的预处理程序（如通过Interceptor 将Map 中的请求数据转换为Action所需要的Java 输入数据对象等），以及对Action 运行结果进行后处理。ActionInvocation 是这一过程的调度者。而com.opensymphony.xwork.<br />DefaultActionInvocation 则是XWork 中对ActionInvocation 接口的标准实现，如<br />果有精力可以对此类进行仔细研读，掌握了这里面的玄机，相信XWork的引擎就不再神秘。<br /><br />一段配置文件件及期解析<br /></font></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #000000">        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">action </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="login"</span>
				<span style="COLOR: #ff0000"> class</span>
				<span style="COLOR: #0000ff">="one.LoginAction"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />            </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">result </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="success"</span>
				<span style="COLOR: #ff0000"> type</span>
				<span style="COLOR: #0000ff">="dispatcher"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />                </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="location"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">/main.jsp</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">param</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />            </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">result</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />            </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">result </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="loginfail"</span>
				<span style="COLOR: #ff0000"> type</span>
				<span style="COLOR: #0000ff">="dispatcher"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />                </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="location"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">/login.jsp</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">param</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />            </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">result</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />            </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">interceptor-ref </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="params"</span>
				<span style="COLOR: #ff0000"> </span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #008000">&lt;!--</span>
				<span style="COLOR: #008000">  参数拦截 </span>
				<span style="COLOR: #008000">--&gt;</span>
				<span style="COLOR: #000000">
						<br />            </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">interceptor-ref </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="model-driven"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #008000">&lt;!--</span>
				<span style="COLOR: #008000"> 模型驱动 </span>
				<span style="COLOR: #008000">--&gt;</span>
				<span style="COLOR: #000000">
						<br />        </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">action</span>
				<span style="COLOR: #0000ff">&gt;</span>
		</div>
		<strong>include</strong>
		<br />通过include 节点，我们可以将其他配置文件导入到默认配置文件xwork.xml 中。从而实现良好的配置划分。这里我们导入了Webwork 提供的默认配置webwork-default.xml（位于webwork.jar 的根路径）。<br /><br /><strong>package</strong><br />XWork中，可以通过package对action进行分组。类似Java 中package和class的<br />关系。为可能出现的同名Action提供了命名空间上的隔离。<br />同时，package还支持继承关系。在这里的定义中，我们可以看到：<br />extends="webwork-default""webwork-default"是webwork-default.xml文件中定义的package，这里通过继承，"default" package 自动拥有"webwork-default" package 中的所有定义关系。这个特性为我们的配置带来了极大便利。在实际开发过程中，我们可以根据自身的应用特点，定义相应的package模板，并在各个项目中加以重用，无需再在重复繁琐的配置过程中消耗精力和时间。此外，我们还可以在Package节点中指定namespace，将我们的action分为若干个逻辑区间。如：&lt;package name="default" namespace="/user"extends="webwork-default"&gt;就将此package中的action定义划归为/user 区间，之后在页面调用action的时候，我们需要用/user/login.action 作为form action 的属性值。其中的/user/就指定了此action的namespace，通过这样的机制，我们可以将系统内的action进行逻辑分类，从而使得各模块之间的划分更加清晰。<br /><strong>action</strong><br />Action配置节点，这里可以设定Action的名称和对应实现类。<br /><strong>result</strong><br />通过result 节点，可以定义Action 返回语义，即根据返回值，决定处理模式以及响应界面。这里，返回值"success"（Action 调用返回值为String 类型）对应的处理模式为"dispatcher"。<br />可选的处理模式还有：<br />1. dispatcher<br />本系统页面间转向。类似forward。<br />2. redirect<br />浏览器跳转。可转向其他系统页面。<br />3. chain<br />将处理结果转交给另外一个Action处理，以实现Action的链式处理。<br />4. velocity<br />将指定的velocity模板作为结果呈现界面。<br />5. xslt<br />将指定的XSLT 作为结果呈现界面。<br />随后的param节点则设定了相匹配的资源名称。<br /><strong>interceptor-ref</strong><br />设定了施加于此Action的拦截器（interceptor）。关于拦截器，请参见稍后的“XWork拦截器体系”部分。interceptor-ref定义的是一个拦截器的应用，具体的拦截器设定，实际上是继承于webwork-default package，我们可以在webwork-default.xml 中找到对应的"params"和"model-driven"拦截器设置：<br />关于拦截器可以参考struts-default时的定义总之它就是把请求封装成对象，或把对象封装成。通常我们在&lt;package&gt;节点里包含这段代码，避免重复定义拦截.<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">interceptors</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">interceptor-stack </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="modelParamsStack"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">interceptor-ref </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="params"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">interceptor-ref </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="model-driven"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">interceptor-stack</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">interceptors</span><span style="COLOR: #0000ff">&gt;</span></div>然后在不同的Action节里点引用，方法如<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">interceptor-ref </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="modelParamsStack"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span></div><br />Webwork 中的Model对象，扮演着承上启下的角色，它既是Action的输入参数，又包含了Action处理的结果数据。换句话说，输入的Http请求参数，将被存储在Model对象传递给Action进行处理，Action处理完毕之后，也将结果数据放置到Model 对象中，之后，Model 对象与返回界面融合生成最后的反馈页面。也正由于此，笔者建议在实际开发中采用Model-Driven 模式，而非Property-Driven 模式（见稍后“Action驱动模式”部分），这将使得业务逻辑更加清晰可读。<br /><br />ActionContext为Action提供了与容器交互的途径。对于Web 应用而言，与容器的交互大多集中在Session、Parameter，通过ActionContext我们在代码中实现与Servlet API无关的容器交互。此外， 为了提供与Web 容器直接交互的可能。WebWork 还提供了一个ServletActionContext实现。它扩展了ActionContext，提供了直接面向Servlet API的容器访问机制。<br /><br />我们可以直接通过ServletActionContext.getRequest 得到当前HttpServletRequest 对象的引用，从而直接与Web 容器交互。<img src ="http://www.blogjava.net/pdw2009/aggbug/105269.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-03-21 14:59 <a href="http://www.blogjava.net/pdw2009/archive/2007/03/21/105269.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2入门--1</title><link>http://www.blogjava.net/pdw2009/archive/2007/03/21/105224.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Wed, 21 Mar 2007 03:31:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/03/21/105224.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/105224.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/03/21/105224.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/105224.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/105224.html</trackback:ping><description><![CDATA[
		<p>环境<br />1 、开发环境Eclipse +Myeclipse<br />2、struts2.01(下文指struts)<br />3、resin3.1(先择的原因是支持自动编译，感觉比tomcat强)<br /><br />在apache中下载struts2.0.1版本，struts的发布包中一般都带有例子，我们先把struts2-blank-2.0.1.war这个最简单的例子解压并把该项目的相关文件移值到myeclipse开发环竟底下。操作步骤如下：<br />1 、在myeclipse新建一个Web项目。把struts2-blank-2.0.1\WEB-INF\lib目录下的jar文件拷贝到新建的Web项目的lib目录下。<br />2、把struts.properties，struts.xml考到新建项目的src目录里。在myeclipse把新的项目发布到resin3.1的deploy目录里（自动发布的，但我还不懂怎么配置让resin3.1自动发布delpoy目录里的项目）把deploy目录里我们发布的项目拷贝到resin3.1的webapps目录里。<br />3、把eclipse自动编译选项取消，把新建项目的WebRoot删掉，重新建立一个该名字的虚拟目录，连接到我们拷贝到resin3.1的webpps目录中我们发布的目录，把eclipse中重选择自动编译。<br /><br />这是开发环竟的拾建。接下来慢慢介绍struts2的应用。<br />========================================================<br />struts.properties文件配置内容如下：<br /><br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #000000">struts.action.extension<br />          The URL extension to use to determine if the request is meant for a Struts action <br />           用URL扩展名来确定是否这个请求是被用作Struts action，其实也就是设置 action的后缀，例如login.do的'do'字。<br /><br />struts.configuration<br />          The org.apache.struts2.config.Configuration implementation class<br />            org.apache.struts2.config.Configuration接口名<br /><br />struts.configuration.files<br />          A list of configuration files automatically loaded by Struts <br />           struts自动加载的一个配置文件列表<br /><br />struts.configuration.xml.reload<br />          Whether to reload the XML configuration or not<br />           是否加载xml配置(true,false)<br /><br />struts.continuations.package<br />           The package containing actions that use Rife continuations<br />           含有actions的完整连续的package名称<br /><br />struts.custom.i18n.resources<br />          Location of additional localization properties files to load <br />           加载附加的国际化属性文件（不包含.properties后缀）<br /><br />struts.custom.properties<br />          Location of additional configuration properties files to load<br />           加载附加的配置文件的位置<br /><br /><br />struts.devMode<br />          Whether Struts is in development mode or not<br />           是否为struts开发模式<br /><br />struts.dispatcher.parametersWorkaround<br />          Whether to use a Servlet request parameter workaround necessary for some versions of WebLogic<br />            （某些版本的weblogic专用）是否使用一个servlet请求参数工作区（PARAMETERSWORKAROUND）<br /><br />struts.enable.DynamicMethodInvocation<br />          Allows one to disable dynamic method invocation from the URL<br />            允许动态方法调用<br /><br />struts.freemarker.manager.classname<br />          The org.apache.struts2.views.freemarker.FreemarkerManager implementation class <br />           org.apache.struts2.views.freemarker.FreemarkerManager接口名<br /><br />struts.i18n.encoding<br />          The encoding to use for localization messages<br />           国际化信息内码<br /><br />struts.i18n.reload<br />          Whether the localization messages should automatically be reloaded<br />           是否国际化信息自动加载 <br /><br />struts.locale<br />          The default locale for the Struts application<br />           默认的国际化地区信息<br /><br />struts.mapper.class<br />          The org.apache.struts2.dispatcher.mapper.ActionMapper implementation class<br />            org.apache.struts2.dispatcher.mapper.ActionMapper接口<br /><br />struts.multipart.maxSize<br />          The maximize size of a multipart request (file upload)<br />           multipart请求信息的最大尺寸（文件上传用） <br /><br />struts.multipart.parser<br />          The org.apache.struts2.dispatcher.multipart.MultiPartRequest parser implementation for a multipart request (file upload) <br />          专为multipart请求信息使用的org.apache.struts2.dispatcher.multipart.MultiPartRequest解析器接口（文件上传用）<br /><br /><br />struts.multipart.saveDir<br />          The directory to use for storing uploaded files <br />           设置存储上传文件的目录夹<br /><br />struts.objectFactory<br />          The com.opensymphony.xwork2.ObjectFactory implementation class<br />           com.opensymphony.xwork2.ObjectFactory接口（spring）<br /><br />struts.objectFactory.spring.autoWire<br />          Whether Spring should autoWire or not<br />           是否自动绑定Spring<br /><br />struts.objectFactory.spring.useClassCache<br />          Whether Spring should use its class cache or not<br />           是否spring应该使用自身的cache <br /><br />struts.objectTypeDeterminer<br />          The com.opensymphony.xwork2.util.ObjectTypeDeterminer implementation class<br />            com.opensymphony.xwork2.util.ObjectTypeDeterminer接口<br /><br />struts.serve.static.browserCache<br />          If static content served by the Struts filter should set browser caching header properties or not <br />           是否struts过滤器中提供的静态内容应该被浏览器缓存在头部属性中<br /><br />struts.serve.static<br />          Whether the Struts filter should serve static content or not <br />           是否struts过滤器应该提供静态内容<br /><br />struts.tag.altSyntax<br />          Whether to use the alterative syntax for the tags or not <br />           是否可以用替代的语法替代tags<br /><br />struts.ui.templateDir<br />          The directory containing UI templates<br />           UI templates的目录夹 <br /><br />struts.ui.theme<br />          The default UI template theme<br />           默认的UI template主题<br /><br />struts.url.http.port<br />          The HTTP port used by Struts URLs<br />           设置http端口<br /><br />struts.url.https.port<br />          The HTTPS port used by Struts URLs <br />           设置https端口<br /><br />struts.url.includeParams<br />          The default includeParams method to generate Struts URLs <br />          在url中产生 默认的includeParams<br /><br /><br />struts.velocity.configfile<br />          The Velocity configuration file path<br />           velocity配置文件路径<br /><br />struts.velocity.contexts<br />          List of Velocity context names<br />           velocity的context列表<br /><br /><br />struts.velocity.manager.classname<br />          org.apache.struts2.views.velocity.VelocityManager implementation class<br />           org.apache.struts2.views.velocity.VelocityManager接口名<br /><br />struts.velocity.toolboxlocation<br />          The location of the Velocity toolbox<br />           velocity工具盒的位置 <br />struts.xslt.nocache<br />          Whether or not XSLT templates should not be cached<br />           是否XSLT模版应该被缓存</span>
		</div>
		<br />其它配置文件介绍<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">一、Struts2配置文件 <br />Struts2相关的配置文件有web.xml，struts.xml，struts.properties， <br />struts-default.xml，velocity.properties，struts-default.vm。其中web.xml，struts.xml是必须的，其它的配置文件可选择。它们在web应用中的功能如下： <br />web.xml：包含所有必须的框架组件的web部署描述符。 <br />Struts.xml:配置包含result/view类型、action映射、拦截器等的Struts2的主要配置文件。 <br />Struts.properties：配置struts2的框架属性。 <br />Struts-default.xml：在文件在struts-action-x.x.jar中，该文件是应该被包含在struts.xml中的缺省配置。 <br />Welocity.properties：重写了velocity的配置文件。 <br />Struts-default.vm：相对于velocity的缺省配置。<br /><br />二、Struts2配置元素 <br />Struts2核心的配置文件是缺省的struts.xml。 <br />必要的时候，缺省的配置文件可以包含其它的配置文件；struts文件可以放入jar中，并自动插入应用程序，这样每个模块可以包含自己的配置文件并自动配置。在Freemarker和Velocity模块中，模板也能从classpath中加载，所以整个模块可以作为一个简单的jar文件被包含。 <br />Struts.xml配置文件可以包含Interceptor、Action类和Results。 <br />Struts.xml配置元素说明：<br /><br />1、Packages <br />Packages:packages把actions、results、results types、interceptors <br />和interceptor-stacks组装到一个逻辑单元中，从概念上讲，packages就像一个对象，可以被其它子包从写，而且可以拥有自己独立的部分。 <br />Name属性是packages的必填元素，它作为一个关键字被后边的包引用；extends元素是可选的，它允许包扩展一个和多个前边定义的包。注意， <br />struts.xml文件是至上而下处理的，所有被扩展的包，需要在扩展包前定义。 <br />Abstract元素是可选的，它可以申明一个不包含actions的配置文件。<br /><br />2、Namespace <br />Namespace元素把actions细分到逻辑模块，每一个namespace都有自己的 <br />前缀（prefix），namespace避免了action之间的名字冲突，当前缀出现在URI中时，这些标签都是名字空间感知的（“namespace aware”），所以这些namespace prefix不必嵌入到表单或连接中。 <br />Default的namespace是一个空字符串“”，如果在指定的配置文件中，没有找到action，缺省的namespace也会被查找。Local/global策略允许应用程序在action “extends”元素层次结构之外，有全局的action配置。缺省的namespace也可以不在package中申明。 <br />Namespace prefix可以注册为java的申明式安全，以确保授权的用户才能访问namespace的资源。 <br />Root namespace(“/”)也被支持，root就是当直接请求context path的时候的namespace。<br /><br />[个人理解：namespace的用法就像struts1.x中的path一样，只不过它在package中什么路径，而在action中申明action名子罢了]<br /><br />3、Include <br />Include元素使得框架能应用“divide and conquer”来配置文件。被include <br />的每个配置文件必须和struts.xml有一样的格式，一个大的项目可以采用这样方式来组织程序模块。 <br />Include元素也可以和package交替出现，框架将按照顺序加载配置文件。<br /><br />4、Interceptor configuration <br />Interceptor允许应用程序在Action方法执行前后定义执行代码， <br />Interceptor在应用程序开发中十分重要，对于Interceptor有许多用例，如validation, property population, security, logging, 和profiling。 <br />Interceptor被定义为一个Java类，Interceptor也可以组装成Interceptor-stack，他们将按照定义的顺序执行。 <br />在struts-default.xml中定义了一些缺省的Interceptor-stack,以便框架能很好地运行。<br /><br />5、Action <br />Action是框架的“工作单元”。Action可以指定一个Interceptor-stack、 <br />一序列的return type和一序列的异常处理，但只有name属性是必须的。 </span></div>one.xml配置<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml version="1.0" encoding="UTF-8"</span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;!</span><span style="COLOR: #ff00ff">DOCTYPE struts PUBLIC<br />        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"<br />        "http://struts.apache.org/dtds/struts-2.0.dtd"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">struts</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">package </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="one"</span><span style="COLOR: #ff0000">  extends</span><span style="COLOR: #0000ff">="struts-default"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">default-interceptor-ref </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="defaultStack"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"> <br />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">action </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="hello"</span><span style="COLOR: #ff0000">  class</span><span style="COLOR: #0000ff">="one.HelloWorld"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">result </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="success"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">/hello.jsp</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">result</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">action</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">package</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">struts</span><span style="COLOR: #0000ff">&gt;</span></div>struts.xml<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml version="1.0" encoding="UTF-8"</span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;!</span><span style="COLOR: #ff00ff">DOCTYPE struts PUBLIC<br />        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"<br />        "http://struts.apache.org/dtds/struts-2.0.dtd"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">struts</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">include  </span><span style="COLOR: #ff0000">file</span><span style="COLOR: #0000ff">="one.xml"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">include </span><span style="COLOR: #ff0000">file</span><span style="COLOR: #0000ff">="webwork-default.xml"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">package </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="default"</span><span style="COLOR: #ff0000"> extends</span><span style="COLOR: #0000ff">="webwork-default"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">package</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">struts</span><span style="COLOR: #0000ff">&gt;</span></div><p>struts.properties</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">struts.devMode </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> true<br />struts.enable.DynamicMethodInvocation </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> false<br /></span></div><br />HelloWorld.java<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> one;<br /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> com.opensymphony.xwork2.ActionSupport;<br /><br /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> HelloWorld </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> ActionSupport{<br />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String message;<br /><br />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setMessage(String message) {<br />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.message </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> message;<br />    }<br />    <br />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String getMessage() {<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> message;<br />    }<br /><br />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String execute(){<br />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">execute <img src="http://www.blogjava.net/images/dot.gif" /><img src="http://www.blogjava.net/images/dot.gif" /><img src="http://www.blogjava.net/images/dot.gif" />测试<img src="http://www.blogjava.net/images/dot.gif" /><img src="http://www.blogjava.net/images/dot.gif" /><img src="http://www.blogjava.net/images/dot.gif" />..</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />        message</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Hello peidw</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br />        <br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> ActionSupport.SUCCESS;<br />    }<br />}<br /></span></div>就这么简单，还有一个就hello.jsp页面了，该页面的作用是显示了上类的message属性值。<br />hello.jsp文件内容如下：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">@ page language</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">java</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> contentType</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">text/html; charset=gb2312</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br />    pageEncoding</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">gb2312</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">@ taglib prefix </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">s</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> uri </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> </span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">/struts-tags</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> </span><span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</span><span style="COLOR: #000000"> <br /></span><span style="COLOR: #0000ff">&lt;!</span><span style="COLOR: #ff00ff">DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">meta </span><span style="COLOR: #ff0000">http-equiv</span><span style="COLOR: #0000ff">="Content-Type"</span><span style="COLOR: #ff0000"> content</span><span style="COLOR: #0000ff">="text/html; charset=gb2312"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">sruts2 </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">title</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />    hello </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">s:property </span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="message"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div><img src ="http://www.blogjava.net/pdw2009/aggbug/105224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-03-21 11:31 <a href="http://www.blogjava.net/pdw2009/archive/2007/03/21/105224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正则表达式</title><link>http://www.blogjava.net/pdw2009/archive/2007/03/14/103827.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Wed, 14 Mar 2007 08:59:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/03/14/103827.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/103827.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/03/14/103827.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/103827.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/103827.html</trackback:ping><description><![CDATA[
		<p>常用的元字符 <br />. 匹配除换行符以外的任意字符 <br />\w 匹配字母或数字或下划线或汉字 <br />\s 匹配任意的空白符 <br />\d 匹配数字 <br />\b 匹配单词的开始或结束 <br />^ 匹配字符串的开始 <br />$ 匹配字符串的结 </p>
		<p>常用的限定符 <br />* 重复零次或更多次 <br />+ 重复一次或更多次 <br />? 重复零次或一次 <br />{n} 重复n次 <br />{n,} 重复n次或更多次 <br />{n,m} 重复n到m次 </p>
		<p>常用的反义代码 <br />\W 匹配任意不是字母，数字，下划线，汉字的字符 <br />\S 匹配任意不是空白符的字符 <br />\D 匹配任意非数字的字符 <br />\B 匹配不是单词开头或结束的位置 <br />[^x] 匹配除了x以外的任意字符 <br />[^aeiou] 匹配除了aeiou这几个字母以外的任意字符 </p>
		<p>常用的正则表达式:</p>
		<p>匹配中文字符的正则表达式： [\u4e00-\u9fa5], [\一-\龥] 可以. <br />评注：匹配中文还真是个头疼的事，有了这个表达式就好办了</p>
		<p>匹配双字节字符(包括汉字在内)：[^\x00-\xff] <br />评注：可以用来计算字符串的长度（一个双字节字符长度计2，ASCII字符计1）</p>
		<p>匹配空白行的正则表达式：\n\s*\r <br />评注：可以用来删除空白行</p>
		<p>匹配HTML标记的正则表达式：&lt;(\S*?)[^&gt;]*&gt;.*?&lt;/\1&gt;|&lt;.*? /&gt; <br />评注：网上流传的版本太糟糕，上面这个也仅仅能匹配部分，对于复杂的嵌套标记依旧无能为力</p>
		<p>匹配首尾空白字符的正则表达式：^\s*|\s*$ <br />评注：可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等)，非常有用的表达式</p>
		<p>匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* <br />评注：表单验证时很实用</p>
		<p>匹配网址URL的正则表达式：[a-zA-z]+://[^\s]* <br />评注：网上流传的版本功能很有限，上面这个基本可以满足需求</p>
		<p>匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：^[a-zA-Z][a-zA-Z0-9_]{4,15}$ <br />评注：表单验证时很实用</p>
		<p>匹配国内电话号码：\d{3}-\d{8}|\d{4}-\d{7} <br />评注：匹配形式如 0511-4405222 或 021-87888822</p>
		<p>匹配腾讯QQ号：[1-9][0-9]{4,} <br />评注：腾讯QQ号从10000开始</p>
		<p>匹配中国邮政编码：[1-9]\d{5}(?!\d) <br />评注：中国邮政编码为6位数字</p>
		<p>匹配身份证：\d{15}|\d{18} <br />评注：中国的身份证为15位或18位</p>
		<p>匹配ip地址：\d+\.\d+\.\d+\.\d+ <br />评注：提取ip地址时有用</p>
		<p>匹配特定数字： <br />^[1-9]\d*$　 　 //匹配正整数 <br />^-[1-9]\d*$ 　 //匹配负整数 <br />^-?[1-9]\d*$　　 //匹配整数 <br />^[1-9]\d*|0$　 //匹配非负整数（正整数 + 0） <br />^-[1-9]\d*|0$　　 //匹配非正整数（负整数 + 0） <br />^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$　　 //匹配正浮点数 <br />^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$　 //匹配负浮点数 <br />^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$　 //匹配浮点数 <br />^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$　　 //匹配非负浮点数（正浮点数 + 0） <br />^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$　　//匹配非正浮点数（负浮点数 + 0） <br />评注：处理大量数据时有用，具体应用时注意修正</p>
		<p>匹配特定字符串： <br />^[A-Za-z]+$　　//匹配由26个英文字母组成的字符串 <br />^[A-Z]+$　　//匹配由26个英文字母的大写组成的字符串 <br />^[a-z]+$　　//匹配由26个英文字母的小写组成的字符串 <br />^[A-Za-z0-9]+$　　//匹配由数字和26个英文字母组成的字符串 <br />^\w+$　　//匹配由数字、26个英文字母或者下划线组成的字符串 <br />评注：最基本也是最常用的一些表达式</p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/103827.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-03-14 16:59 <a href="http://www.blogjava.net/pdw2009/archive/2007/03/14/103827.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用dTree生成部门目录树</title><link>http://www.blogjava.net/pdw2009/archive/2007/01/26/96143.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Fri, 26 Jan 2007 06:18:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/01/26/96143.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/96143.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/01/26/96143.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/96143.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/96143.html</trackback:ping><description><![CDATA[<p>在action中使用sql按目录的方式查询出部门记录，其中包括部门名称，部门ID，部门父ID。顶头的记录的部门父ID必须为-1，查询语句如：<br>select dept_id,dept_name,parent_id from info_dept connect by prior dept_id = parent_id start with dept_id=?<br><br>把获得的list记录set到request中，在页面中显示出来。<br>页面代码如下:<br><br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">link&nbsp;</span> <span style="COLOR: #ff0000">href</span> <span style="COLOR: #0000ff">="&lt;%=request.getContextPath()%&gt;/gdnumweb/css/dtree.css"</span> <span style="COLOR: #ff0000">&nbsp;rel</span> <span style="COLOR: #0000ff">="stylesheet"</span> <span style="COLOR: #ff0000">&nbsp;type</span> <span style="COLOR: #0000ff">="text/css"</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">body</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&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: #ff0000">&nbsp;src</span> <span style="COLOR: #0000ff">="&lt;%=request.getContextPath()%&gt;/gdnumweb/js/dtree.js"</span> <span style="COLOR: #0000ff">&gt;&lt;/</span> <span style="COLOR: #800000">script</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">div&nbsp;</span> <span style="COLOR: #ff0000">class</span> <span style="COLOR: #0000ff">="dtree"</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">p</span> <span style="COLOR: #0000ff">&gt;&lt;</span> <span style="COLOR: #800000">a&nbsp;</span> <span style="COLOR: #ff0000">href</span> <span style="COLOR: #0000ff">="javascript:&nbsp;tree.openAll();"</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000">展开所有</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">a</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000">&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:&nbsp;tree.closeAll();"</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000">关闭所有</span> <span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">a</span> <span style="COLOR: #0000ff">&gt;&lt;/</span> <span style="COLOR: #800000">p</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">script&nbsp;</span> <span style="COLOR: #ff0000">language</span> <span style="COLOR: #0000ff">="javascript"</span> <span style="COLOR: #ff0000">&nbsp;type</span> <span style="COLOR: #0000ff">="text/javascript"</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>tree&nbsp;</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span> <span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">new</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;dTree('tree');<br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">logic:iterate&nbsp;id</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">dept</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;name</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">list</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&gt;</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>&nbsp;&nbsp;tree.add(</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;bean:write&nbsp;name=</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">dept</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;property=</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">dept_id</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">/&gt;</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;bean:write&nbsp;name=</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">dept</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;property=</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">parent_id</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">/&gt;</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;bean:write&nbsp;name=</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">dept</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;property=</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">dept_name</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">/&gt;</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,'</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;%=</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">path</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">%&gt;/</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">gdnumUserDept.</span> <span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">do</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">?</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">method</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">getDeptUserInfo</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&amp;</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">deptNo</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=&lt;</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">bean:write&nbsp;name</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">dept</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;property</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">dept_id</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">/&gt;</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">','','mainframe');<br></span><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;/</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">logic:iterate</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&gt;</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"><br>document.write(tree);<br></span><span style="COLOR: #0000ff">&lt;/</span> <span style="COLOR: #800000">script</span> <span style="COLOR: #0000ff">&gt;</span> <span style="COLOR: #000000"><br></span></div>
<br>在组合框中输出树形目录<br>获取列表的java方法<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">//</span><span style="COLOR: #008000">提取当前用户的部门下拉</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;List&nbsp;getSourceDept(String&nbsp;deptNo)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;con&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;CommonUtils.currentSession().connection();<br>&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;rs&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;ResultSetMetaData&nbsp;rsmd&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;java.sql.PreparedStatement&nbsp;ps&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sql&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">select&nbsp;deptno,(tools.buildTree(level)||deptname)&nbsp;deptname&nbsp;from&nbsp;sys_dept&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>&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">connect&nbsp;by&nbsp;parent_deptno=prior&nbsp;deptno&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br>&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">start&nbsp;with&nbsp;deptno=?</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;HashMap&nbsp;map&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ps&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;con.prepareStatement(sql);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ps.setString(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;deptNo);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ps.executeQuery();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">System.out.println("rs.size:"&nbsp;+&nbsp;rs.getFetchSize());</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rsmd&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;rs.getMetaData();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ArrayList();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(rs.next())&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;HashMap();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;rsmd.getColumnCount();&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map.put(rsmd.getColumnName(i).toLowerCase(),&nbsp;rs.getString(i));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(map);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(Exception&nbsp;ex)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.error(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">提取当前用户的部门下拉出错com.unicom.gzmas.reports.bo.getSourceDept:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;ex);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">finally</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CommonUtils.closeSession();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;list;<br>&nbsp;&nbsp;}</span></div>
<br>页面输出的代码<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">select&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="mbackdept"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;部门&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">option&nbsp;</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="all"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">-----全部----</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">option</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">logic:iterate&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="l"</span><span style="COLOR: #ff0000">&nbsp;name</span><span style="COLOR: #0000ff">="target"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">option&nbsp;</span><span style="COLOR: #ff0000">value</span><span style="COLOR: #0000ff">="&lt;bean:write&nbsp;name="</span><span style="COLOR: #ff0000">l"&nbsp;property</span><span style="COLOR: #0000ff">="deptno"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000">"&gt;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean:write&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="l"</span><span style="COLOR: #ff0000">&nbsp;property</span><span style="COLOR: #0000ff">="deptname"</span><span style="COLOR: #0000ff">/&gt;&lt;/</span><span style="COLOR: #800000">option</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">logic:iterate</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">select</span><span style="COLOR: #0000ff">&gt;</span></div>
构造树的存储过程<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #008080">/*</span><span style="COLOR: #008080">构造树</span><span style="COLOR: #008080">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">Function</span><span style="COLOR: #000000">&nbsp;Buildtree(In_Level&nbsp;</span><span style="COLOR: #808080">In</span><span style="COLOR: #000000">&nbsp;</span><span style="FONT-WEIGHT: bold; COLOR: #000000">Number</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">Return</span><span style="COLOR: #000000">&nbsp;</span><span style="FONT-WEIGHT: bold; COLOR: #000000">Varchar2</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">As</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;</span><span style="FONT-WEIGHT: bold; COLOR: #000000">Varchar2</span><span style="COLOR: #000000">(</span><span style="FONT-WEIGHT: bold; COLOR: #800000">4000</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">Begin</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">If</span><span style="COLOR: #000000">&nbsp;In_Level&nbsp;</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">&nbsp;</span><span style="FONT-WEIGHT: bold; COLOR: #800000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">Then</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">Return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">Null</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">End</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">If</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">Return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">|</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #808080">||</span><span style="COLOR: #000000">&nbsp;Incstring(</span><span style="COLOR: #ff0000">'－</span><span style="COLOR: #ff0000">&shy;</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,&nbsp;(In_Level&nbsp;</span><span style="COLOR: #808080">-</span><span style="COLOR: #000000">&nbsp;</span><span style="FONT-WEIGHT: bold; COLOR: #800000">1</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #808080">*</span><span style="COLOR: #000000">&nbsp;</span><span style="FONT-WEIGHT: bold; COLOR: #800000">2</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">End</span><span style="COLOR: #000000">;</span></div>
<img src ="http://www.blogjava.net/pdw2009/aggbug/96143.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-01-26 14:18 <a href="http://www.blogjava.net/pdw2009/archive/2007/01/26/96143.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个自定义分页标签</title><link>http://www.blogjava.net/pdw2009/archive/2007/01/08/92376.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Mon, 08 Jan 2007 07:07:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/01/08/92376.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/92376.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/01/08/92376.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/92376.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/92376.html</trackback:ping><description><![CDATA[
		<p>/**<br /> * <br /> */<br />package com.scitel.gdnumcommon.ctag;</p>
		<p>import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.jsp.JspException;<br />import javax.servlet.jsp.JspWriter;<br />import javax.servlet.jsp.tagext.TagSupport;</p>
		<p>import com.scitel.gdnumcommon.entity.Pagination;</p>
		<p>/**<br /> * <br /> *<br /> * &lt;p&gt;Description: 分页标签类&lt;/p&gt;<br /> *<br /> * &lt;p&gt;Copyright: Copyright (c) 2006&lt;/p&gt;<br /> *<br /> * &lt;p&gt;Company: 深圳科讯数码有限公司&lt;/p&gt;<br /> *<br /> * @author  <br /> * @version 1.0 时间 Mar 6, 2006<br /> */<br />public class PaginationTag extends TagSupport {<br /> /**<br />  * 唯一ID<br />  */<br /> private static final long serialVersionUID = 1673491971683216709L;<br />    /**<br />     * 链接路径<br />     */<br /> private String path = null;<br /> /**<br />  * 分页类保存在request中的名称,与类名相同<br />  */<br /> private String name = null;<br /> /**<br />  * 所带参数名称(page)<br />  */<br /> private String parameter = null;<br /> /**<br />  *表单名称<br />  */<br /> private String formName = null;<br /> <br /> /**<br />  * @param name The name to set.<br />  */<br /> public void setName(String name) {<br />  this.name = name;<br /> }<br /> /**<br />  * @param path The path to set.<br />  */<br /> public void setPath(String path) {<br />  this.path = path;<br /> }<br /> <br /> /**<br />  * @param parameter The parameter to set.<br />  */<br /> public void setParameter(String parameter) {<br />  this.parameter = parameter;<br /> }<br /> <br /> /**<br />  * @param formName The formName to set.<br />  */<br /> public void setFormName(String formName) {<br />  this.formName = formName;<br /> }<br /> <br /> /* (non-Javadoc)<br />  * @see javax.servlet.jsp.tagext.TagSupport#doStartTag()<br />  */<br /> public int doStartTag() throws JspException {<br />  // TODO Auto-generated method stub<br />  Pagination pagination = null;</p>
		<p>  if(this.path == null){<br />   throw new NullPointerException("path属性不能为空");<br />  }<br />  <br />  if(this.name == null){<br />   this.name = "pagination";<br />  }<br />  <br />  if(this.parameter == null){<br />   this.parameter = "page";<br />  }<br />  <br />  pagination = (Pagination)pageContext.getRequest().getAttribute(name);<br />  <br />  if(pagination == null) {<br />   throw new NullPointerException(name + "在request中为空!");<br />  }<br />  <br />  try{<br />   JspWriter out = pageContext.getOut();</p>
		<p>   String contextPath = encodeURL(this.path, this.parameter);<br />   if(this.formName != null &amp;&amp; this.formName.length() &gt; 0){<br />    if(pagination.isHasPreviousPage()){<br />     out.println("&lt;a class=\"pagination\" href=\"" + contextPath + "1\" onclick=\"paginationSubmit('1');return false;\" title=\"第一页\"&gt;第一页&lt;/a&gt;");<br />     out.println("&lt;a class=\"pagination\" href=\"" + contextPath + pagination.getPreviousPage() + "\" onclick=\"paginationSubmit('" + pagination.getPreviousPage() + "');return false;\" title=\"上一页\"&gt;上一页&lt;/a&gt;");<br />    }else{<br />     out.println("&lt;span title=\"第一页\"&gt;第一页&lt;/span&gt;");<br />     out.println("&lt;span title=\"上一页\"&gt;上一页&lt;/span&gt;");<br />    }<br />    <br />    if(pagination.isHasNextPage()){<br />     out.println("&lt;a class=\"pagination\" href=\"" + contextPath + pagination.getNextPage() + "\" onclick=\"paginationSubmit('" + pagination.getNextPage() + "');return false;\"  title=\"下一页\"&gt;下一页&lt;/a&gt;");<br />     out.println("&lt;a class=\"pagination\" href=\"" + contextPath + pagination.getTotalPage() + "\" onclick=\"paginationSubmit('" + pagination.getTotalPage() + "');return false;\" title=\"最后一页\"&gt;最后一页&lt;/a&gt;");<br />    }else{<br />     out.println("&lt;span title=\"下一页\"&gt;下一页&lt;/span&gt;");<br />     out.println("&lt;span title=\"最后一页\"&gt;最后一页&lt;/span&gt;");<br />    }<br />   }else{<br />    if(pagination.isHasPreviousPage()){<br />     out.println("&lt;a class=\"pagination\" href=\"" + contextPath + "1\" title=\"第一页\"&gt;第一页&lt;/a&gt;");<br />     out.println("&lt;a class=\"pagination\" href=\"" + contextPath + pagination.getPreviousPage() + "\" title=\"上一页\"&gt;上一页&lt;/a&gt;");<br />    }else{<br />     out.println("&lt;span title=\"第一页\"&gt;第一页&lt;/span&gt;");<br />     out.println("&lt;span title=\"上一页\"&gt;上一页&lt;/span&gt;");<br />    }<br />    <br />    if(pagination.isHasNextPage()){<br />     out.println("&lt;a class=\"pagination\" href=\"" + contextPath + pagination.getNextPage() + "\" title=\"下一页\"&gt;下一页&lt;/a&gt;");<br />     out.println("&lt;a class=\"pagination\" href=\"" + contextPath + pagination.getTotalPage() + "\" title=\"最后一页\"&gt;最后一页&lt;/a&gt;");<br />    }else{<br />     out.println("&lt;span title=\"下一页\"&gt;下一页&lt;/span&gt;");<br />     out.println("&lt;span title=\"最后一页\"&gt;最后一页&lt;/span&gt;");<br />    }<br />   }<br />   <br />   out.println("&amp;nbsp;");<br />   out.println("共有" + pagination.getTotalCount() + "条");<br />   out.print("&amp;nbsp;");<br />   out.println("每页" + pagination.getCount() + "条");<br />   out.print("&amp;nbsp;");<br />   out.println("共" + pagination.getTotalPage() + "页");<br />   out.print("&amp;nbsp;");<br />   out.println("本页是第" + pagination.getCurrPage() + "页");<br />   out.println("&amp;nbsp;");<br />   out.println("跳转到第&lt;input type=\"text\" id=\"" + this.parameter + "\" class=\"input1\" size=\"3\" maxlength=\"5\"&gt;页");<br />   out.println("&amp;nbsp;");<br />   out.println("&lt;button onclick=\"paginationGoto();\" class=\"buttonbg\"&gt;跳转&lt;/button&gt;");<br />   out.println("&lt;br /&gt;");<br />   /*创建CSS内容*/<br />   createCSS(out);<br />   if(this.formName != null &amp;&amp; this.formName.length() &gt; 0) {<br />    /*创建js内容*/<br />    createJS(out, contextPath, pagination.getTotalPage());<br />   }else{<br />    createNoFormJS(out, this.path, pagination.getTotalPage());<br />   }<br />   out.println();<br />  }catch(Exception e){<br />   throw new JspException(e);<br />  }<br />  <br />  return SKIP_BODY;<br /> }<br /> <br /> /* (non-Javadoc)<br />  * @see javax.servlet.jsp.tagext.TagSupport#doEndTag()<br />  */<br /> public int doEndTag() throws JspException {<br />  // TODO Auto-generated method stub<br />  return EVAL_PAGE;<br /> }<br /> <br /> /**<br />  * 改变URL使它能访问到action或servlet中去<br />  * @param href 从页面传来的href<br />  * @param param <br />  * @param queryStr 查询内容<br />  * @return<br />  * @author <br />  */<br /> private final String encodeURL(String href, String param){<br />  StringBuffer buffer = new StringBuffer(100);<br />  <br />  HttpServletRequest request =<br />   (HttpServletRequest)this.pageContext.getRequest();<br />  buffer.append(request.getContextPath() + "/" + href);</p>
		<p>  // 判断是否已经带有？号<br />  int question = href.indexOf("?");<br />  if(question &gt; 0 ){<br />   buffer.append("&amp;" + param + "=");<br />  }else{<br />   buffer.append("?" + param + "=");<br />  }<br />  <br />  return buffer.toString();<br /> }<br /> <br /> /**<br />  * 创建js内容如果提交form就用js提交<br />  * @param out<br />  * @param contextPath<br />  * @throws Exception<br />  * @author <br />  */<br /> private final void createJS(JspWriter out, String contextPath, int totalPage) throws Exception {<br />  out.println("&lt;script language=\"javascript\"&gt;");<br />  out.println("function paginationSubmit(pageNum_) { ");<br />  out.println("  document." + formName + ".action=\'" + contextPath + "\' + pageNum_ + \'\';");<br />  out.println("  document." + formName + ".submit();");<br />  out.println("}");<br />  /*跳转内容*/<br />  HttpServletRequest request =<br />   (HttpServletRequest)this.pageContext.getRequest();<br />  String contPath = request.getContextPath() + "/" + this.path;<br />  out.println("function paginationGoto() { ");<br />  out.println("  if(!controlNotNull(document.all." + this.parameter + ", '跳转页面')) {");<br />  out.println("    return;");<br />  out.println("  }");<br />  out.println("  ");<br />  out.println("  if(!controlIsInt(document.all." + this.parameter + ", '跳转页面')) {");<br />  out.println("    return;");<br />  out.println("  }");<br />  out.println("  ");<br />  out.println("  pageNum_ = document.all." + this.parameter + ".value");<br />  out.println("  if(pageNum_ &gt; 0 &amp;&amp; pageNum_ &lt;= " + totalPage + ") {");<br />  out.println("    document." + formName + ".action=\'" + contPath + "&amp;" + this.parameter + "=\' + pageNum_ + \'\';");<br />  out.println("    document." + formName + ".submit();");<br />  out.println("  } else { ");<br />  out.println("    alert(\"您输入的页数超出范围\");");<br />  out.println("  }");<br />  out.println("}");<br />  out.println("&lt;/script&gt;");<br />  out.println();<br /> }<br /> <br /> /**<br />  * 创建没有form时的js<br />  * @param out<br />  * @param contextPath<br />  * @throws Exception<br />  * @author <br />  */<br /> private final void createNoFormJS(JspWriter out, String href, int totalPage) throws Exception {<br />  HttpServletRequest request =<br />   (HttpServletRequest)this.pageContext.getRequest();<br />  String contPath = request.getContextPath() + "/" + href;</p>
		<p>  out.println("&lt;script language=\"javascript\"&gt;");<br />  out.println("function paginationGoto() { ");<br />  out.println("  if(!controlNotNull(document.all." + this.parameter + ", '跳转页面')) {");<br />  out.println("    return;");<br />  out.println("  }");<br />  out.println("  ");<br />  out.println("  if(!controlIsInt(document.all." + this.parameter + ", '跳转页面')) {");<br />  out.println("    return;");<br />  out.println("  }");<br />  out.println("  ");<br />  out.println("  pageNum_ = document.all." + this.parameter + ".value");<br />  out.println("  if(pageNum_ &gt; 0 &amp;&amp; pageNum_ &lt;= " + totalPage + ") {");<br />  out.println("    document.location.href=\'" + contPath + "&amp;" + this.parameter + "=\' + pageNum_ + \'\';");<br />  out.println("  } else { ");<br />  out.println("    alert(\"您输入的页数超出范围\");");<br />  out.println("  }");<br />  out.println("}");<br />  out.println("&lt;/script&gt;");<br />  out.println();<br /> }<br /> <br /> /**<br />  * 创建css内容<br />  * @param out<br />  * @throws Exception<br />  * @author </p>
		<p>  */<br /> private final void createCSS(JspWriter out)throws Exception {<br />  out.println("&lt;style type=\"text/css\"&gt;");<br />  out.println("a.pagination:visited { text-decoration: underline; color: #808080; } ");//#CCCCFF #c0c0c0<br />  out.println("a.pagination:link { text-decoration: underline; color: blue; } ");<br />  out.println("a.pagination:hover { text-decoration: none; color: #009933; } ");<br />  out.println("a.pagination:active { text-decoration: none; color: orangered; } ");<br />  out.println("&lt;/style&gt;");<br /> }<br />}<br />========================================<br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;</p>
		<p>&lt;!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"<br /> "<a href="http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd</a>"&gt;<br />&lt;taglib&gt;<br />    &lt;tlib-version&gt;1.0&lt;/tlib-version&gt;<br /> &lt;jsp-version&gt;1.2&lt;/jsp-version&gt;<br /> &lt;short-name&gt;page&lt;/short-name&gt;<br /> &lt;description&gt;<br /> @author<br /> pagination page 1-10<br /> &lt;/description&gt;</p>
		<p> &lt;tag&gt;<br />  &lt;name&gt;pagination&lt;/name&gt;<br />  &lt;tag-class&gt;com.scitel.gdnumcommon.ctag.PaginationTag&lt;/tag-class&gt;<br />  &lt;body-content&gt;empty&lt;/body-content&gt;</p>
		<p>  &lt;attribute&gt;<br />   &lt;name&gt;path&lt;/name&gt;<br />   &lt;required&gt;true&lt;/required&gt;<br />   &lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;<br />  &lt;/attribute&gt;</p>
		<p>  &lt;attribute&gt;<br />   &lt;name&gt;name&lt;/name&gt;<br />   &lt;required&gt;false&lt;/required&gt;<br />   &lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;<br />  &lt;/attribute&gt;</p>
		<p>  &lt;attribute&gt;<br />   &lt;name&gt;parameter&lt;/name&gt;<br />   &lt;required&gt;false&lt;/required&gt;<br />   &lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;<br />  &lt;/attribute&gt;<br />  <br />  &lt;attribute&gt;<br />   &lt;name&gt;formName&lt;/name&gt;<br />   &lt;required&gt;false&lt;/required&gt;<br />   &lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;<br />  &lt;/attribute&gt;</p>
		<p> &lt;/tag&gt;<br />&lt;/taglib&gt;<br />=============================<br />页面使用代码<br />  &lt;Td align="right" colspan="10"&gt;<br />  &lt;page:pagination path="wfProcAction.do?method=queryWorkFlow" name="pagination" parameter="page" formName="form1" /&gt;<br />  &lt;/Td&gt;<br />===============================================<br />Action 类中使用代码<br />     String page = request.getParameter("page");<br />     Pagination pagination = new Pagination();<br />     pagination.setTotalCount(didWf.size());<br />     <br />                 if (page != null &amp;&amp; page.length() &gt; 0) {<br />          pagination.setPage(Integer.parseInt(page));<br />     }else {<br />          pagination.setPage(1);<br />     }<br />                 int page_=pagination.getPage();<br />                 int row_start=(page_*pagination.getCount())-pagination.getCount();<br />                 int row_end=page_*pagination.getCount();<br />                 if(row_end&gt;didWf.size()) {<br />                  row_end=didWf.size();<br />                 }<br />                 List datalist=didWf.subList(row_start,row_end);<br />                 request.setAttribute("wkList",datalist);<br />                 <br />                 request.setAttribute("pagination", pagination);<br />===============================</p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/92376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-01-08 15:07 <a href="http://www.blogjava.net/pdw2009/archive/2007/01/08/92376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>weblogic中文乱码问题</title><link>http://www.blogjava.net/pdw2009/archive/2006/12/21/89212.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Thu, 21 Dec 2006 02:22:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/12/21/89212.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/89212.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/12/21/89212.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/89212.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/89212.html</trackback:ping><description><![CDATA[
		<p style="TEXT-INDENT: 2em">由于操作系统、浏览器、数据库、JVM采用的字符集都不一样，基于Weblogic Server开发的应用经常出现中文显示乱码问题，其实在Weblogic Server上运行的WEB应用有很多与字符集有关的设置，下面做一个总结,为了正确处理中文，最好把这些设置都设上。 
</p>
		<p style="TEXT-INDENT: 2em">1. 在JSP文件头加入 
</p>
		<p style="TEXT-INDENT: 2em">&lt; %@ page contentType="text/html; charset=GBK" % &gt; 
</p>
		<p style="TEXT-INDENT: 2em">指定该JSP采用的字符集。 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">2．在Weblogic.xml文件的&lt; jsp-descriptor &gt;中加入： 
</p>
		<p style="TEXT-INDENT: 2em">&lt; jsp-param &gt; 
</p>
		<p style="TEXT-INDENT: 2em">&lt; param-name &gt;encoding&lt; /param-name &gt; 
</p>
		<p style="TEXT-INDENT: 2em">&lt; param-value &gt;GBK&lt; /param-value &gt; 
</p>
		<p style="TEXT-INDENT: 2em">&lt; /jsp-param &gt; 
</p>
		<p style="TEXT-INDENT: 2em">指定JSP文件中采用的字符集，在JSP文件中的&lt; %@ page contentType="text/html; charset=GBK" % &gt;会覆盖该设置 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">3．在Weblogic.xml文件的&lt; jsp-descriptor &gt;中加入 
</p>
		<p style="TEXT-INDENT: 2em">&lt; jsp-param &gt; 
</p>
		<p style="TEXT-INDENT: 2em">&lt; param-name &gt;compilerSupportsEncoding&lt; /param-name &gt; 
</p>
		<p style="TEXT-INDENT: 2em">&lt; param-value &gt;true&lt; /param-value &gt; 
</p>
		<p style="TEXT-INDENT: 2em">&lt; /jsp-param &gt; 
</p>
		<p style="TEXT-INDENT: 2em">如果为TRUE，指定在编译JSP文件时，采用在JSP文件中定义的 
</p>
		<p style="TEXT-INDENT: 2em">&lt; %@ page contentType="text/html; charset=GBK" % &gt;或&lt; jsp-descriptor &gt;中定义的encoding参数中定义的字符集进行编码，如果为FALSE，则采用JVM中默认指定的字符集进行编码。 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">4． Weblogic Server需要把HTTP request(GET 和POST)中的数据从它的原始编码转化为Unicode，以便Java servlet API进行处理，为了做这种转换，Weblogic Server需要知道HPPT request中的数据的编码方式。这可以通过在Weblogic.xml的&lt; context-param &gt;中设置. 
</p>
		<p style="TEXT-INDENT: 2em">&lt; input-charset &gt; 
</p>
		<p style="TEXT-INDENT: 2em">&lt; resource-path &gt;/&lt; /resource-path &gt; 
</p>
		<p style="TEXT-INDENT: 2em">&lt; java-charset-name &gt;GBK&lt; /java-charset-name &gt; 
</p>
		<p style="TEXT-INDENT: 2em">&lt; /input-charset &gt; 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">5．从ORACLE数据库中检索出来的中文显示不正确时，在这种情况下，如果数据库使用的是中文字符集，并使用的是Type 2 JDBC Driver时，可加入Weblogic.codeset=GBK的属性来解决这个问题。代码如下： 
</p>
		<p style="TEXT-INDENT: 2em">java.util.Properties props = new java.util.Properties(); 
</p>
		<p style="TEXT-INDENT: 2em">props.put("Weblogic.codeset", "GBK"); 
</p>
		<p style="TEXT-INDENT: 2em">props.put("user", "scott"); 
</p>
		<p style="TEXT-INDENT: 2em">props.put("password", "tiger"); 
</p>
		<p style="TEXT-INDENT: 2em">String connectUrl = "jdbc:Weblogic:oracle"; 
</p>
		<p style="TEXT-INDENT: 2em">Driver myDriver = (Driver) 
</p>
		<p style="TEXT-INDENT: 2em">Class.forName("Weblogic.jdbc.oci.Driver").newInstance(); 
</p>
		<p style="TEXT-INDENT: 2em">Connection conn = 
</p>
		<p style="TEXT-INDENT: 2em">myDriver.connect(connectUrl, props); 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">6． 如果是采用WTC调用Tuxedo中的服务，在JSP页面中无法正确显示中文，必须使安装Tuxedo的服务器上的NLS_LANG环境变量与数据库中的字符集的设置一样。如后台Oracle数据库中的字符集设置为SIMPLIFIED CHINESE_CHINA.ZHS16GBK，那么Tuxedo应用服务器上的NLS_LANG环境变量应设置为：export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK" </p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/89212.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-12-21 10:22 <a href="http://www.blogjava.net/pdw2009/archive/2006/12/21/89212.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个基础VO类</title><link>http://www.blogjava.net/pdw2009/archive/2006/11/20/82334.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Mon, 20 Nov 2006 09:31:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/11/20/82334.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/82334.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/11/20/82334.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/82334.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/82334.html</trackback:ping><description><![CDATA[
		<p>package com.scitel.gdnumcommon.entity;</p>
		<p>import org.apache.commons.lang.builder.*;<br />import java.io.Serializable;</p>
		<p>
				<br />/**<br /> * VO基础类,在系统中希望VO与PO分离<br />i<br /> * @author peidw <br /> * <br /> */<br />public  abstract  class BaseVO implements Serializable{<br /> <br /> public String toString() {<br />  return ToStringBuilder.reflectionToString(this);<br /> }<br /> <br /> public boolean equals(Object obj) {<br />  return EqualsBuilder.reflectionEquals(this,obj);<br /> }<br /> <br /> public int hashCode() {<br />  return HashCodeBuilder.reflectionHashCode(this);<br /> }<br />}<br /></p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/82334.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-11-20 17:31 <a href="http://www.blogjava.net/pdw2009/archive/2006/11/20/82334.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp/servlet输出与重定向</title><link>http://www.blogjava.net/pdw2009/archive/2006/11/02/78614.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Thu, 02 Nov 2006 02:50:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/11/02/78614.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/78614.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/11/02/78614.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/78614.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/78614.html</trackback:ping><description><![CDATA[由于response是jsp页面中的隐含对象，故在jsp页面中可以用response.sendRedirect()直接实现重定位。  <br />注意：  <br />(1).使用response.sendRedirect时，前面不能有HTML输出。  <br />这并不是绝对的，不能有HTML输出其实是指不能有HTML被送到了浏览器。事实上现在的server都有cache机制，一般在8K（我是说JSP　SERVER），这就意味着，除非你关闭了cache，或者你使用了out.flush()强制刷新，那么在使用sendRedirect之前，有少量的HTML输出也是允许的。  <br />(2).response.sendRedirect之后，应该紧跟一句return;  <br />我们已经知道response.sendRedirect是通过浏览器来做转向的，所以只有在页面处理完成后，才会有实际的动作。既然你已经要做转向了，那么后的输出还有什么意义呢？而且有可能会因为后面的输出导致转向失败。  <br />有关JSP/Servlet的重定向技术综述如下[补充]  <br /><br />1.RequestDispatcher.forward()  <br /> 是在服务器端起作用,当使用forward()时,Servlet  engine传递HTTP请求从当前的Servlet  or  JSP到另外一个Servlet,JSP  或普通HTML文件,也即你的FORM提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时FORM提交的所有信息在b.jsp都可以获得,参数自动传递.  <br /> 但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过response.setAttribute("name",name)来传至下一个页面.  <br /><br />   重定向后浏览器地址栏URL不变.  <br /><br />例:在servlet中进行重定向  <br />public  void  doPost(HttpServletRequest  request,HttpServletResponse  response)  <br />throws  ServletException,IOException  <br />{  <br /><br />             response.setContentType("text/html;  charset=gb2312");  <br /><br />             ServletContext  sc  =  getServletContext();  <br /><br />             RequestDispatcher  rd  =  null;  <br /><br />             rd  =  sc.getRequestDispatcher("/index.jsp");          //定向的页面  <br /><br />             rd.forward(request,  response);  <br /><br />}  <br />通常在servlet中使用，不在jsp中使用。  <br /><br />2.response.sendRedirect()  <br />     是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame.的jsp文件.  <br />   重定向后在浏览器地址栏上会出现重定向页面的URL  <br />例:在servlet中重定向  <br />public  void  doPost(HttpServletRequest  request,HttpServletResponse  response)  <br /><br />             throws  ServletException,IOException  <br /><br />{  <br /><br />             response.setContentType("text/html;  charset=gb2312");  <br /><br />             response.sendRedirect("/index.jsp");  <br /><br />}  <br />由于response是jsp页面中的隐含对象，故在jsp页面中可以用response.sendRedirect()直接实现重定位。  <br />注意：  <br />(1).使用response.sendRedirect时，前面不能有HTML输出。  <br />这并不是绝对的，不能有HTML输出其实是指不能有HTML被送到了浏览器。事实上现在的server都有cache机制，一般在8K（我是说JSP　SERVER），这就意味着，除非你关闭了cache，或者你使用了out.flush()强制刷新，那么在使用sendRedirect之前，有少量的HTML输出也是允许的。  <br />(2).response.sendRedirect之后，应该紧跟一句return;  <br />我们已经知道response.sendRedirect是通过浏览器来做转向的，所以只有在页面处理完成后，才会有实际的动作。既然你已经要做转向了，那么后的输出还有什么意义呢？而且有可能会因为后面的输出导致转向失败。  <br />比较：  <br />(1).Request  Dispatcher.forward()是容器中控制权的转向，在客户端浏览器地址栏中不会显示出转向后的地址；  <br />(2).response.sendRedirect()则是完全的跳转，浏览器将会得到跳转的地址，并重新发送请求链接。这样，从浏览器的地址栏中可以看到跳转后的链接地址。  <br />前者更加高效，在前者可以满足需要时，尽量使用RequestDispatcher.forward()方法.  <br /><br />注：在有些情况下，比如，需要跳转到一个其它服务器上的资源，则必须使用HttpServletResponse.sendRequest()方法。  <br /><br />3.<?XML:NAMESPACE PREFIX = JSP /?><jsp:forward &nbsp;page="" &nbsp;=""></jsp:forward>  <br /><br />它的底层部分是由RequestDispatcher来实现的，因此它带有RequestDispatcher.forward()方法的印记。  <br /><br /><br />如果在<jsp:forward>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意。  <br />另外要注意：它不能改变浏览器地址，刷新的话会导致重复提交  <br /><br />4.修改HTTP  header的Location属性来重定向  <br />   通过设置直接修改地址栏来实现页面的重定向。  <br />jsp文件代码如下：  <br /><br />＜%  <br />response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);  <br />String  newLocn  =  "/newpath/jsa.jsp";  <br />response.setHeader("Location",newLocn);  <br />%＞  <br /><br />5.JSP中实现在某页面停留若干秒后,自动重定向到另一页面  <br /> 在html文件中，下面的代码：  <br />      
<meta &nbsp;http-equiv="refresh" &nbsp;content="300;  url=target.jsp" /> <br />     它的含义：在5分钟之后正在浏览的页面将会自动变为target.html这一页。代码中300为刷新的延迟时间，以秒为单位。targer.html为你想转向的目标页,若为本页则为自动刷新本页。  <br />     由上可知，可以通过setHeader来实现某页面停留若干秒后,自动重定向到另一页面。  <br />     关键代码：  <br />                 String  content=stayTime+";URL="+URL;  <br />                 response.setHeader("REFRESH",content);  </jsp:forward><img src ="http://www.blogjava.net/pdw2009/aggbug/78614.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-11-02 10:50 <a href="http://www.blogjava.net/pdw2009/archive/2006/11/02/78614.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个写得不错的DAO操作类</title><link>http://www.blogjava.net/pdw2009/archive/2006/07/11/57683.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Tue, 11 Jul 2006 09:27:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/07/11/57683.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/57683.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/07/11/57683.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/57683.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/57683.html</trackback:ping><description><![CDATA[
		<p>
				<br />package com.scitel.gdnumcommon.utils;</p>
		<p>import java.math.BigDecimal;<br />import java.sql.Connection;<br />import java.sql.PreparedStatement;<br />import java.sql.ResultSet;<br />import java.sql.ResultSetMetaData;<br />import java.sql.Types;<br />import java.util.ArrayList;<br />import java.util.HashMap;<br />import java.util.Iterator;<br />import java.util.List;<br />import java.util.Map;</p>
		<p>import org.apache.commons.beanutils.BeanUtils;<br />import org.apache.commons.logging.Log;<br />import org.apache.commons.logging.LogFactory;</p>
		<p>import com.scitel.gdnumcommon.entity.Pagination;<br />import com.scitel.gdnumcommon.entity.BaseVO;<br /><br /><br />public class BaseDAO {<br /> private static final Log log = LogFactory.getLog(BaseDAO.class);</p>
		<p> /**<br />  * 保存数据,新建和修改都用这个<br />  *<br />  * @param con<br />  * @param SQL<br />  * @param params<br />  * @throws Exception<br />  * @author <br />  */<br /> public void save(Connection con, String SQL, List params)<br />   throws Exception {<br />  PreparedStatement ps = null;<br />  try {<br />   ps = con.prepareStatement(SQL);<br />   if (SQL == null) {<br />    throw new Exception();<br />   }</p>
		<p>   if (params != null &amp;&amp; params.size() &gt; 0) {<br />    int count = 0;<br />    for (Iterator iterator = params.iterator(); iterator.hasNext(); count++) {<br />     Object object = iterator.next();<br />     setObjectValue(ps, count + 1, object);<br />    }<br />   }<br />   ps.executeUpdate();<br />  } catch (Exception e) {<br />   log.error(e);<br />   throw e;<br />  } finally {<br />   try{<br />    if(ps != null) {<br />     ps.close();<br />    }<br />   }catch(Exception e){</p>
		<p>   }<br />  }<br /> }</p>
		<p> /**<br />  * 保存数据,新建和修改都用这个,通过字段名称匹配类型<br />  * @param con<br />  * @param SQL<br />  * @param voclass<br />  * @param paramMap<br />  * @throws Exception<br />  * @author <br />  */<br /> public void save(Connection con, String SQL, Class voclass, Map paramMap)<br />   throws Exception {<br />  PreparedStatement ps = null;<br />  try {<br />   ps = con.prepareStatement(SQL);<br />   if (SQL == null) {<br />    throw new Exception();<br />   }</p>
		<p>   if (paramMap != null &amp;&amp; paramMap.size() &gt; 0) {<br />    int count = 0;<br />    for (Iterator iterator = paramMap.keySet().iterator(); iterator.hasNext(); count++) {</p>
		<p>     String key = (String)iterator.next();<br />     Object object = paramMap.get(key);<br />     setObjectValue(ps, voclass, count+1, key, object);<br />    }<br />   }<br />   ps.executeUpdate();<br />  } catch (Exception e) {<br />   log.error(e);<br />   throw e;<br />  } finally {<br />   try{<br />    if(ps != null) {<br />     ps.close();<br />    }<br />   }catch(Exception e){</p>
		<p>   }<br />  }<br /> }</p>
		<p> /**<br />  * 删除数据<br />  *<br />  * @param con<br />  * @param SQL<br />  * @param params<br />  * @throws Exception<br />  * @author <br />  */<br /> public void remove(Connection con, String SQL, List params)<br />   throws Exception {<br />  PreparedStatement ps = null;<br />  try {<br />   ps = con.prepareStatement(SQL);<br />   if (SQL == null) {<br />    throw new Exception();<br />   }<br />   if (params != null &amp;&amp; params.size() &gt; 0) {<br />    int count = 0;<br />    for (Iterator iterator = params.iterator(); iterator.hasNext(); count++) {<br />     Object object = iterator.next();<br />     setObjectValue(ps, count + 1, object);<br />    }<br />   }<br />   ps.executeUpdate();<br />  } catch (Exception e) {<br />   log.error(e);<br />   throw e;<br />  } finally {<br />   try{<br />    if(ps != null) {<br />     ps.close();<br />    }<br />   }catch(Exception e){</p>
		<p>   }<br />  }<br /> }</p>
		<p> /**<br />  * 根据ID选择数据<br />  *<br />  * @param con<br />  * @param SQL<br />  * @param id<br />  * @param voclass<br />  * @return<br />  * @throws Exception<br />  * @author <br />  */<br /> public BaseVO selectById(Connection con, String SQL, String id,<br />   Class voclass) throws Exception {<br />  Object po = null; // 承载值对象<br />  PreparedStatement ps = null;<br />  ResultSet rs = null;<br />  ResultSetMetaData rsm = null;<br />  try {<br />   ps = con.prepareStatement(SQL);<br />   if (SQL == null) {<br />    throw new Exception();<br />   }</p>
		<p>   ps.setString(1, id);</p>
		<p>   rs = ps.executeQuery();<br />   rsm = rs.getMetaData();<br />   if (rs.next()) {<br />    Map entity = new HashMap();<br />    for (int i = 1; i &lt;= rsm.getColumnCount(); i++) {<br />     String columnName = rsm.getColumnName(i).toLowerCase();<br />     Object columnValue = getObjectValue(rs, voclass, i, columnName);<br />     entity.put(columnName, columnValue);<br />    }<br />    if (voclass != null) {<br />     po = voclass.newInstance();<br />     BeanUtils.populate(po, entity);<br />    }<br />     <br />   }<br />  } catch (Exception e) {<br />   log.error(e);<br />   throw e;<br />  } finally {<br />   try {<br />    if (rs != null) {<br />     rs.close();<br />    }<br />   } catch (Exception e) {</p>
		<p>   }<br />   try {<br />    if (ps != null) {<br />     ps.close();<br />    }<br />   } catch (Exception e) {</p>
		<p>   }<br />  }<br />  return (BaseVO) po;<br /> }</p>
		<p> /**<br />  * 选择记录,不分页<br />  * @param con<br />  * @param SQL<br />  * @param params<br />  * @param voclass<br />  * @return<br />  * @throws Exception<br />  * @author <br />  */<br /> public List select(Connection con, String SQL, List params, Class voclass)<br />   throws Exception {<br />  Object vo = null; // 承载值对象<br />  PreparedStatement ps = null;<br />  ResultSet rs = null;<br />  ResultSetMetaData rsm = null;<br />  List relist = null;<br />  try {<br />   ps = con.prepareStatement(SQL);<br />   if (SQL == null) {<br />    throw new Exception();<br />   }<br />   if (params != null &amp;&amp; params.size() &gt; 0) {<br />    int count = 0;<br />    for (Iterator iterator = params.iterator(); iterator.hasNext(); count++) {<br />     Object object = iterator.next();<br />     setObjectValue(ps, count + 1, object);<br />    }<br />   }<br />   rs = ps.executeQuery();<br />   rsm = rs.getMetaData();<br />   relist = new ArrayList();<br />   while (rs.next()) {<br />    Map entity = new HashMap();<br />    for (int i = 1; i &lt;= rsm.getColumnCount(); i++) {<br />     String columnName = rsm.getColumnName(i).toLowerCase();<br />     Object columnValue = getObjectValue(rs, voclass, i, columnName);<br />     entity.put(columnName, columnValue);<br />     <br />    }<br />    if (voclass != null) {<br />     vo = voclass.newInstance();<br />     BeanUtils.populate(vo, entity);<br />     relist.add(vo);<br />    } else {<br />     relist.add(entity);<br />    }<br />   }<br />  } catch (Exception e) {<br />   log.error(e);<br />   throw e;<br />  } finally {<br />   try {<br />    if (rs != null) {<br />     rs.close();<br />    }<br />   } catch (Exception e) {</p>
		<p>   }<br />   try {<br />    if (ps != null) {<br />     ps.close();<br />    }<br />   } catch (Exception e) {</p>
		<p>   }<br />   <br />  }<br />  return relist;<br /> }</p>
		<p> /**<br />  * 分页查询<br />  *<br />  * @param con<br />  * @param SQL<br />  * @param params<br />  * @param voclass<br />  * @param pagination<br />  * @return<br />  * @throws Exception<br />  * @author <br />  */<br /> public List selectPagination(Connection con, String SQL, List params,<br />   Class voclass, Pagination pagination) throws Exception {<br />  if (SQL == null) {<br />   throw new NullPointerException("SQL不能为空!");<br />  }<br />  if (pagination == null) {<br />   throw new NullPointerException("分页类不能为空!");<br />  }</p>
		<p>  // TODO Auto-generated method stub<br />  Object vo = null; // 承载值对象<br />  PreparedStatement ps = null;<br />  ResultSet rs = null;<br />  ResultSetMetaData rsm = null;<br />  List relist = null;<br />  try {</p>
		<p>   ps = con.prepareStatement("select count(1) as count_ from ( " + SQL + " )");</p>
		<p>   if (params != null &amp;&amp; params.size() &gt; 0) {<br />    int count = 0;<br />    for (Iterator iterator = params.iterator(); iterator.hasNext(); count++) {<br />     Object object = iterator.next();<br />     setObjectValue(ps, count + 1, object);<br />    }<br />   }</p>
		<p>   rs = ps.executeQuery();<br />   if (rs.next()) {<br />    pagination.setTotalCount(rs.getInt(1));<br />    <br />   }<br />   </p>
		<p>   if (pagination.getTotalCount() &gt; 0) {<br />    /* 组成分页内容 */<br />    StringBuffer pagingSelect = new StringBuffer(100);<br />    pagingSelect<br />      .append("select * from ( select row_.*, rownum rownum_ from ( ");<br />    pagingSelect.append(SQL);<br />    pagingSelect<br />      .append(" ) row_ where rownum &lt;= ?) where rownum_ &gt; ?");</p>
		<p>    ps = con.prepareStatement(pagingSelect.toString());<br />    int count = 0;<br />    if (params != null &amp;&amp; params.size() &gt; 0) {<br />     for (Iterator iterator = params.iterator(); iterator.hasNext(); count++) {<br />      Object object = iterator.next();<br />      setObjectValue(ps, count + 1, object);<br />     }<br />    }<br />    <br />    ps.setInt(count + 1, pagination.getPage()<br />      * pagination.getCount());<br />    ps.setInt(count + 2, (pagination.getPage() - 1)<br />      * pagination.getCount());</p>
		<p>    log.info("pagination.getPage():" + pagination.getPage());<br />    log.info("pagination.getCount():" + pagination.getCount());<br />    rs = ps.executeQuery();<br />    rsm = rs.getMetaData();<br />    relist = new ArrayList();<br />    while (rs.next()) {<br />     Map entity = new HashMap();<br />     for (int i = 1; i &lt;= rsm.getColumnCount(); i++) {<br />      String columnName = rsm.getColumnName(i).toLowerCase();<br />      Object columnValue = getObjectValue(rs, voclass, i, columnName);<br />      entity.put(columnName, columnValue);<br />     }<br />     if (voclass != null) {<br />      vo = voclass.newInstance();<br />      BeanUtils.populate(vo, entity);<br />      relist.add(vo);<br />     } else {<br />      relist.add(entity);<br />     }<br />    }<br />   }<br />  } catch (Exception e) {<br />   log.error(e);<br />   throw e;<br />  } finally {<br />   try {<br />    if (rs != null) {<br />     rs.close();<br />    }<br />   } catch (Exception e) {</p>
		<p>   }<br />   try {<br />    if (ps != null) {<br />     ps.close();<br />    }<br />   } catch (Exception e) {</p>
		<p>   }</p>
		<p>  }<br />  return relist;<br /> }</p>
		<p> /**<br />  * 获得SequenceValue<br />  * @param sequenceName<br />  * @return<br />  * @throws Exception<br />  * @author <br />  */<br /> public Long getSequenceValue(Connection con, String sequenceName)throws Exception {<br />  PreparedStatement ps = null;<br />  ResultSet rs = null;<br />  Long sequenceValue = null;<br />  try{<br />   ps = con.prepareStatement("select " + sequenceName + ".nextval from dual");<br />   rs = ps.executeQuery();<br />   if(rs.next()) {<br />    sequenceValue = new Long(rs.getLong(1));<br />   }<br />  }catch(Exception e){<br />   log.error(e);<br />   throw e;<br />  }finally{<br />   try {<br />    if (rs != null) {<br />     rs.close();<br />    }<br />   } catch (Exception e) {</p>
		<p>   }<br />   try {<br />    if (ps != null) {<br />     ps.close();<br />    }<br />   } catch (Exception e) {</p>
		<p>   }<br />  }<br />  return sequenceValue;<br /> }<br /> /**<br />  * 把对象传入数据库<br />  * @param ps<br />  * @param count<br />  * @param object<br />  * @author <br />  */<br /> private final void setObjectValue(PreparedStatement ps, int count, Object object) throws Exception {<br />  log.debug("count is " + count + " object is " + object);<br />  if(object != null) {<br />   if(object instanceof Integer){<br />    ps.setInt(count, ((Integer)object).intValue());<br />   }else if(object instanceof Long) {<br />    ps.setLong(count, ((Long)object).longValue());<br />   }else if(object instanceof BigDecimal){<br />    ps.setBigDecimal(count, (BigDecimal)object);<br />   }else if(object instanceof String){<br />    ps.setString(count, (String)object);<br />   }else if(object instanceof java.util.Date) {<br />    if(object!=null){<br />     long time = ((java.util.Date)object).getTime();<br />     ps.setDate(count, new java.sql.Date(time));<br />    }else{<br />     ps.setDate(count, null);<br />    }<br />   }else{<br />    ps.setObject(count, object);<br />   }<br />  }else{<br />   ps.setNull(count, Types.INTEGER);<br />  }<br /> }</p>
		<p> /**<br />  * 把对象传入数据库<br />  * @param ps<br />  * @param clazz<br />  * @param count<br />  * @param columnName<br />  * @param object<br />  * @throws Exception<br />  * @author <br />  */<br /> private final void setObjectValue(PreparedStatement ps, Class clazz, int count,<br />   String columnName, Object object)throws Exception {<br />  log.debug("count is " + count + " columnName is " + columnName + " object is " + object);<br />  String classType = clazz.getDeclaredField(columnName).getType().getName();<br />  if(classType.equals("java.lang.Integer")){<br />   if(object != null) {<br />    ps.setInt(count, ((Integer)object).intValue());<br />   }else{<br />    ps.setNull(count, Types.INTEGER);<br />   }<br />  }else if(classType.equals("java.lang.Long")) {<br />   if(object != null ) {<br />    ps.setLong(count, ((Long)object).longValue());<br />   }else{<br />    ps.setNull(count, Types.INTEGER);<br />   }<br />  }else if(classType.equals("java.math.BigDecimal")){<br />   if(object != null) {<br />    ps.setBigDecimal(count, (BigDecimal)object);<br />   }else{<br />    ps.setNull(count, Types.NUMERIC);<br />   }<br />  }else if(classType.equals("java.lang.String")){<br />   if(object != null) {<br />    ps.setString(count, (String)object);<br />   }else{<br />    ps.setString(count, null);<br />   }<br />  }else if(classType.equals("java.util.Date")) {<br />   if(object!=null){<br />    long time = ((java.util.Date)object).getTime();<br />    ps.setDate(count, new java.sql.Date(time));<br />   }else{<br />    ps.setDate(count, null);<br />   }<br />  }else{<br />   ps.setObject(count, object);<br />  }<br /> }</p>
		<p> /**<br />  * 把数据从数据取出来<br />  * @param rs<br />  * @param clazz<br />  * @param count<br />  * @param columnName<br />  * @return<br />  * @throws Exception<br />  * @author <br />  */<br /> private final Object getObjectValue(ResultSet rs, Class clazz, int count, String columnName) throws Exception {<br />  Object fieldValue = null;<br />  log.debug("columnName is " + columnName + " count is " + count);<br />  if(columnName != null) {<br />   if("rownum".equals(columnName)) {<br />    fieldValue = new Long(rs.getLong(count));<br />   }else if("rownum_".equals(columnName)) {<br />    fieldValue = new Long(rs.getLong(count));<br />   }else if("count_".equals(columnName)) {<br />    fieldValue = new Long(rs.getLong(count));<br />   }else{<br />    String classType = clazz.getDeclaredField(columnName).getType().getName();</p>
		<p>    if(classType.equals("java.lang.Integer")){<br />     fieldValue =new Integer( rs.getInt(count));<br />    }else if(classType.equals("java.lang.Long")) {<br />     fieldValue =new Long( rs.getLong(count));<br />    }else if(classType.equals("java.math.BigDecimal")){<br />     fieldValue = rs.getBigDecimal(count);<br />    }else if(classType.equals("java.lang.String")){<br />     fieldValue = rs.getString(count);<br />    }else if(classType.equals("java.util.Date")) {<br />     java.sql.Date date = rs.getDate(count);<br />     if(date!= null){<br />      fieldValue = new java.util.Date(date.getTime());<br />     }<br />    }else{<br />     fieldValue = rs.getString(count);<br />    }<br />   }<br />  }<br />  return fieldValue;<br /> }</p>
		<p>
				<br />}<br /></p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/57683.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-07-11 17:27 <a href="http://www.blogjava.net/pdw2009/archive/2006/07/11/57683.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts的Indexed属性用处</title><link>http://www.blogjava.net/pdw2009/archive/2006/06/16/53318.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Fri, 16 Jun 2006 07:50:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/06/16/53318.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/53318.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/06/16/53318.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/53318.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/53318.html</trackback:ping><description><![CDATA[
		<h3 align="center">Struts的Indexed属性用处</h3>
		<p align="center">
				<a title="彭晨阳(网名: 板桥里人)" href="http://www.jdon.com/jive/profile.jsp?user=2">
						<b>
								<font color="#3273ad">banq</font>
						</b>
				</a> http://www.jdon.com Mar 3, 2004 4:19 PM <a href="http://www.jdon.com/jive/post.jsp?forum=62&amp;thread=12429&amp;message=5451228&amp;reply=true"><img height="17" alt="回复此消息" hspace="3" src="http://www.jdon.com/jive/images/reply.gif" width="17" border="0" /></a><font size="+0"><a title="回复此消息" href="http://www.jdon.com/jive/post.jsp?forum=62&amp;thread=12429&amp;message=5451228&amp;reply=true"><font color="#3273ad">回复</font></a></font></p>
		<p class="article">说明：这是Struts的一种高级用法，struts-el中有相关说明，这里讨论在一般struts标签库下如何实现。<br /><br />场景：<br />有一个JavaBeans:如下：<br /><br /><br /><b>public</b><b>class</b> LabelValueBean implements Serializable {<br /><b>public</b> LabelValueBean(String label, String value) {<br /><b>this</b>.label = label;<br /><b>this</b>.value = value;<br />}<br /><b>private</b> String label;<br /><br /><b>public</b> String getLabel() {<br /><b>return</b><b>this</b>.label;<br />}<br /><br /><b>public</b><b>void</b> setLabel(String label) {<br /><b>this</b>.label = label;<br />}<br /><br /><b>private</b> String value;<br /><br /><b>public</b> String getValue() {<br /><b>return</b><b>this</b>.value;<br />}<br /><br /><b>public</b><b>void</b> setValue(String value) {<br /><b>this</b>.value = value;<br />}<br /><br /><b>public</b> String toString() {<br />StringBuffer sb = <b>new</b> StringBuffer(<font color="#00bb00">"LabelValueBean["</font><font color="black">);<br />sb.append(<b>this</b>.label);<br />sb.append(</font><font color="#00bb00">", "</font><font color="black">);<br />sb.append(<b>this</b>.value);<br />sb.append(</font><font color="#00bb00">"]"</font><font color="black">);<br /><b>return</b> (sb.toString());<br />}<br /><br /><br />}<br /><pre></pre><br /><br />这是非常普通的JavaBeans, 如果ActionForm是这样：<br /><br /><br /><b>public</b><b>class</b> TestBean <b>extends</b> ActionForm ｛<br /><br />.....<br /><b>private</b> List lvbeans = <b>new</b> ArrayList();<br /><br />.....<br />｝<br /><pre></pre><br /><br /><br />lvbeans是LabelValueBean的集合，如此组合，如果需要在Jsp页面中对LabelValueBean的label和value值进行增删改，怎么办？<br /><br />使用indexed属性，TestBean类如下：<br /><br /><br /><b>public</b><b>class</b> TestBean <b>extends</b> ActionForm ｛<br /><br />.....<br /><b>private</b> List lvbeans = <b>new</b> ArrayList();<br /><br /><b>public</b> TestBean(){ </font><font color="#0000aa">//初始化数值</font><font color="black"><br />lvbeans.add(<b>new</b> LabelValueBean(</font><font color="#00bb00">"1"</font><font color="black">, </font><font color="#00bb00">"1"</font><font color="black">));<br />lvbeans.add(<b>new</b> LabelValueBean(</font><font color="#00bb00">"2"</font><font color="black">, </font><font color="#00bb00">"2"</font><font color="black">));<br />lvbeans.add(<b>new</b> LabelValueBean(</font><font color="#00bb00">"3"</font><font color="black">, </font><font color="#00bb00">"3"</font><font color="black">));<br /><br />}<br /><br /><b>public</b> LabelValueBean getLvbeans(<b>int</b> index) {<br /><b>return</b> (LabelValueBean)lvbeans.get(index);<br />}<br /><br /><b>public</b> List getLvbeans() {<br /><b>return</b> lvbeans;<br />}<br /><br />.....<br />｝<br /><pre></pre><br /><br />注意上述两个get方法很重要，Jsp页面代码如下：<br /><br /><br /><br /><br /><br />&lt;%@ taglib uri=</font><font color="#00bb00">"/WEB-INF/struts-logic.tld"</font><font color="black"> prefix=</font><font color="#00bb00">"logic"</font><font color="black"> %&gt;<br />&lt;%@ taglib uri=</font><font color="#00bb00">"/WEB-INF/struts-bean.tld"</font><font color="black"> prefix=</font><font color="#00bb00">"bean"</font><font color="black"> %&gt;<br />&lt;%@ taglib uri=</font><font color="#00bb00">"/WEB-INF/struts-html.tld"</font><font color="black"> prefix=</font><font color="#00bb00">"html"</font><font color="black"> %&gt;<br /><br />&lt;jsp:useBean id=</font><font color="#00bb00">"test2"</font><font color="black"> scope=</font><font color="#00bb00">"page"</font><font color="black"><b>class</b>=</font><font color="#00bb00">"test.TestBean"</font><font color="black">/&gt;<br /><br />&lt;h2&gt;Test:<br />&lt;logic:iterate name=</font><font color="#00bb00">"test2"</font><font color="black"> property=</font><font color="#00bb00">"lvbeans"</font><font color="black"> id=</font><font color="#00bb00">"foo"</font><font color="black"> indexId=</font><font color="#00bb00">"ctr"</font><font color="black">&gt;<br />&lt;html:text name=</font><font color="#00bb00">"test2"</font><font color="black"><br />property='&lt;%= </font><font color="#00bb00">"lvbeans["</font><font color="black"> + ctr + </font><font color="#00bb00">"].label"</font><font color="black"> %&gt;' /&gt;<br />&lt;/logic:iterate&gt;<br /><br />&lt;/h2&gt;<br /><pre></pre><br /><br />这样，运行后的输出结果是：<br /><br /><br /><br /><br />&lt;h2&gt;Test:<br /><br />&lt;input type=</font><font color="#00bb00">"text"</font><font color="black"> name=</font><font color="#00bb00">"lvbeans[0].label"</font><font color="black"> value=</font><font color="#00bb00">"1"</font><font color="black">&gt;<br /><br />&lt;input type=</font><font color="#00bb00">"text"</font><font color="black"> name=</font><font color="#00bb00">"lvbeans[1].label"</font><font color="black"> value=</font><font color="#00bb00">"2"</font><font color="black">&gt;<br /><br />&lt;input type=</font><font color="#00bb00">"text"</font><font color="black"> name=</font><font color="#00bb00">"lvbeans[2].label"</font><font color="black"> value=</font><font color="#00bb00">"3"</font><font color="black">&gt;<br /><br /><br />&lt;/h2&gt;<br /><pre></pre><br /><br />这样修改TestBean中的List中的LabelValueBean数值了。<br /></font></p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/53318.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-06-16 15:50 <a href="http://www.blogjava.net/pdw2009/archive/2006/06/16/53318.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web 项目中异常处理</title><link>http://www.blogjava.net/pdw2009/archive/2006/06/15/52960.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Thu, 15 Jun 2006 03:44:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/06/15/52960.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/52960.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/06/15/52960.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/52960.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/52960.html</trackback:ping><description><![CDATA[jsp中错误处理页面<br /><br /><br />举例说明：mustBeError.jsp<br />&lt;%@ page contentType=<font color="#00bb00" size="2">"text/html; charset=gb2312"</font><font color="black" size="2"><br />language=</font><font color="#00bb00" size="2">"java"</font><font color="black" size="2"><font color="blue" size="2">import</font>=</font><font color="#00bb00" size="2">"java.sql.*,javax.servlet.*,javax.servlet.http.*"</font><font color="black" size="2"> errorPage=</font><font color="#00bb00" size="2">"error.jsp"</font><font color="black" size="2"> %&gt;<br />&lt;%<br /></font><font color="#0000aa" size="2"><i>//这个页面一定会出错。</i></font><font color="black" size="2"><br /><font color="blue" size="2">int</font> i=0;<br /><font color="blue" size="2">int</font> j=1;<br />out.println(j/i);<br />%&gt;<br /><br /><br />在此中通过errorPage=</font><font color="#00bb00" size="2">"error.jsp"</font><font color="black" size="2">来指定出错时错误处理页面<br /><br /><br />&lt;---------------------------&gt;<br />error.jsp<br /><br />&lt;%@ page contentType=</font><font color="#00bb00" size="2">"text/html; charset=gb2312"</font><font color="black" size="2"> language=</font><font color="#00bb00" size="2">"java"</font><font color="black" size="2"> isErrorPage=</font><font color="#00bb00" size="2">"true"</font><font color="black" size="2"><font color="blue" size="2">import</font>=</font><font color="#00bb00" size="2">"java.io.*"</font><font color="black" size="2">%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;出错了！&lt;/title&gt;<br />&lt;meta http-equiv=</font><font color="#00bb00" size="2">"Content-Type"</font><font color="black" size="2"> content=</font><font color="#00bb00" size="2">"text/html; charset=gb2312"</font><font color="black" size="2">&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />出错了！&lt;br&gt;<br />发生了以下的错误：<br />&lt;br&gt;&lt;hr&gt;&lt;font color=red&gt;&lt;hr&gt;<br />getMessage():&lt;br&gt;<br />&lt;%=exception.getMessage()%&gt;&lt;br&gt;&lt;hr&gt;<br />getLocalizedMessage():&lt;br&gt;<br />&lt;%=exception.getLocalizedMessage()%&gt;&lt;br&gt;&lt;hr&gt;<br />PrintStatckTrace():&lt;br&gt;<br />&lt;%<br />StringWriter sw=<font color="blue" size="2">new</font> StringWriter();<br />PrintWriter pw=<font color="blue" size="2">new</font> PrintWriter(sw);<br />exception.printStackTrace(pw);<br />out.println(sw);<br />%&gt;&lt;br&gt;<br />&lt;/font&gt;&lt;/body&gt;<br />&lt;/html&gt;<br /><br /><br />在error.jsp中，page指令中指定:isErrorPage=</font><font color="#00bb00" size="2">"true"</font><font color="black" size="2"><br /><br />&lt;----------------------&gt;<br />在web.xml中声明异常和错误页面<br /><br />例如：<br />&lt;?xml version=</font><font color="#00bb00" size="2">"1.0"</font><font color="black" size="2"> encoding=</font><font color="#00bb00" size="2">"ISO-8859-1"</font><font color="black" size="2">?&gt;<br /><br />&lt;web-app xmlns=</font><font color="#00bb00" size="2">"http://java.sun.com/xml/ns/j2ee"</font><font color="black" size="2"><br />xmlns:xsi=</font><font color="#00bb00" size="2">"http://www.w3.org/2001/XMLSchema-instance"</font><font color="black" size="2"><br />xsi:schemaLocation=</font><font color="#00bb00" size="2">"http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd"</font><font color="black" size="2"><br />version=</font><font color="#00bb00" size="2">"2.4"</font><font color="black" size="2">&gt;<br />&lt;error-page&gt;<br />&lt;error-code&gt;404&lt;/error-code&gt;<br />&lt;location&gt;/pageNotFound.html&lt;/location&gt;<br />&lt;/error-page&gt;<br /><br />&lt;error-page&gt;<br />&lt;exception-type&gt;java.lang.NumberFormatException&lt;/exception-type&gt;<br />&lt;location&gt;/NumberFormatException.html&lt;/location&gt;<br />&lt;/error-page&gt; <br /><br />&lt;/web-app&gt; <br /><br />说明：指定错误代码为404是，调用/pageNotFound.html<br />也可以指定错误类型如：java.lang.NumberFormatException，出现此错误类型是调用/NumberFormatException.html</font><img src ="http://www.blogjava.net/pdw2009/aggbug/52960.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-06-15 11:44 <a href="http://www.blogjava.net/pdw2009/archive/2006/06/15/52960.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一篇WebLogic server8.1 JMS入门的不错的文章(转贴)</title><link>http://www.blogjava.net/pdw2009/archive/2006/05/10/45461.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Wed, 10 May 2006 07:09:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/05/10/45461.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/45461.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/05/10/45461.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/45461.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/45461.html</trackback:ping><description><![CDATA[
		<span class="h1b">BEA WebLogic Server8.1 JMS入门</span>
		<br />
		<br />
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td height="64">时间：2003-11-28<br />作者：<a href="http://dev2dev.bea.com.cn/author/67.html">周海根</a><br />浏览次数：
<script language="JavaScript" src="http://203.81.25.103/cgi-bin/beadevcount.cgi?d_id=547" type="text/JavaScript"></script>
 3105 <br />本文关键字：<a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&amp;keywords=JMS">JMS</a>, <a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&amp;keywords=基础">基础</a>, <a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&amp;keywords=教程">教程</a>, <a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&amp;keywords=概念">概念</a></td>
								<td>
										<table class="box_content" cellspacing="0" cellpadding="0" border="0">
												<tbody>
														<tr>
																<td>
																		<span class="h2b">文章工具</span>
																		<br />
																		<img height="10" alt="推荐给朋友" src="http://dev2dev.bea.com.cn/images/letter001.gif" width="19" align="absMiddle" /> <a href="javascript:sendmail()">推荐给朋友</a><br /><img height="18" alt="打印文章" src="http://dev2dev.bea.com.cn/images/print001.gif" width="19" align="absMiddle" /> <a href="javascript:window.print()">打印文章</a></td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<!-- 提取技术文章 -->
		<div class="beas">
				<img height="1" alt="" src="http://dev2dev.bea.com.cn/images/dot6B6B6B.gif" width="100%" />
		</div>
		<p>
				<b>一. JMS简介<br />1. JMS基本概念</b>
				<br />JMS(Java Message Service)是访问企业消息系统的标准API,它便于消息系<br />统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发。<br /><img height="167" src="http://dev2dev.bea.com.cn/images/school/server031128/image001.gif" width="318" /><br /><b>2. JMS基本功能</b><br />JMS是用于和面向消息的中间件相互通信的应用程序接口。它既支持点对点(point-to-point)的域，又支持发布/订阅(publish/subscribe)类型的域，并且提供对下列类型的支持：经认可的消息传递,事务型消息的传递，一致性消息和具有持久性的订阅者支持。JMS还提供了另一种方式来对您的应用与旧的后台系统相集成。<br /><b>3. WebLogic JMS Server介绍</b><br />WebLogic Server8.1符合JAVA规范,并通过Sun Microsystems J2EE 1.3认<br />证.作为WebLogic的一部分,当然WebLogic JMS Server也完全遵从JMS规范,还支持集群,并可以应用于实际企业系统.下图是WebLogic JMS Server体系结构.图中可以看到WebLogic JMS Server主要组件有: WebLogic JMS servers(用于消息通信),Java客户端,JNDI(用于域名查找), 后备存储(用于持久消息存储,基于文件或者JDBC数据库).<br /><img height="400" src="http://dev2dev.bea.com.cn/images/school/server031128/image002.jpg" width="448" /><br /><b>二. WebLogic JMS特性</b><br />1. 消息通信模型<br />JMS 支持两种消息通信模型：点到点（point-to-point）（PTP）模型和发布/订阅（Pub/Sub）模型。除了下列不同之外，这两种消息通信模型非常地相似：<br />PTP 模型规定了一个消息只能有一个接收者;Pub/Sub 模型允许一个消息可以有多个接收者。<br />2. 消息组成<br />消息传递系统的中心就是消息。<br />一条 Message 分为三个组成部分： <br />· 头（header）是个标准字段集，客户机和供应商都用它来标识和路由消息。<br />· 属性（property）支持把可选头字段添加到消息。如果您的应用程序需要不使用标准头字段对消息编目和分类，您就可以添加一个属性到消息以实现这个编目和分类。提供 set&lt;Type&gt;Property(...) 和 get&lt;Type&gt;Property(...) 方法以设置和获取各种 Java 类型的属性，包括 Object。JMS 定义了一个供应商选择提供的标准属性集。<br />· 消息的主体（body）包含要发送给接收应用程序的内容。每个消息接口特定于它所支持的内容类型。 <br />JMS 为不同类型的内容提供了它们各自的消息类型，但是所有消息都派生自 Message 接口。<br />· StreamMessage：包含 Java 基本数值流，用标准流操作来顺序的填充和读取。<br />· MapMessage：包含一组名/值对；名称为 string 类型，而值为 Java 的基本类型。<br />· TextMessage：包含一个 String。<br />· ObjectMessage：包含一个 Serializable Java 对象；能使用 JDK 的集合类。<br />· BytesMessage：包含未解释字节流: 编码主体以匹配现存的消息格式。<br />· XMLMessage: 包含XML内容。扩展TextMessage,XMLMessage 类型的使用，使得消息过滤非常便利。<br />3. 消息确认模式<br />非事务性会话中，应用程序创建的会话有5 种确认模式,而在事务性会话中，确认模式被忽略。<br />五种确认模式说明:<br />· AUTO_ACKNOWLEDGE：自动确认模式。一旦接收方应用程序的方法调用从处理消息处返回，会话对象就会确认消息的接收。<br />· CLIENT_ACKNOWLEDGE：客户端确认模式。会话对象依赖于应用程序对被接收的消息调用一个acknowledge()方法。一旦这个方法被调用，会话会确认最后一次确认之后所有接收到的消息。这种模式允许应用程序以一个调用来接收，处理并确认一批消息。注意：在管理控制台中，如果连接工厂的Acknowledge Policy（确认方针）属性被设置为"Previous"（提前），但是你希望为一个给定的会话确认所有接收到的消息，那么就用最后一条消息来调用acknowledge()方法。<br />· DUPS_OK_ACKNOWLEDGE：允许副本的确认模式。一旦接收方应用程序的方法调用从处理消息处返回，会话对象就会确认消息的接收；而且允许重复确认。在需要考虑资源使用时，这种模式非常有效。注意：如果你的应用程序无法处理重复的消息的话，你应该避免使用这种模式。如果发送消息的初始化尝试失败，那么重复的消息可以被重新发送。<br />· NO_ACKNOWLEDGE：不确认模式。不确认收到的消息是需要的。消息发送给一个NO_ACKNOWLEDGE 会话后，它们会被WebLogic 服务器立即删除。在这种模式下，将无法重新获得已接收的消息，而且可能导致下面的结果：1. 消息可能丢失；和（或者）另一种情况：2. 如果发送消息的初始化尝试失败，会出现重复消息被发送的情况。<br />· MULTICAST_NO_ACKNOWLEDGE：IP组播下的不确认模式，同样无需确认。发送给一个MULTICAST_NO_ACKNOWLEDGE会话的消息， 会共享之前所述的NO_ACKNOWLEDGE 确认模式一样的特征。这种模式支持希望通过IP 组播方式进行消息通信的应用程序，而且无需依赖会话确认提供的服务质量。注意：如果你的应用程序无法处理消息的丢失或者重复，那么你应该避免使用这种模式。如果发送消息的初始化尝试失败的话，重复的消息可能会被再次发送。<br />注：在上表的5 种确认模式中，AUTO_ACKNOWLEDGE ，DUPS_OK_ACKNOWLEDGE 和<br />CLIENT_ACKNOWLEDGE 是JMS 规范定义的，NO_ACKNOWLEDGE 和MULTICAST_NO_ACKNOWLEDGE是WebLogic JMS 提供的。<br /><b>三. 配置JMS</b><br />1. 创建连接工厂<br />(1) 启动WebLogic Server8.1,登录控制台,选中JMS Connection Factories节点,点击右边的" Configure a new JMS Connection Factory...";<br /><img height="415" src="http://dev2dev.bea.com.cn/images/school/server031128/image004.jpg" width="554" /><br />(2) 填写连接工厂的名称SendJMSFactory和JNDI名称SendJMSFactory,点击"Create";<br /><img height="415" src="http://dev2dev.bea.com.cn/images/school/server031128/image006.jpg" width="554" /><br />(3) 勾上"myserver",将SendJMSFactory应用到myserver;<br /><img height="415" src="http://dev2dev.bea.com.cn/images/school/server031128/image008.jpg" width="554" /><br />2. 定义后备存储<br />(1) 选中JMS Stores节点,点击右边的" Configure a new JMS Connection Factory...";<br /><img height="415" src="http://dev2dev.bea.com.cn/images/school/server031128/image010.jpg" width="554" /><br />(2) 填写文件后备存储的名称SendFileStore和目录Directionary E:\BEA\user_projects\domains\mydomain\sendfilestore,点击"Create".<br /><img height="415" src="http://dev2dev.bea.com.cn/images/school/server031128/image012.jpg" width="554" /><br />3. 创建JMS服务器<br />(1) 选中JMS Servers节点,点击右边的" Configure a new JMSServer...";<br /><img height="415" src="http://dev2dev.bea.com.cn/images/school/server031128/image014.jpg" width="554" /><br />(2) 填写JMS服务器的名称SendJMSServer和Paging Store设为" SendFileStore",点击"Create"; <br /><img height="415" src="http://dev2dev.bea.com.cn/images/school/server031128/image016.jpg" width="554" /><br />(3) Target选中"myserver",将SendJMSServer应用到myserver.<br /><img height="415" src="http://dev2dev.bea.com.cn/images/school/server031128/image018.jpg" width="554" /><br />4. 创建消息队列<br />(1) 展开"SendJMSServer"节点,点击" Configure a new JMS Queue...";<br /><img height="415" src="http://dev2dev.bea.com.cn/images/school/server031128/image020.jpg" width="554" /><br />(2) 填写消息队列的名称SendJMSQueue和JNDI名称SendJMSQueue,点击"Create"; <br /><img height="415" src="http://dev2dev.bea.com.cn/images/school/server031128/image022.jpg" width="554" /><br />四. JMS应用程序<br />一个 JMS 应用程序由下列元素组成： <br />· JMS 客户机。 用 JMS API 发送和接收消息的 Java 程序。<br />· 非 JMS（Non-JMS）客户机。 认识到这一点很重要 - 旧的程序经常成为整个 JMS 应用程序的一部分，而且它们的包含应该在设计时预先考虑。<br />· 消息。 在 JMS 和非 JMS 客户机之间交换的消息的格式和内容是 JMS 应用程序设计所必须考虑的部分。<br />· JMS 供应商。供应商必须提供特定于其 MOM 产品的具体的实现。<br />· 受管对象。 消息传递系统供应商的管理员创建了一个对象，它独立于供应商专有的技术。包括连接工厂ConnectionFactory和目的Destination。<br />一种典型的 JMS 程序需要经过下列步骤才能开始消息产生和使用:<br />· 通过 JNDI 查找 ConnectionFactory。<br />· 通过 JNDI 查找一个或多个 Destination。 <br />· 用 ConnectionFactory 创建一个 Connection。 <br />· 用 Connection 创建一个或多个 Session。 <br />· 用 Session 和 Destination 创建所需的 MessageProducer 和 MessageConsumer。 <br />· 启动 Connection。 <br />下面利用上面配置的JMS资源演示点对点消息发送和接收的过程。<br />五. 设计消息发送端<br />1. 使用的JMS资源<br />服务器URL: t3://localhost:80<br />连接工厂: SendJMSFactory<br />队列: SendJMSQueue<br />2. 设计步骤<br />· 初始化JNDI Tree<br />Hashtable env = new Hashtable();<br />env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);<br />env.put(Context.PROVIDER_URL, PROVIDER_URL);<br />return new InitialContext(env);<br />· lookup ConnectionFactory<br />qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);<br />· lookup Destination<br />queue = (Queue) ctx.lookup(queueName);<br />· 用 ConnectionFactory 创建Connection <br />qcon = qconFactory.createQueueConnection();<br />· 用 Connection 创建一个Session<br />qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);<br />· 用 Session 和 Destination 创建MessageProducer<br />qsender = qsession.createSender(queue);<br />· 启动 Connection。<br />qcon.start();<br />· 发送消息<br />msg = qsession.createTextMessage();<br />msg.setText(message);<br />qsender.send(msg);<br />3. 源代码<br />package jmssample;</p>
		<p>import java.util.Hashtable;<br />import javax.jms.*;<br />import javax.naming.Context;<br />import javax.naming.InitialContext;<br />import javax.naming.NamingException;<br />import java.io.BufferedReader;<br />import java.io.IOException;<br />import java.io.InputStreamReader;</p>
		<p>/** This example shows how to establish a connection<br />* and send messages to the JMS queue. The classes in this<br />* package operate on the same JMS queue. Run the classes together to<br />* witness messages being sent and received, and to browse the queue<br />* for messages. The class is used to send messages to the queue.<br />*<br />* @author Copyright (c) 1999-2003 by BEA Systems, Inc. All Rights Reserved.<br />*/<br />public class QueueSend<br />{<br />// Defines the JNDI context factory.<br />public final static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";</p>
		<p>// Defines the JNDI provider url.<br />public final static String PROVIDER_URL=" t3://localhost:80";</p>
		<p>// Defines the JMS connection factory for the queue.<br />public final static String JMS_FACTORY="SendJMSFactory";</p>
		<p>// Defines the queue.<br />public final static String QUEUE="SendJMSQueue";</p>
		<p>
				<br />private QueueConnectionFactory qconFactory;<br />private QueueConnection qcon;<br />private QueueSession qsession;<br />private QueueSender qsender;<br />private Queue queue;<br />private TextMessage msg;</p>
		<p>/**<br />* Creates all the necessary objects for sending<br />* messages to a JMS queue.<br />*<br />* @param ctx JNDI initial context<br />* @param queueName name of queue<br />* @exception NamingException if operation cannot be performed<br />* @exception JMSException if JMS fails to initialize due to internal error<br />*/<br />public void init(Context ctx, String queueName)<br />throws NamingException, JMSException<br />{<br />qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);<br />qcon = qconFactory.createQueueConnection();<br />qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);<br />queue = (Queue) ctx.lookup(queueName);<br />qsender = qsession.createSender(queue);<br />msg = qsession.createTextMessage();<br />qcon.start();<br />}</p>
		<p>/**<br />* Sends a message to a JMS queue.<br />*<br />* @param message message to be sent<br />* @exception JMSException if JMS fails to send message due to internal error<br />*/<br />public void send(String message) throws JMSException {<br />msg.setText(message);<br />qsender.send(msg);<br />}</p>
		<p>/**<br />* Closes JMS objects.<br />* @exception JMSException if JMS fails to close objects due to internal error<br />*/<br />public void close() throws JMSException {<br />qsender.close();<br />qsession.close();<br />qcon.close();<br />}<br />/** main() method.<br />*<br />* @param args WebLogic Server URL<br />* @exception Exception if operation fails<br />*/<br />public static void main(String[] args) throws Exception {<br />InitialContext ic = getInitialContext();<br />QueueSend qs = new QueueSend();<br />qs.init(ic, QUEUE);<br />readAndSend(qs);<br />qs.close();<br />}</p>
		<p>private static void readAndSend(QueueSend qs)<br />throws IOException, JMSException<br />{<br />BufferedReader msgStream = new BufferedReader(new InputStreamReader(System.in));<br />String line=null;<br />boolean quitNow = false;<br />do {<br />System.out.print("Enter message (\"quit\" to quit): ");<br />line = msgStream.readLine();<br />if (line != null &amp;&amp; line.trim().length() != 0) {<br />qs.send(line);<br />System.out.println("JMS Message Sent: "+line+"\n");<br />quitNow = line.equalsIgnoreCase("quit");<br />}<br />} while (! quitNow);</p>
		<p>}</p>
		<p>private static InitialContext getInitialContext()<br />throws NamingException<br />{<br />Hashtable env = new Hashtable();<br />env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);<br />env.put(Context.PROVIDER_URL, PROVIDER_URL);<br />return new InitialContext(env);<br />}</p>
		<p>}</p>
		<p>六. 设计消息接收端<br />1. 使用的JMS资源<br />服务器URL: t3://localhost:80<br />连接工厂: SendJMSFactory<br />队列: SendJMSQueue<br />2. 设计步骤<br />· 初始化JNDI Tree<br />Hashtable env = new Hashtable();<br />env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);<br />env.put(Context.PROVIDER_URL, PROVIDER_URL);<br />return new InitialContext(env);<br />· lookup ConnectionFactory<br />qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);<br />· lookup Destination<br />queue = (Queue) ctx.lookup(queueName);<br />· 用 ConnectionFactory 创建Connection <br />qcon = qconFactory.createQueueConnection();<br />· 用 Connection 创建一个Session<br />qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);<br />· 用 Session 和 Destination 创建MessageConsumer<br />qreceiver = qsession.createReceiver(queue);<br />· 设置监听<br />qreceiver.setMessageListener(this);<br />· 启动 Connection<br />qcon.start();<br />3. 源代码<br />package jmssample;</p>
		<p>import java.util.Hashtable;<br />import javax.jms.*;<br />import javax.naming.Context;<br />import javax.naming.InitialContext;<br />import javax.naming.NamingException;<br />import java.util.Hashtable;<br />import javax.jms.*;<br />import javax.naming.Context;<br />import javax.naming.InitialContext;<br />import javax.naming.NamingException;</p>
		<p>/**<br />* This example shows how to establish a connection to<br />* and receive messages from a JMS queue. The classes in this<br />* package operate on the same JMS queue. Run the classes together to<br />* witness messages being sent and received, and to browse the queue<br />* for messages. This class is used to receive and remove messages<br />* from the queue.<br />*<br />* @author Copyright (c) 1999-2003 by BEA Systems, Inc. All Rights Reserved.<br />*/<br />public class QueueReceive implements MessageListener<br />{<br />// Defines the JNDI context factory.<br />public final static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";</p>
		<p>// Defines the JNDI provider url.<br />public final static String PROVIDER_URL=" t3://localhost:80";</p>
		<p>// Defines the JMS connection factory for the queue.<br />public final static String JMS_FACTORY="SendJMSFactory";</p>
		<p>// Defines the queue.<br />public final static String QUEUE="SendJMSQueue";</p>
		<p>private QueueConnectionFactory qconFactory;<br />private QueueConnection qcon;<br />private QueueSession qsession;<br />private QueueReceiver qreceiver;<br />private Queue queue;<br />private boolean quit = false;</p>
		<p>/**<br />* Message listener interface.<br />* @param msg message<br />*/<br />public void onMessage(Message msg)<br />{<br />try {<br />String msgText;<br />if (msg instanceof TextMessage) {<br />msgText = ((TextMessage)msg).getText();<br />} else {<br />msgText = msg.toString();<br />}</p>
		<p>System.out.println("Message Received: "+ msgText );</p>
		<p>if (msgText.equalsIgnoreCase("quit")) {<br />synchronized(this) {<br />quit = true;<br />this.notifyAll(); // Notify main thread to quit<br />}<br />}<br />} catch (JMSException jmse) {<br />jmse.printStackTrace();<br />}<br />}</p>
		<p>/**<br />* Creates all the necessary objects for receiving<br />* messages from a JMS queue.<br />*<br />* @param ctx JNDI initial context<br />* @param queueName name of queue<br />* @exception NamingException if operation cannot be performed<br />* @exception JMSException if JMS fails to initialize due to internal error<br />*/<br />public void init(Context ctx, String queueName)<br />throws NamingException, JMSException<br />{<br />qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);<br />qcon = qconFactory.createQueueConnection();<br />qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);<br />queue = (Queue) ctx.lookup(queueName);<br />qreceiver = qsession.createReceiver(queue);<br />qreceiver.setMessageListener(this);<br />qcon.start();<br />}</p>
		<p>/**<br />* Closes JMS objects.<br />* @exception JMSException if JMS fails to close objects due to internal error<br />*/<br />public void close()throws JMSException<br />{<br />qreceiver.close();<br />qsession.close();<br />qcon.close();<br />}<br />/**<br />* main() method.<br />*<br />* @param args WebLogic Server URL<br />* @exception Exception if execution fails<br />*/</p>
		<p>public static void main(String[] args) throws Exception {</p>
		<p>InitialContext ic = getInitialContext();<br />QueueReceive qr = new QueueReceive();<br />qr.init(ic, QUEUE);</p>
		<p>System.out.println("JMS Ready To Receive Messages (To quit, send a \"quit\" message).");</p>
		<p>// Wait until a "quit" message has been received.<br />synchronized(qr) {<br />while (! qr.quit) {<br />try {<br />qr.wait();<br />} catch (InterruptedException ie) {}<br />}<br />}<br />qr.close();<br />}</p>
		<p>private static InitialContext getInitialContext()<br />throws NamingException<br />{<br />Hashtable env = new Hashtable();<br />env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);<br />env.put(Context.PROVIDER_URL, PROVIDER_URL);<br />return new InitialContext(env);<br />}</p>
		<p>
				<br />}<br />七. 测试消息发送和接收<br />1. 设置WebLogic Classpath;<br /></p>
		<img height="600" src="http://dev2dev.bea.com.cn/images/school/server031128/image023.png" width="664" />
		<br />2. 转到发送接收程序目录编译文件;<br /><img height="431" src="http://dev2dev.bea.com.cn/images/school/server031128/image025.png" width="668" /><br />3. 执行接受程序;<br />4. 打开另一窗口,执行发送程序;<br /><p><img height="431" src="http://dev2dev.bea.com.cn/images/school/server031128/image027.png" width="668" /><br />5. 输入发送消息"quit",接收程序结束. <br /><img height="431" src="http://dev2dev.bea.com.cn/images/school/server031128/image029.png" width="668" /><br /><br /><b>总结</b><br />本文先简要介绍了JMS的一些基本概念,继而引入了WebLogic JMS Server的体系结构和相关特性。在此基础之上,图文并茂地讲述了JMS在WebLogic Server 8.1上的配置。最后在解剖JMS应用程序框架的同时,以点对点为例演示了JMS的发送接收消息流程。<br /><br /></p><!--文章其他信息--><img src ="http://www.blogjava.net/pdw2009/aggbug/45461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-05-10 15:09 <a href="http://www.blogjava.net/pdw2009/archive/2006/05/10/45461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>原来logic:iterator也可以这样用</title><link>http://www.blogjava.net/pdw2009/archive/2006/04/19/41984.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Wed, 19 Apr 2006 11:04:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/04/19/41984.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/41984.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/04/19/41984.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/41984.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/41984.html</trackback:ping><description><![CDATA[      <br />今天发现原来呆以这样把数据保存到list中，<br />while (rs.next()) {<br />        map = new HashMap();<br />        for (int i = 1; i &lt;= rsmd.getColumnCount(); i++) {<br />          map.put(rsmd.getColumnName(i).toLowerCase(), rs.getString(i));<br />        }<br />        list.add(map);<br />      }<br /><br />然后这样用&lt;logic:iterator&gt;输出:<br /><br />                &lt;logic:iterate id="l" name="target"&gt;<br />                &lt;option value="&lt;bean:write name="l" property="deptno"/&gt;"&gt;&lt;bean:write name="l" property="deptname"/&gt;&lt;/option&gt;<br />                &lt;/logic:iterate&gt;<br /><br />在&lt;logic:iterate&gt;&lt;/logic:iterate&gt;或&lt;nested:iterate&gt;&lt;/nested:iterate&gt;<br /><br />中，可以通过pageContext.getAttribute(标签id名)获得当前遍历的bean!!<br /><br /><img src ="http://www.blogjava.net/pdw2009/aggbug/41984.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-04-19 19:04 <a href="http://www.blogjava.net/pdw2009/archive/2006/04/19/41984.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设置容器使用的内存</title><link>http://www.blogjava.net/pdw2009/archive/2006/04/18/41606.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Tue, 18 Apr 2006 03:11:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/04/18/41606.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/41606.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/04/18/41606.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/41606.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/41606.html</trackback:ping><description><![CDATA[1、 如何给weblogic指定大小的内存? <br /><br />在启动Weblogic的脚本中（位于所在Domian对应服务器目录下的startServerName），增 <br /><br />加set MEM_ARGS=-Xms32m -Xmx200m，可以调整最小内存为32M，最大200M <br /><br /><br /><br />2、Tomcat默认可以使用的内存为128MB，在较大型的应用项目中，这点内存是不够的，需要调大。<br /><br />　　Windows下，在文件{tomcat_home}/bin/catalina.bat，Unix下，在文件{tomcat_home}/bin/catalina.sh的前面，增加如下设置：<br /><br />　　JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'<br /><br />　　需要把这个两个参数值调大。例如：<br /><br />　　JAVA_OPTS='-Xms256m -Xmx512m'<br /><br />　　表示初始化内存为256MB，可以使用的最大内存为512MB。<br /><br /><br /><br /><br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/pdw2009/aggbug/41606.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-04-18 11:11 <a href="http://www.blogjava.net/pdw2009/archive/2006/04/18/41606.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>