﻿<?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-wzl002-文章分类-struts学习项目</title><link>http://www.blogjava.net/wzl002/category/36275.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 23 Dec 2008 14:22:52 GMT</lastBuildDate><pubDate>Tue, 23 Dec 2008 14:22:52 GMT</pubDate><ttl>60</ttl><item><title>项目总结报告</title><link>http://www.blogjava.net/wzl002/articles/247973.html</link><dc:creator>wesley1987</dc:creator><author>wesley1987</author><pubDate>Tue, 23 Dec 2008 13:38:00 GMT</pubDate><guid>http://www.blogjava.net/wzl002/articles/247973.html</guid><wfw:comment>http://www.blogjava.net/wzl002/comments/247973.html</wfw:comment><comments>http://www.blogjava.net/wzl002/articles/247973.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wzl002/comments/commentRss/247973.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wzl002/services/trackbacks/247973.html</trackback:ping><description><![CDATA[&nbsp;
<h3><span style="font-size: 14pt; line-height: 173%; font-family: 楷体_GB2312">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 14pt; line-height: 173%; font-family: 楷体_GB2312">项目实训心得</span></h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体">在这一个多月的项目实训过程，我感到是我专业学习中收获非常大的一个月。在这个月里，我体验到了团队合作的经验，编程过程中的乐趣，以及将学习应用到实际、从实践中学习的丰收感。</span></p>
<p><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体">这一个月里，得到了二个最宝贵体验</span><span style="font-size: 12pt; font-family: 宋体">：一是参与了一个团队合作的、有很强多同模块相互性、和一套完整生命周期流程的工程项目。这一套项目按照软件工程的流程一步步走下来，经历了需求分析，详细设计，实际编码和测试这一系列阶段。一步一步慢慢的走下来。虽然对于真实的项目来说，这个项目的复杂度和规模并不是很大，逻辑要求也不是太严格。但是对于只参加一些</span><span style="font-size: 12pt">3-4</span><span style="font-size: 12pt; font-family: 宋体">人的项目编程的我来说，已经第一次让我体真正的体验到将编程作为一项工程来执行的难得经验。</span></p>
<p><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体">第二个体验是详细设计中，将软件架构和分层的思想以及简单的工程模式等应用到了项目中。使用框架等方式，非常有效的提高了代码的复用和工程的可维护性，虽然多层结构看似麻烦，但实际上它很大的降低了设计的复杂度，在实际的体验中感到，使用了框架后的模块，维护起来清晰了很多，容易了很多，降低了耦合，同时增强了模块间的交互和重用。</span></p>
<p><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体">随着整个工程的流程一步步进行，我们看到了一个工程的一次次成长。项目伊始，我们得到了项目需求文档（我想这一步在实际中也应该是由项目人员精心设计才完成的），对于工程的不同用例，将工程分为了六个模块，并对应的将组员分为了六组。我们的第一步是完成对需求文档的理解，而成果就是对应了各个模块的实际功能的静态页面，因为软件客户最后体验所有需求的功能实现就是通过操作页面来实现，所以页面要在客户需求的角度去考虑，同时要将需求的功能都赋予体现。</span><span style="font-size: 12pt; font-family: 宋体">在这个过程中，大家除了按功能分化出页面分类外，大部分时间还用来精心设计页面的风格。页面布局和菜单中大量用到了</span><span style="font-size: 12pt">JavaScript</span><span style="font-size: 12pt; font-family: 宋体">和</span><span style="font-size: 12pt">CSS</span><span style="font-size: 12pt; font-family: 宋体">。和以我往设计页面时不同的是，为了让大家可以公用这些设计，在页面的布局中不能太复杂，甚至几乎是不能在需要统一的地面对整体的布置有任何复杂的干预。所有希望统一的部分</span><span style="font-size: 12pt; font-family: 宋体">都要在公共的</span><span style="font-size: 12pt">CSS</span><span style="font-size: 12pt; font-family: 宋体">和</span><span style="font-size: 12pt">JavaScript</span><span style="font-size: 12pt; font-family: 宋体">中做出方便统一使用的类或方法，在页面本身的代码中几乎看不到布局设计，只有功能组件。</span></p>
<p><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体">在页面设计通过审核之后就是详细设计阶段了，在这阶段的前几天我们犯了一个顺序错误，直接从数据库着手。结果由于项目的功能的复杂性和模块之间太多需要交互的地方，使得数据库的设计进行的很缓慢。经过老师的提点我们改为从程序编码的框架开始着手。联系各功能的具体实现来设计编码的层次结构（框架详细设计在下一节），划分出公共平台。这样再从各模块的功能及其交互划分来联系设计数据库就变的清晰了很多。在设计过程中我们还使用了</span><span style="font-size: 12pt">E-R</span><span style="font-size: 12pt; font-family: 宋体">图来设计出关系数据库，即从参与的对象和对象之间的关系最终设计出数据库的方法。在这次设计中发现自己在利用一些系统的理论进行整体的数据库模型设计方面还存在很多不足。数据库完成后，对框架的设计也基本完成，公共的分页设计，数据库连接与关闭，工程的文件结构和工程的环境也在几次讨论后完成统一设计。</span></p>
<p><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体">由于之前对</span><span style="font-size: 12pt">struts</span><span style="font-size: 12pt; font-family: 宋体">有了一定的了解，所以我在需求分析阶段就开始尝试着着手对几个简单模块的实现编码，之后在详细设计阶段中，每次讨论后新加的内容都需要对已经完成的代码进行一次大的修改。随着代码的增长，尝试了很多种文件结构。之后引入项目的框架也经历了很大的修改和许多次的尝试。此外的修改还包括</span><span style="font-size: 12pt">BaseAction</span><span style="font-size: 12pt; font-family: 宋体">的引入，</span><span style="font-size: 12pt">DispatchAction</span><span style="font-size: 12pt; font-family: 宋体">的引入，使用</span><span style="font-size: 12pt">struts</span><span style="font-size: 12pt; font-family: 宋体">异常处理等，并做好工程备份及将修改记录在日报中。在这一次次的修改中让我受益匪浅，对这些设计和修改有了更深刻的体会。这样在详细设计阶段的过程中，框架设计都已经在编码中事先进行了实现和测试，一些功能在写好后被分离出来作为公共平台。终于在小组开始编码时确定出了统一并详细完整的的工程的全部环境，项目的框架结构和整体编码方式。我的编码实现和单元测试也基本完成。</span></p>
<p><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体">在两周的编码过程中，我主要是和吉利一起协助各模块编码，增加各模块间交流，在这期间也解决问题的过程中学到知识。经过全体组员两周的努力工作，终于进入了测试阶段。我和吉利负责整体测试，测试联结了所有模块之后，可以顺利的完成全套的流程。让整个设计可以在</span><span style="font-size: 12pt">6</span><span style="font-size: 12pt; font-family: 宋体">个流程中一步步的走下去，同时保证数据库中所有数据和状态的正确性。随着测试一次次的进行，问题渐渐被全部排除，经过</span><span style="font-size: 12pt">3</span><span style="font-size: 12pt; font-family: 宋体">次测试之后，基本可以完全顺利的走完全套流程。</span></p>
<p><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600">&nbsp;<v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="width: 481.5pt; height: 382.5pt" o:ole="" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\Training\LOCALS~1\Temp\msohtml1\01\clip_image001.emz"></v:imagedata></v:shape></span></span></p>
<p><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体">我们这次工程中使用的是四层结构的框架，即将</span><span style="font-size: 12pt">MVC</span><span style="font-size: 12pt; font-family: 宋体">三层结构的同时，将</span><span style="font-size: 12pt">model</span><span style="font-size: 12pt; font-family: 宋体">模型层分成了</span><span style="font-size: 12pt">model</span><span style="font-size: 12pt; font-family: 宋体">模型层和</span><span style="font-size: 12pt">DAO</span><span style="font-size: 12pt; font-family: 宋体">持久层。其中又根据工厂模式分出</span><span style="font-size: 12pt">DAO</span><span style="font-size: 12pt; font-family: 宋体">接口，</span><span style="font-size: 12pt">bean</span><span style="font-size: 12pt; font-family: 宋体">，</span><span style="font-size: 12pt">factory</span><span style="font-size: 12pt; font-family: 宋体">，</span><span style="font-size: 12pt">service</span><span style="font-size: 12pt; font-family: 宋体">（</span><span style="font-size: 12pt">manager</span><span style="font-size: 12pt; font-family: 宋体">）提供</span><span style="font-size: 12pt">DAO</span><span style="font-size: 12pt; font-family: 宋体">实现。</span></p>
<p><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体">结构实现：首先我们根据框架，设计出相应的文件结构。视图层即所有</span><span style="font-size: 12pt">JSP</span><span style="font-size: 12pt; font-family: 宋体">文件，和配置文件一起由</span><span style="font-size: 12pt">eclipse</span><span style="font-size: 12pt; font-family: 宋体">的自动生成单独分在</span><span style="font-size: 12pt">WebRoot</span><span style="font-size: 12pt; font-family: 宋体">下，六模块的页面分别分于六个子目录下。所有的公共页面和</span><span style="font-size: 12pt">js</span><span style="font-size: 12pt; font-family: 宋体">，</span><span style="font-size: 12pt">css</span><span style="font-size: 12pt; font-family: 宋体">目录也放入</span><span style="font-size: 12pt">WebRoot</span><span style="font-size: 12pt; font-family: 宋体">下。由于这次项目中模块间的功能页面基本是完全相互独立的，这为在实现视图层和控制层之间的页面跳转控制带来很大的方便。代码目录（</span><span style="font-size: 12pt">src</span><span style="font-size: 12pt; font-family: 宋体">）下为六个模块的六个目录，公共代码目录（</span><span style="font-size: 12pt">platform</span><span style="font-size: 12pt; font-family: 宋体">），以及后加入的验证模块的目录（</span><span style="font-size: 12pt">validate</span><span style="font-size: 12pt; font-family: 宋体">）。除公共目录外，各模块下代码分为</span><span style="font-size: 12pt">5</span><span style="font-size: 12pt; font-family: 宋体">个目录：</span><span style="font-size: 12pt">Action</span><span style="font-size: 12pt; font-family: 宋体">，</span><span style="font-size: 12pt">model</span><span style="font-size: 12pt; font-family: 宋体">，</span><span style="font-size: 12pt">Form</span><span style="font-size: 12pt; font-family: 宋体">，</span><span style="font-size: 12pt">manager</span><span style="font-size: 12pt; font-family: 宋体">和</span><span style="font-size: 12pt">dao</span><span style="font-size: 12pt; font-family: 宋体">。（这里有两个命名的失误，根据实际的使用，</span><span style="font-size: 12pt">model</span><span style="font-size: 12pt; font-family: 宋体">的名字应该叫</span><span style="font-size: 12pt">bean</span><span style="font-size: 12pt; font-family: 宋体">更合适，而这里</span><span style="font-size: 12pt">manager</span><span style="font-size: 12pt; font-family: 宋体">一般在框架中称为</span><span style="font-size: 12pt">service</span><span style="font-size: 12pt; font-family: 宋体">。但我们已经有了称为</span><span style="font-size: 12pt">service</span><span style="font-size: 12pt; font-family: 宋体">的模块名称。）</span><span style="font-size: 12pt; font-family: 宋体">这里的</span><span style="font-size: 12pt">Action</span><span style="font-size: 12pt; font-family: 宋体">和</span><span style="font-size: 12pt">Form</span><span style="font-size: 12pt; font-family: 宋体">对应了</span><span style="font-size: 12pt">struts</span><span style="font-size: 12pt; font-family: 宋体">中的组件，</span><span style="font-size: 12pt">DAO</span><span style="font-size: 12pt; font-family: 宋体">层和</span><span style="font-size: 12pt">model-bean</span><span style="font-size: 12pt; font-family: 宋体">一起完成了操作的具体实现，</span></p>
<p><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体">视图层</span><span style="font-size: 12pt">view</span><span style="font-size: 12pt; font-family: 宋体">：总体框架上，我们使用的是</span><span style="font-size: 12pt">frameset</span><span style="font-size: 12pt; font-family: 宋体">来实现，不过听老师说现在流行的使用</span><span style="font-size: 12pt">jap</span><span style="font-size: 12pt; font-family: 宋体">的</span><span style="font-size: 12pt">include</span><span style="font-size: 12pt; font-family: 宋体">结合</span><span style="font-size: 12pt">div</span><span style="font-size: 12pt; font-family: 宋体">等来实现页面框架。在之后编码中，因为</span><span style="font-size: 12pt">frameset</span><span style="font-size: 12pt; font-family: 宋体">出现了一个问题，就是用来验证拦截的过滤器无法刷新整个框架，使得拦截后的页面只能显示在被操作的</span><span style="font-size: 12pt">frame</span><span style="font-size: 12pt; font-family: 宋体">中。但是</span><span style="font-size: 12pt">frameset</span><span style="font-size: 12pt; font-family: 宋体">的好处是框架分离的很好，在实现</span><span style="font-size: 12pt">jsp</span><span style="font-size: 12pt; font-family: 宋体">编码中几乎完全不用去考虑框架。我不知道用</span><span style="font-size: 12pt">include</span><span style="font-size: 12pt; font-family: 宋体">是否能做到。以前虽然都使用的</span><span style="font-size: 12pt">include</span><span style="font-size: 12pt; font-family: 宋体">，但是是在每个页面中都要加入</span><span style="font-size: 12pt">include</span><span style="font-size: 12pt; font-family: 宋体">。有时还会影响布局。在编码过程中，我们用</span><span style="font-size: 12pt">JavaScript</span><span style="font-size: 12pt; font-family: 宋体">实现了很多很好用的效果，比如选择时间的窗口，表单的正则表达式验证，表格的变色效果等，封装到公共的</span><span style="font-size: 12pt">js</span><span style="font-size: 12pt; font-family: 宋体">文件中，调用起来很方便。在这次</span><span style="font-size: 12pt">jap</span><span style="font-size: 12pt; font-family: 宋体">编程中，我终于由最初的在页面中堆满</span><span style="font-size: 12pt">java</span><span style="font-size: 12pt; font-family: 宋体">代码，转变为只使用一些</span><span style="font-size: 12pt">JSTL</span><span style="font-size: 12pt; font-family: 宋体">，</span><span style="font-size: 12pt">EL</span><span style="font-size: 12pt; font-family: 宋体">语句和</span><span style="font-size: 12pt">struts</span><span style="font-size: 12pt; font-family: 宋体">标签处理逻辑，美观了页面编码，同时让页面更专注于显示层。但这里我对</span><span style="font-size: 12pt">EL</span><span style="font-size: 12pt; font-family: 宋体">语句和纯标签语句又有些难以取舍。</span><span style="font-size: 12pt">EL</span><span style="font-size: 12pt; font-family: 宋体">语句在页面代码中虽然不如单用标签显得纯粹美观，但是</span><span style="font-size: 12pt">EL</span><span style="font-size: 12pt; font-family: 宋体">表达式简约的表现风格让实现和维护变得容易了很多。</span></p>
<p><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体">控制层</span><span style="font-size: 12pt">Action</span><span style="font-size: 12pt; font-family: 宋体">的设计一是使用了</span><span style="font-size: 12pt">DispatchAction</span><span style="font-size: 12pt; font-family: 宋体">，将多个</span><span style="font-size: 12pt">Action</span><span style="font-size: 12pt; font-family: 宋体">类合并，方便了管理。二在公共部分中定义了</span><span style="font-size: 12pt">BaseAction</span><span style="font-size: 12pt; font-family: 宋体">，由这个类去继承</span><span style="font-size: 12pt">struts</span><span style="font-size: 12pt; font-family: 宋体">的</span><span style="font-size: 12pt">DispatchAction</span><span style="font-size: 12pt; font-family: 宋体">。之后我们的所有</span><span style="font-size: 12pt">Action</span><span style="font-size: 12pt; font-family: 宋体">都去继承这个</span><span style="font-size: 12pt">BaseAction</span><span style="font-size: 12pt; font-family: 宋体">。这样在需要对</span><span style="font-size: 12pt">Action</span><span style="font-size: 12pt; font-family: 宋体">进行统一处理，以及定义一些供</span><span style="font-size: 12pt">Action</span><span style="font-size: 12pt; font-family: 宋体">公共使用的方法时就可以在这个</span><span style="font-size: 12pt">BaseAction</span><span style="font-size: 12pt; font-family: 宋体">中修改。虽然在这次项目中，</span><span style="font-size: 12pt">BaseAction</span><span style="font-size: 12pt; font-family: 宋体">只定义了个用于处理字符乱码的方法公共使用，但由此即可瞥见对于更复杂的</span><span style="font-size: 12pt">Action</span><span style="font-size: 12pt; font-family: 宋体">统一处理这种设计也能从容应对。由于是分模块进行，于是我们将</span><span style="font-size: 12pt">struts</span><span style="font-size: 12pt; font-family: 宋体">的</span><span style="font-size: 12pt">xml</span><span style="font-size: 12pt; font-family: 宋体">配置文件也分为对应各个模块，使用多</span><span style="font-size: 12pt">xml</span><span style="font-size: 12pt; font-family: 宋体">的配置方式，而这也需要对命名规则等很多方面有更好的协调和统一。在这次控制层的实现中，我起初还是像以前一样对很多不同的验证，模型层返回的异常都在</span><span style="font-size: 12pt">Action</span><span style="font-size: 12pt; font-family: 宋体">中处理并跳转。在之后的修改中，逐渐将这些处理都改至模型层</span><span style="font-size: 12pt">Manager</span><span style="font-size: 12pt; font-family: 宋体">中，由</span><span style="font-size: 12pt">Manager</span><span style="font-size: 12pt; font-family: 宋体">取用持久层的操作方法，实现所有业务逻辑处理。</span></p>
<p><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体">具体实现功能的模型层中，我们为每个</span><span style="font-size: 12pt">DAO</span><span style="font-size: 12pt; font-family: 宋体">定义了接口和实现类，这也是我第一次将接口真正应用到程序中。同时我们在每个模块的</span><span style="font-size: 12pt">DAO</span><span style="font-size: 12pt; font-family: 宋体">中应用了工厂模式，由一个</span><span style="font-size: 12pt">factory</span><span style="font-size: 12pt; font-family: 宋体">类实现所有</span><span style="font-size: 12pt">DAO</span><span style="font-size: 12pt; font-family: 宋体">的单例生成。之后在</span><span style="font-size: 12pt">Manager</span><span style="font-size: 12pt; font-family: 宋体">中调用这个实例实现操作。而这个</span><span style="font-size: 12pt">Manager</span><span style="font-size: 12pt; font-family: 宋体">同时本身也是单例实现的，由</span><span style="font-size: 12pt">Action</span><span style="font-size: 12pt; font-family: 宋体">进行静态调用。可见其中实现</span><span style="font-size: 12pt">Action</span><span style="font-size: 12pt; font-family: 宋体">控制层和</span><span style="font-size: 12pt">DAO</span><span style="font-size: 12pt; font-family: 宋体">持久层交互的就是</span><span style="font-size: 12pt">Manager</span><span style="font-size: 12pt; font-family: 宋体">模型层，并将两者严格的分离开来。同时在</span><span style="font-size: 12pt">Manager</span><span style="font-size: 12pt; font-family: 宋体">中还集合处理了所有来至业务功能逻辑和底部数据库的所有异常。因为数据库的连接也是在</span><span style="font-size: 12pt">Manager</span><span style="font-size: 12pt; font-family: 宋体">中创建的，但这不影响持久层的独立性，因为这是考虑到</span><span style="font-size: 12pt; font-family: 宋体">有时一次业务操作会进行多个数据库操作、调用多个数据库方法，将连接在模型层中创建更便于数据库的高效使用。模型层中对异常的集中处理，更简化了上下控制层和模型层的实现，使其更专注于各自的业务实现。在异常处理上，使用了</span><span style="font-size: 12pt">struts</span><span style="font-size: 12pt; font-family: 宋体">的一种异常处理机制，在</span><span style="font-size: 12pt">xml</span><span style="font-size: 12pt; font-family: 宋体">配置文件中进行异常配置。这样在</span><span style="font-size: 12pt">Manager</span><span style="font-size: 12pt; font-family: 宋体">中将异常抛出，由</span><span style="font-size: 12pt">struts</span><span style="font-size: 12pt; font-family: 宋体">实现异常跳转和提示。同时我们还将自定义的异常处理类也作为公共类公用，这样就可以在需要的时候对异常进行统一的处理。</span></p>
<p><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; font-family: 宋体">在持久层的实现上，我们使用了</span><span style="font-size: 12pt">tomcat</span><span style="font-size: 12pt; font-family: 宋体">数据库连接池，在编码中将数据库连接等方法封装到公共类中，并且将连接数据源作静态单例实现，以提高数据库调用的效率。在</span><span style="font-size: 12pt">DAO</span><span style="font-size: 12pt; font-family: 宋体">的设计方面，我们主要针对实际的操作对象和对应的数据库进行</span><span style="font-size: 12pt">DAO</span><span style="font-size: 12pt; font-family: 宋体">层方法的封装。每个方法尽量实现一些简单的操作。这样在不同模块直接有数据和操作交互的时候，只在模型层只要去各个模块的</span><span style="font-size: 12pt">DAO</span><span style="font-size: 12pt; font-family: 宋体">中取得需要的方法加以组合，实现自己的业务处理。很好的提高了代码的复用性和可维护性，降低了各个模块间数据交互处理的设计复杂度。</span></p>
<p><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;//文采太烂，&nbsp;结尾的感慨段就不发了</span></p>
<img src ="http://www.blogjava.net/wzl002/aggbug/247973.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wzl002/" target="_blank">wesley1987</a> 2008-12-23 21:38 <a href="http://www.blogjava.net/wzl002/articles/247973.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个引入JavaScript问题</title><link>http://www.blogjava.net/wzl002/articles/246473.html</link><dc:creator>wesley1987</dc:creator><author>wesley1987</author><pubDate>Mon, 15 Dec 2008 11:21:00 GMT</pubDate><guid>http://www.blogjava.net/wzl002/articles/246473.html</guid><wfw:comment>http://www.blogjava.net/wzl002/comments/246473.html</wfw:comment><comments>http://www.blogjava.net/wzl002/articles/246473.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wzl002/comments/commentRss/246473.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wzl002/services/trackbacks/246473.html</trackback:ping><description><![CDATA[今天一个诡异的问题弄了我半天，最后发现原因如下：<br />
<br />
在HTML的head中 引入外部script：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;script src="&lt;%=path%&gt;/js/service.js" type="text/javascript" <span style="color: #ff0000">&gt;&lt;/script&gt;<br />
</span>之后又写内部script (内容无关)<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&lt;script&nbsp;type="text/javascript"&gt;<br />
<img id="Codehighlighter1_55_179_Open_Image" onclick="this.style.display='none'; Codehighlighter1_55_179_Open_Text.style.display='none'; Codehighlighter1_55_179_Closed_Image.style.display='inline'; Codehighlighter1_55_179_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_55_179_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_55_179_Closed_Text.style.display='none'; Codehighlighter1_55_179_Open_Image.style.display='inline'; Codehighlighter1_55_179_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;function&nbsp;SecondType()<span id="Codehighlighter1_55_179_Open_Text">{<br />
<img id="Codehighlighter1_96_133_Open_Image" onclick="this.style.display='none'; Codehighlighter1_96_133_Open_Text.style.display='none'; Codehighlighter1_96_133_Closed_Image.style.display='inline'; Codehighlighter1_96_133_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_96_133_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_96_133_Closed_Text.style.display='none'; Codehighlighter1_96_133_Open_Image.style.display='inline'; Codehighlighter1_96_133_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;if&nbsp;(document.check.classTwo.value==1)<span id="Codehighlighter1_96_133_Open_Text">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;stext.style.display="inline";<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span><br />
<img id="Codehighlighter1_141_176_Open_Image" onclick="this.style.display='none'; Codehighlighter1_141_176_Open_Text.style.display='none'; Codehighlighter1_141_176_Closed_Image.style.display='inline'; Codehighlighter1_141_176_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_141_176_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_141_176_Closed_Text.style.display='none'; Codehighlighter1_141_176_Open_Image.style.display='inline'; Codehighlighter1_141_176_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;else<span id="Codehighlighter1_141_176_Open_Text">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;stext.style.display="none";<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;}</span><br />
<img id="Codehighlighter1_217_510_Open_Image" onclick="this.style.display='none'; Codehighlighter1_217_510_Open_Text.style.display='none'; Codehighlighter1_217_510_Closed_Image.style.display='inline'; Codehighlighter1_217_510_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_217_510_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_217_510_Closed_Text.style.display='none'; Codehighlighter1_217_510_Open_Image.style.display='inline'; Codehighlighter1_217_510_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;function&nbsp;FirstType(select,forwards)<span id="Codehighlighter1_217_510_Open_Text">{<br />
<img id="Codehighlighter1_258_353_Open_Image" onclick="this.style.display='none'; Codehighlighter1_258_353_Open_Text.style.display='none'; Codehighlighter1_258_353_Closed_Image.style.display='inline'; Codehighlighter1_258_353_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_258_353_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_258_353_Closed_Text.style.display='none'; Codehighlighter1_258_353_Open_Image.style.display='inline'; Codehighlighter1_258_353_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;if&nbsp;(document.check.classOne.value==1)<span id="Codehighlighter1_258_353_Open_Text">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ftext.style.display&nbsp;=&nbsp;"inline";<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;document.check.classTwo.value=1;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;SecondType();<br />
<img id="Codehighlighter1_358_507_Open_Image" onclick="this.style.display='none'; Codehighlighter1_358_507_Open_Text.style.display='none'; Codehighlighter1_358_507_Closed_Image.style.display='inline'; Codehighlighter1_358_507_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_358_507_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_358_507_Closed_Text.style.display='none'; Codehighlighter1_358_507_Open_Image.style.display='inline'; Codehighlighter1_358_507_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;}</span>else<span id="Codehighlighter1_358_507_Open_Text">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;ftext.style.display&nbsp;=&nbsp;"none";<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;window.location="&lt;%=path%&gt;/service/good.do?operation=getClass&amp;classone="+select.value+"&amp;forward="+forwards;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;}</span><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&lt;/script&gt;</div>
一切正常，<br />
但是 如果将head中的改为<br />
&lt;script src="&lt;%=path%&gt;/js/service.js" type="text/javascript"&nbsp;<span style="color: #ff0000">&nbsp;/&gt;变了下结尾<br />
</span>引入的外部script任然好用，但是下面的内部script就完全不执行。并伴随很多奇怪的显示效果。
<img src ="http://www.blogjava.net/wzl002/aggbug/246473.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wzl002/" target="_blank">wesley1987</a> 2008-12-15 19:21 <a href="http://www.blogjava.net/wzl002/articles/246473.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>乱码问题详解</title><link>http://www.blogjava.net/wzl002/articles/246458.html</link><dc:creator>wesley1987</dc:creator><author>wesley1987</author><pubDate>Mon, 15 Dec 2008 09:09:00 GMT</pubDate><guid>http://www.blogjava.net/wzl002/articles/246458.html</guid><wfw:comment>http://www.blogjava.net/wzl002/comments/246458.html</wfw:comment><comments>http://www.blogjava.net/wzl002/articles/246458.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wzl002/comments/commentRss/246458.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wzl002/services/trackbacks/246458.html</trackback:ping><description><![CDATA[转自网上的一篇很详细的关于servlet中各种出现乱码的问题即解决方案：<br />
http://www.diybl.com/course/3_program/java/javajs/200829/99730.html<br />
<br />
<p>（1）前言：<br />
解决web程序的国际化问题，必须在任何地方使用UTF-8对字符进行编码。（包括：数据库设置为：UTF-8，web页面也要设置为：UTF-8）<br />
这样做的好处在于可以解决在web上不止中文字符编码问题，所有的字符编码都统一使用UTF-8,实现了语言的国际化。同时在保存数据到<br />
数据库时候也省去了编码转换的问题。<br />
在JSP或JSF应用中使用到Servlet，我们通过使用Servlet过滤器进行编码转换，也就是制定编码转换为UFT-8。</p>
<p>（2）Servlet和JSP过滤器Filter简介：<br />
servlet API的2.3版本中最重要的一个新功能就是能够为servlet和JSP页面定义过滤器。过滤器提供了某些早期服务器所支持的非标准&#8220;servlet链接&#8221;的一种功能强大且标准的替代品。<br />
过滤器是一个程序，它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上，并且可以检查进入这些资源的请求信息。在这之后，过滤器可以作如下的选择：<br />
- 以常规的方式调用资源（即，调用servlet或JSP页面）。<br />
- 利用修改过的请求信息调用资源。<br />
- 调用资源，但在发送响应到客户机前对其进行修改<br />
- 阻止该资源调用，代之以转到其他的资源，返回一个特定的状态代码或生成替换输出。<br />
过滤器提供了几个重要好处。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 首先，它以一种模块化的或可重用的方式封装公共的行为。你有30个不同的serlvet或JSP页面，需要压缩它们的内容以减少下载时间吗？没问题：构造一个压缩过滤器（参阅第11节），然后将它应用到30个资源上即可。<br />
&nbsp;&nbsp;&nbsp; 其次，利用它能够将高级访问决策与表现代码相分离。这对于JSP特别有价值，其中一般希望将几乎整个页面集中在表现上，而不是集中在业务逻辑上。例如，希望阻塞来自某些站点的访问而不用修改各页面（这些页面受到访问限制）吗？没问题：建立一个访问限制过滤器（参阅第8节）并把它应用到想要限制访问的页面上即可。<br />
&nbsp;&nbsp;&nbsp; 最后，过滤器使你能够对许多不同的资源进行批量性的更改。你有许多现存资源，这些资源除了公司名要更改外其他的保持不变，能办到么？没问题：构造一个串替换过滤器（参阅第10节），只要合适就使用它。<br />
&nbsp;&nbsp;&nbsp; 但要注意，过滤器只在与servlet规范2.3版兼容的服务器上有作用。如果你的Web应用需要支持旧版服务器，就不能使用过滤器。<br />
建立一个过滤器涉及下列五个步骤：<br />
1、建立一个实现Filter接口的类。这个类需要三个方法，分别是：doFilter、init和destroy。doFilter方法包含主要的过滤代码，init方法建立设置操作，而destroy方法进行清楚。<br />
2、在doFilter方法中放入过滤行为。doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息（包括表单数据、cookie和HTTP请求头）的完全访问。第二个参数为ServletResponse，通常在简单的过滤器中忽略此参数。最后一个参数为FilterChain，如下一步所述，此参数用来调用servlet或JSP页。<br />
3、调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作为它的一个参数。在调用此对象的doFilter方法时，激活下一个相关的过滤器。如果没有另一个过滤器与servlet或JSP页面关联，则servlet或JSP页面被激活。<br />
4、对相应的servlet和JSP页面注册过滤器。在部署描述符文件（web.xml）中使用filter和filter-mapping元素。<br />
5、禁用激活器servlet。防止用户利用缺省servlet URL绕过过滤器设置。<br />
<br />
doFilter方法：</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: #008080">1</span>&nbsp;<span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;doFilter(ServletRequest&nbsp;request,&nbsp;ServletResponse&nbsp;response,&nbsp;FilterChain&nbsp;chain)<br />
</span><span style="color: #008080">2</span>&nbsp;<span style="color: #000000">&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;ServletException,&nbsp;IOException<br />
</span><span style="color: #008080">3</span>&nbsp;<span style="color: #000000">{<br />
</span><span style="color: #008080">4</span>&nbsp;<span style="color: #000000">&nbsp;HttpServletRequest&nbsp;req&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(HttpServletRequest)request;<br />
</span><span style="color: #008080">5</span>&nbsp;<span style="color: #000000">&nbsp;System.out.println(req.getRemoteHost()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;tried&nbsp;to&nbsp;access&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">req.getRequestURL()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;on&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Date()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">.</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">6</span>&nbsp;<span style="color: #000000">&nbsp;chain.doFilter(request,response);<br />
</span><span style="color: #008080">7</span>&nbsp;<span style="color: #000000">}</span></div>
<p><br />
在web.xml中进行部署<br />
分别是：filter和filter-mapping。filter元素向系统注册一个过滤对象，filter-mapping元素指定该过滤对象所应用的URL。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 12pt; 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">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">ChangeCodeFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">display-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">ChangeCodeFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">display-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com.cnc.SetCharacterEncodingFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">SetCharacterEncodingFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/SetCharacterEncodingFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span></div>
<p>1.filter元素<br />
filter元素位于部署描述符文件（web.xml）的前部，所有filter-mapping、servlet或servlet-mapping元素之前。filter元素具有如下六个可能的子元素：<br />
&nbsp;:icon&nbsp; 这是一个可选的元素，它声明IDE能够使用的一个图象文件。<br />
&nbsp;: filter-name&nbsp; 这是一个必需的元素，它给过滤器分配一个选定的名字。<br />
&nbsp;: display-name&nbsp; 这是一个可选的元素，它给出IDE使用的短名称。<br />
&nbsp;: description&nbsp; 这也是一个可选的元素，它给出IDE的信息，提供文本文档。<br />
&nbsp;: filter-class&nbsp; 这是一个必需的元素，它指定过滤器实现类的完全限定名。<br />
&nbsp;: init-param&nbsp; 这是一个可选的元素，它定义可利用FilterConfig的getInitParameter方法读取的初始化参数。单个过滤器元素可包含多个init-param元素。<br />
2.filter-mapping元素<br />
&nbsp; filter-mapping元素位于web.xml文件中filter元素之后serlvet元素之前。它包含如下三个可能的子元素：：<br />
&nbsp;&nbsp;filter-name 这个必需的元素必须与用filter元素声明时给予过滤器的名称相匹配。<br />
&nbsp; url-pattern&nbsp; 此元素声明一个以斜杠（/）开始的模式，它指定过滤器应用的URL。所有filter-mapping元素中必须提供url-pattern或servlet-name。但不能对单个filter-mapping元素提供多个url-pattern元素项。如果希望过滤器适用于多个模式，可重复整个filter-mapping元素。<br />
:servlet-name&nbsp; 此元素给出一个名称，此名称必须与利用servlet元素给予servlet或JSP页面的名称相匹配。不能给单个filter-mapping元素提供多个servlet-name元素项。如果希望过滤器适合于多个servlet名，可重复这个filter-mapping元素。</p>
<p>（3）在Rational Application Developer 中的建立字符转换过滤器：<br />
1.新建-web-过滤器：SetCharacterEncodingFilter<br />
会在web.xml中产生如上代码：<br />
<br />
2.在过滤器的doFilter方法中添加如下代码：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 14pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;doFilter(ServletRequest&nbsp;arg0,&nbsp;ServletResponse&nbsp;arg1,FilterChain&nbsp;arg2)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;IOException,&nbsp;ServletException&nbsp;{<br />
&nbsp;&nbsp;arg0.setCharacterEncoding(</span><span style="color: #000000">"</span><span style="color: #000000">UTF-8</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">设定字体编码为UTF-8</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;arg2.doFilter(arg0,&nbsp;arg1);</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;传递控制到下一个过滤器</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;}</span></div>
<p>3.在web.xml中进行部署<br />
在web.xml的过滤器-编辑器中选择：servlet 映射 - 添加 - Faces Servlet<br />
会在web.xml中产生如下代码：<br />
&lt;filter-mapping&gt;<br />
&lt;filter-name&gt;SetCharacterEncodingFilter&lt;/filter-name&gt;<br />
&lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;<br />
&lt;/filter-mapping&gt;</p>
<p>（4）其他参考信息<br />
tomcat下中文的彻底解决 <br />
(一)&nbsp;&nbsp;&nbsp; JSP页面上是中文，但是看的是后是乱码：<br />
解决的办法就是在JSP页面的编码的地方&lt;%@ page language="java" contentType="text/html;charset=GBK" %&gt;，因为Jsp转成Java文件时的编码问题，默认的话有的服务器是ISO-8859-1，如果一个JSP中直接输入了中文，Jsp把它当作ISO8859-1来处理是肯定有问题的，这一点，我们可以通过查看Jasper所生成的Java中间文件来确认<br />
(二)&nbsp;&nbsp;&nbsp; 当用Request对象获取客户提交的汉字代码的时候，会出现乱码：<br />
解决的办法是：要配置一个filter,也就是一个Servelet的过滤器，代码如下：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 12pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.IOException;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.Filter;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.FilterChain;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.FilterConfig;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.ServletException;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.ServletRequest;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.ServletResponse;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.UnavailableException;<br />
</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;*&nbsp;Example&nbsp;filter&nbsp;that&nbsp;sets&nbsp;the&nbsp;character&nbsp;encoding&nbsp;to&nbsp;be&nbsp;used&nbsp;in&nbsp;parsing&nbsp;the<br />
&nbsp;*&nbsp;incoming&nbsp;request<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><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;SetCharacterEncodingFilter&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Filter&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Take&nbsp;this&nbsp;filter&nbsp;out&nbsp;of&nbsp;service.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;destroy()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Select&nbsp;and&nbsp;set&nbsp;(if&nbsp;specified)&nbsp;the&nbsp;character&nbsp;encoding&nbsp;to&nbsp;be&nbsp;used&nbsp;to<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;interpret&nbsp;request&nbsp;parameters&nbsp;for&nbsp;this&nbsp;request.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;doFilter(ServletRequest&nbsp;request,&nbsp;ServletResponse&nbsp;response,<br />
&nbsp;&nbsp;&nbsp;&nbsp;FilterChain&nbsp;chain)</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;IOException,ServletException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;request.setCharacterEncoding(</span><span style="color: #000000">"</span><span style="color: #000000">GBK</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;传递控制到下一个过滤器</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;chain.doFilter(request,&nbsp;response);<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;init(FilterConfig&nbsp;filterConfig)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;ServletException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
配置web.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: #000000"><br />
&lt;</span><span style="color: #000000">filter</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">Set&nbsp;Character&nbsp;Encoding</span><span style="color: #000000">&lt;/</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000">SetCharacterEncodingFilter</span><span style="color: #000000">&lt;/</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;/</span><span style="color: #000000">filter</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">Set&nbsp;Character&nbsp;Encoding</span><span style="color: #000000">&lt;/</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">&gt;</span><span style="color: #008000">/*</span><span style="color: #008000">&lt;/url-pattern&gt;<br />
&lt;/filter-mapping&gt;<br />
</span></div>
<p>如果你的还是出现这种情况的话你就往下看看是不是你出现了第四中情况，你的Form提交的数据是不是用get提交的，一般来说用post提交的话是没有问题的，如果是的话，你就看看第四中解决的办法。<br />
还有就是对含有汉字字符的信息进行处理，处理的代码是：<br />
package dbJavaBean;<br />
public class CodingConvert<br />
{&nbsp;&nbsp; <br />
&nbsp;public CodingConvert()<br />
&nbsp;{<br />
&nbsp; //<br />
&nbsp;}<br />
&nbsp;public String toGb(String uniStr){<br />
&nbsp;&nbsp;&nbsp;&nbsp; String gbStr = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp; if(uniStr == null){<br />
&nbsp;&nbsp; uniStr = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; try{<br />
&nbsp;&nbsp; byte[] tempByte = uniStr.getBytes("ISO8859_1");<br />
&nbsp;&nbsp; gbStr = new String(tempByte,"GB2312");<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp; catch(Exception ex){<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; return gbStr;<br />
&nbsp;}<br />
&nbsp;&nbsp; <br />
&nbsp;public String toUni(String gbStr){<br />
&nbsp;&nbsp;&nbsp;&nbsp; String uniStr = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp; if(gbStr == null){<br />
&nbsp;&nbsp; gbStr = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; try{<br />
&nbsp;&nbsp; byte[] tempByte = gbStr.getBytes("GB2312");<br />
&nbsp;&nbsp; uniStr = new String(tempByte,"ISO8859_1");<br />
&nbsp;&nbsp;&nbsp;&nbsp; }catch(Exception ex){<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return uniStr;<br />
&nbsp;}<br />
}<br />
你也可以在直接的转换，首先你将获取的字符串用ISO-8859-1进行编码，然后将这个编码存放到一个字节数组中，然后将这个数组转化成字符串对象就可以了，例如：<br />
String str=request.getParameter(&#8220;girl&#8221;);<br />
Byte B[]=str.getBytes(&#8220;ISO-8859-1&#8221;);<br />
Str=new String(B);<br />
通过上述转换的话，提交的任何信息都能正确的显示。<br />
(三)&nbsp;&nbsp;&nbsp; 在Formget请求在服务端用request. getParameter(&#8220;name&#8221;)时返回的是乱码；按tomcat的做法设置Filter也没有用或者用request.setCharacterEncoding("GBK");也不管用问题是出在处理参数传递的方法上：如果在servlet中用doGet(HttpServletRequest request, HttpServletResponse response)方法进行处理的话前面即使是写了：<br />
request.setCharacterEncoding("GBK");<br />
response.setContentType("text/html;charset=GBK");<br />
也是不起作用的，返回的中文还是乱码！！！如果把这个函数改成doPost(HttpServletRequest request, HttpServletResponse response)一切就OK了。<br />
同样，在用两个JSP页面处理表单输入之所以能显示中文是因为用的是post方法传递的，改成get方法依旧不行。<br />
由此可见在servlet中用doGet()方法或是在JSP中用get方法进行处理要注意。这毕竟涉及到要通过浏览器传递参数信息，很有可能引起常用字符集的冲突或是不匹配。<br />
解决的办法是：<br />
1) 打开tomcat的server.xml文件，找到区块，加入如下一行： <br />
URIEncoding=&#8221;GBK&#8221; <br />
完整的应如下： <br />
&lt;Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/&gt; <br />
2)重启tomcat,一切OK。<br />
需要加入的原因大家可以去研究 $TOMCAT_HOME/webapps/tomcat-docs/config/http.html下的这个文件就可以知道原因了。需要注意的是：这个地方如果你要是用UTF-8的时候在传递的过程中在Tomcat中也是要出现乱码的情况，如果不行的话就换别的字符集。<br />
(四)&nbsp;&nbsp;&nbsp; JSP页面上有中文，按钮上面也有中文，但是通过服务器查看页面的时候出现乱码：<br />
&nbsp;&nbsp;&nbsp;&nbsp; 解决的办法是：首先在JSP文件中不应该直接包含本地化的消息文本，而是应该通过&lt;bean:message&gt;标签从Resource Bundle中获得文本。应该把你的中文文本放到Application.properties文件中，这个文件放在WEB-INF/classes/*下，例如我在页面里有姓名，年龄两个label,我首先就是要建一个Application.properties，里面的内容应该是name=&#8221;姓名&#8221; age=&#8221;年龄&#8221;,然后我把这个文件放到WEB-INF/classes/properties/下，接下来根据Application.properties文件，对他进行编码转化，创建一个中文资源文件，假定名字是Application_cn.properties。在JDK中提供了native2ascii命令，他能够实现字符编码的转换。在DOS环境中找到你放置Application.properties的这个文件的目录，在DOS环境中执行一下命令，将生成按GBK编码的中文资源文件Application_cn.properties：native2ascii ?encoding gbk Application.properties Application_cn.properties执行以上命令以后将生成如下内容的Application_cn.properties文件：name=\u59d3\u540d age=\u5e74\u9f84,在Struts-config.xml中配置：&lt;message-resources parameter="properties.Application_cn"/&gt;。到这一步，基本上完成了一大半，接着你就要在JSP页面上写&lt;%@ page language="java" contentType="text/html;charset=GBK" %&gt;,到名字的那个label是要写&lt;bean:message key=&#8221;name&#8221;&gt;,这样的化在页面上出现的时候就会出现中文的姓名，年龄这个也是一样，按钮上汉字的处理也是同样的。<br />
(五)&nbsp;&nbsp;&nbsp; 写入到数据库是乱码：<br />
解决的方法：要配置一个filter,也就是一个Servelet的过滤器，代码如同第二种时候一样。<br />
如果你是通过JDBC直接链接数据库的时候，配置的代码如下：jdbc:mysql://localhost:3306/workshopdb?useUnicode=true&amp;characterEncoding=GBK，这样保证到数据库中的代码是不是乱码。<br />
如果你是通过数据源链接的化你不能按照这样的写法了，首先你就要写在配置文件中，在tomcat 5.0.19中配置数据源的地方是在C:\Tomcat 5.0\conf\Catalina\localhost这个下面，我建立的工程是workshop，放置的目录是webapp下面,workshop.xml的配置文件如下：<br />
&lt;!-- insert this Context element into server.xml --&gt;<br />
&lt;Context path="/workshop" docBase="workshop" debug="0"<br />
reloadable="true" &gt;<br />
&nbsp; &lt;Resource name="jdbc/WorkshopDB"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; auth="Container"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="javax.sql.DataSource" /&gt;<br />
&nbsp; &lt;ResourceParams name="jdbc/WorkshopDB"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;factory&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;</p>
<p>maxActive&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;100&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;maxIdle&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;30&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;maxWait&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;10000&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;username&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;root&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;password&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;!-- Class name for mm.mysql JDBC driver --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;driverClassName&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;com.mysql.jdbc.Driver&lt;/value&gt;<br />
&lt;/parameter&gt;<br />
&nbsp;&nbsp; &lt;parameter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;url&lt;/name&gt;<br />
&nbsp;&lt;value&gt;&lt;![CDATA[jdbc:mysql://localhost:3306/workshopdb?useUnicode=true&amp;characterEncoding=GBK]]&gt;&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br />
&nbsp; &lt;/ResourceParams&gt;<br />
&lt;/Context&gt;<br />
粗体的地方要特别的注意，和JDBC直接链接的时候是有区别的，如果你是配置正确的化，当你输入中文的时候到数据库中就是中文了，有一点要注意的是你在显示数据的页面也是要用&lt;%@ page language="java" contentType="text/html;charset=GBK" %&gt;这行代码的。需要注意的是有的前台的人员在写代码的是后用Dreamver写的，写了一个Form的时候把他改成了一个jsp，这样有一个地方要注意了，那就是在Dreamver中Action的提交方式是request的，你需要把他该过来，因为在jsp的提交的过程中紧紧就是POST和GET两种方式，但是这两种方式提交的代码在编码方面还是有很大不同的，这个在后面的地方进行说明.<br />
<br />
<br />
文章出处：http://www.diybl.com/course/3_program/java/javajs/200829/99730_3.html</p>
<img src ="http://www.blogjava.net/wzl002/aggbug/246458.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wzl002/" target="_blank">wesley1987</a> 2008-12-15 17:09 <a href="http://www.blogjava.net/wzl002/articles/246458.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2种中文乱码处理--方法和过滤器</title><link>http://www.blogjava.net/wzl002/articles/246416.html</link><dc:creator>wesley1987</dc:creator><author>wesley1987</author><pubDate>Mon, 15 Dec 2008 06:46:00 GMT</pubDate><guid>http://www.blogjava.net/wzl002/articles/246416.html</guid><wfw:comment>http://www.blogjava.net/wzl002/comments/246416.html</wfw:comment><comments>http://www.blogjava.net/wzl002/articles/246416.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wzl002/comments/commentRss/246416.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wzl002/services/trackbacks/246416.html</trackback:ping><description><![CDATA[一. 使用 方法调用处理中文：<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">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;String&nbsp;changeStr(String&nbsp;str){&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(str</span><span style="color: #000000">==</span><span style="color: #0000ff">null</span><span style="color: #000000">)</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;String&nbsp;temp</span><span style="color: #000000">=</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">try</span><span style="color: #000000">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;String(str.getBytes(</span><span style="color: #000000">"</span><span style="color: #000000">ISO-8859-1</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(UnsupportedEncodingException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<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;temp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<p>&nbsp; 我们将这个方法作为静态写入了BaseAction中，使所有的方法都能调用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;String offername = changeStr(request.getParameter("offername"));<br />
这种方法的好处是： 无论是POST/GET的页面表单，还是重写的URL他都一并处理了。写起来也简单<br />
可问题是：对于所有页面参数几乎都要调用一下这个方法，对于大的工程就很不合适了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;特别是参数很多的Form中，所有的参数都要用它处理一次。虽然我把这个处理写入了验证中自动调用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;但是还是感觉比较麻烦。</p>
<p>&nbsp;</p>
<p>二. 使用 过滤器 Filter <br />
1 新建一个java文件：SetCharacterEncodingFilter<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"><br />
&nbsp;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.IOException;<br />
&nbsp;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.Filter;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.FilterChain;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.FilterConfig;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.ServletException;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.ServletRequest;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.ServletResponse;<br />
&nbsp;<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;CharacterEncodingFilter&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Filter&nbsp;{<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;FilterConfig&nbsp;config;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;encoding;<br />
&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;destroy()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;销毁配置</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">.config&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;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&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;doFilter(ServletRequest&nbsp;request,&nbsp;ServletResponse&nbsp;response,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FilterChain&nbsp;chain)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;IOException,&nbsp;ServletException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;如果编码已经配置,&nbsp;则使用该编码.</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #0000ff">this</span><span style="color: #000000">.encoding&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setCharacterEncoding(</span><span style="color: #0000ff">this</span><span style="color: #000000">.encoding);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;将资源链到下一Filter,&nbsp;如果这是最后一个Filter,&nbsp;则将资源链到目的位置.</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chain.doFilter(request,&nbsp;response);<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&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;init(FilterConfig&nbsp;config)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;ServletException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;方便销毁配置</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">.config&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;config;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;读取web.xml中CharacterEncodingFilter内的初始编码参数</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">.encoding&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.config.getInitParameter(</span><span style="color: #000000">"</span><span style="color: #000000">encoding</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span></div>
<br />
2 在web.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: #008000">&lt;!--</span><span style="color: #008000">&nbsp;设置request编码方式&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</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">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Set&nbsp;Character&nbsp;Encoding</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com.neusoft.struts.platform.SetCharacterEncodingFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</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">init-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">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">encoding</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;GB2312</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">ignore</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">true</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter</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">filter-mapping</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">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Set&nbsp;Character&nbsp;Encoding</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span></div>
<br />
使用过滤器 可谓是一劳永逸，所有页面表单是POST的请求，即所有struts中的Form基本都OK了。<br />
但注意：它也仅对POST请求有效。对于GET请求和重写URL的请求，它也会去处理，但由于他们和POST的编码区别，<br />
过滤器会把他们过滤成？？<br />
<br />
&nbsp; 解决方法：<br />
找到Tomcat安装目录内conf文件夹下的server.xml文件, <br />
给其中的连接器元素Connector添加属性: <span style="color: #339966">URIEncoding</span>, 属性值为: <span style="color: #339966">UTF-8</span>.</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span>&nbsp;<span style="color: #000000">&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Connector&nbsp;</span><span style="color: #ff0000">port</span><span style="color: #0000ff">="8080"</span><span style="color: #ff0000">&nbsp;protocol</span><span style="color: #0000ff">="HTTP/1.1"</span><span style="color: #ff0000">&nbsp;<br />
</span><span style="color: #008080">2</span>&nbsp;<span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connectionTimeout</span><span style="color: #0000ff">="20000"</span><span style="color: #ff0000">&nbsp;<br />
</span><span style="color: #008080">3</span>&nbsp;<span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;redirectPort</span><span style="color: #0000ff">="8443"</span><span style="color: #ff0000"><br />
</span><span style="color: #008080">4</span>&nbsp;<span style="color: #ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URIEncoding</span><span style="color: #0000ff">="UTF-8"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span></div>
<p>&nbsp;</p>
关于乱码详细问题即解决，见 乱码问题详解
<img src ="http://www.blogjava.net/wzl002/aggbug/246416.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wzl002/" target="_blank">wesley1987</a> 2008-12-15 14:46 <a href="http://www.blogjava.net/wzl002/articles/246416.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DispatchAction的使用</title><link>http://www.blogjava.net/wzl002/articles/244408.html</link><dc:creator>wesley1987</dc:creator><author>wesley1987</author><pubDate>Thu, 04 Dec 2008 09:12:00 GMT</pubDate><guid>http://www.blogjava.net/wzl002/articles/244408.html</guid><wfw:comment>http://www.blogjava.net/wzl002/comments/244408.html</wfw:comment><comments>http://www.blogjava.net/wzl002/articles/244408.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wzl002/comments/commentRss/244408.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wzl002/services/trackbacks/244408.html</trackback:ping><description><![CDATA[<p>模块的实现写的差不多了，可是 每个页面的活动都要一个Action，3个对象的增删改查 就有14个Action。终于今天组长发飙了，要改成DispatchAction。现上网查查怎么用。。找到个本博客中的文章放入收藏了。</p>
<p>http://www.blogjava.net/jxhkwhy/archive/2007/01/21/95177.html<br />
<br />
把增删改查都放到一个Action中，然后在XML中为每个方法配一个<br />
<span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 'courier new'">&lt;</span> <span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 'courier new'">action</span> <span lang="EN-US" style="font-size: 9pt; font-family: 'courier new'"><O:P></O:P></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 'courier new'"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 9pt; color: #7f007f; font-family: 'courier new'">attribute</span> <span lang="EN-US" style="font-size: 9pt; color: black; font-family: 'courier new'">=</span> <span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'">"addUserForm"</span> <span lang="EN-US" style="font-size: 9pt; font-family: 'courier new'"><O:P></O:P></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 9pt; color: #7f007f; font-family: 'courier new'">input</span> <span lang="EN-US" style="font-size: 9pt; color: black; font-family: 'courier new'">=</span> <span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'">"/addUser.jsp"</span> <span lang="EN-US" style="font-size: 9pt; font-family: 'courier new'"><O:P></O:P></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 9pt; color: #7f007f; font-family: 'courier new'">name</span> <span lang="EN-US" style="font-size: 9pt; color: black; font-family: 'courier new'">=</span> <span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'">"addUserForm"</span> <span lang="EN-US" style="font-size: 9pt; font-family: 'courier new'"><O:P></O:P></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size: 9pt; color: red; font-family: 'courier new'">parameter="method"<O:P></O:P></span> </strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 9pt; color: #7f007f; font-family: 'courier new'">path</span> <span lang="EN-US" style="font-size: 9pt; color: black; font-family: 'courier new'">=</span> <span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'">"/addUser"</span> <span lang="EN-US" style="font-size: 9pt; font-family: 'courier new'"><O:P></O:P></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 9pt; color: #7f007f; font-family: 'courier new'">scope</span> <span lang="EN-US" style="font-size: 9pt; color: black; font-family: 'courier new'">=</span> <span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'">"request"</span> <span lang="EN-US" style="font-size: 9pt; font-family: 'courier new'"><O:P></O:P></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><strong><span lang="EN-US" style="font-size: 9pt; color: red; font-family: 'courier new'">type="com.why.struts.action.UserAction" &gt;<O:P></O:P></span> </strong></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 9pt; color: black; font-family: 'courier new'"><span>&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 'courier new'">&lt;/</span> <span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 'courier new'">action</span> <span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 'courier new'">&gt;</span> <br />
其实如果使用的Form（name=&#8220;xxxForm&#8221;）是一样的话，几个方法配一个&lt;action&gt;也行。<span style="color: red">用多个的时候，注意path不要写成一样的了。</span><br />
注意<strong><span lang="EN-US" style="font-size: 9pt; color: red; font-family: 'courier new'">parameter</span></strong>的值，作为JSP跳转的do的参数就可以了。基本上配置方面 和一般&lt;action&gt;区别就是含有同一个<span style="color: red">type</span>地址和<strong><span lang="EN-US" style="font-size: 9pt; font-family: 'courier new'"><span style="color: #ff0000"><strong><span lang="EN-US" style="font-size: 9pt; font-family: 'courier new'">parameter</span></strong><br />
</span></span></strong></p>
<p class="MsoNormal" style="font-size: 14pt; margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 9pt; font-family: 宋体">&lt;html:link href="addUser.do?<strong><span style="color: red">method</span></strong>=<span style="color: blue">addUser</span>"&gt;Add User&lt;/html:link&gt;<O:P></O:P></span> <br />
<br />
参数值为Action里的方法名，如这个 对应为 Action中的<br />
addUser (ActionMapping mapping,ActionForm form,<O:P></O:P> HttpServletRequest request,HttpServletResponse response）</p>
<br />
&nbsp;execute就不用在写了。虽然不知道写了会怎么样。&nbsp; <br />
下面是我自己的struts-config.xml配置：&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 实现offer的增，删，改，查。其中查和删的配置写在了一起。所以是&nbsp;3个Action，注意其 path，type ，和parameter属性。调用时用parameter的值区分。这里还可以看到定向到offerSearch的URL的使用。<br />
<span style="font-size: 10pt; color: red">这里的name虽然相同，但是分开的原因是 我需要input这个属性作为异常的转回页面。查询和删除都不用name 而且异常提示页面相同，所以合并。</span>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">action<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">input</span><span style="color: #0000ff">="/service/offerSearch.jsp"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parameter</span><span style="color: #0000ff">="operation"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path</span><span style="color: #0000ff">="/offer"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope</span><span style="color: #0000ff">="request"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span><span style="color: #0000ff">="com.neusoft.struts.service.action.OfferAction"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">forward&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="success"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="/offer.do?operation=offerSearch&amp;amp;offername="</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">forward&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="show"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="/service/offerSearch.jsp"</span><span style="color: #ff0000">&nbsp;</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">action</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">action<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">attribute</span><span style="color: #0000ff">="OfferForm"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input</span><span style="color: #0000ff">="/service/offerNew.jsp"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parameter</span><span style="color: #0000ff">="operation"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name</span><span style="color: #0000ff">="OfferForm"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path</span><span style="color: #0000ff">="/offerAdd"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope</span><span style="color: #0000ff">="request"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span><span style="color: #0000ff">="com.neusoft.struts.service.action.OfferAction"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">forward&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="success"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="/offer.do?operation=offerSearch&amp;amp;offername="</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">action</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">action&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">attribute</span><span style="color: #0000ff">="OfferForm"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;name</span><span style="color: #0000ff">="OfferForm"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;parameter</span><span style="color: #0000ff">="operation"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;path</span><span style="color: #0000ff">="/offerUpdate"</span><span style="color: #ff0000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;input</span><span style="color: #0000ff">="/service/offerUpdate.jsp"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;scope</span><span style="color: #0000ff">="request"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;type&nbsp;</span><span style="color: #0000ff">="com.neusoft.struts.service.action.OfferAction"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">forward&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="success"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="/offer.do?operation=offerSearch&amp;amp;offername="</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">action</span><span style="color: #0000ff">&gt;</span></div>
<br />
对应的DispatchAction&nbsp;&nbsp;&nbsp;&nbsp;：
<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"><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;OfferAction&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;DispatchAction&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;ActionForward&nbsp;offerSearch(ActionMapping&nbsp;mapping,&nbsp;ActionForm&nbsp;form,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;</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;String&nbsp;offername&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;changeStr(request.getParameter(</span><span style="color: #000000">"</span><span style="color: #000000">offername</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">offername</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;offername);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpSession&nbsp;session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.getSession();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IPageList&nbsp;pageList;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(request.getParameter(</span><span style="color: #000000">"</span><span style="color: #000000">page</span><span style="color: #000000">"</span><span style="color: #000000">)</span><span style="color: #000000">==</span><span style="color: #0000ff">null</span><span style="color: #000000">){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">来自查询表单的请求</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pageList&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;PageList(</span><span style="color: #000000">1</span><span style="color: #000000">,OfferManager.getInstance().getOfferList(offername));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.setAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">list</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;pageList.getResultList());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">pageList</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;pageList);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">来自分页链接的请求</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;page&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Integer.parseInt(request.getParameter(</span><span style="color: #000000">"</span><span style="color: #000000">page</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pageList&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;PageList(page,OfferManager.getInstance().getOfferList(offername));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.setAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">list</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;pageList.getResultList());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">pageList</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;pageList);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;mapping.findForward(</span><span style="color: #000000">"</span><span style="color: #000000">show</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ActionForward&nbsp;offerAdd(ActionMapping&nbsp;mapping,&nbsp;ActionForm&nbsp;form,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OfferForm&nbsp;offer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(OfferForm)&nbsp;form;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OfferManager.getInstance().addOffer(offer);<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;mapping.findForward(</span><span style="color: #000000">"</span><span style="color: #000000">success</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ActionForward&nbsp;offerUpdate(ActionMapping&nbsp;mapping,&nbsp;ActionForm&nbsp;form,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;</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;OfferForm&nbsp;offer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(OfferForm)&nbsp;form;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OfferManager.getInstance().offerUpdate(offer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;mapping.findForward(</span><span style="color: #000000">"</span><span style="color: #000000">success</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 />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ActionForward&nbsp;offerDelete(ActionMapping&nbsp;mapping,ActionForm&nbsp;Form,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest&nbsp;request,HttpServletResponse&nbsp;response)</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;id&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.getParameter(</span><span style="color: #000000">"</span><span style="color: #000000">offerId</span><span style="color: #000000">"</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">(id</span><span style="color: #000000">!=</span><span style="color: #0000ff">null</span><span style="color: #000000">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OfferManager.getInstance().offerDelete(Integer.parseInt(id));<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;mapping.findForward(</span><span style="color: #000000">"</span><span style="color: #000000">success</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
<br />
<br />
<img src ="http://www.blogjava.net/wzl002/aggbug/244408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wzl002/" target="_blank">wesley1987</a> 2008-12-04 17:12 <a href="http://www.blogjava.net/wzl002/articles/244408.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于struts-config.xml.</title><link>http://www.blogjava.net/wzl002/articles/243032.html</link><dc:creator>wesley1987</dc:creator><author>wesley1987</author><pubDate>Thu, 27 Nov 2008 08:53:00 GMT</pubDate><guid>http://www.blogjava.net/wzl002/articles/243032.html</guid><wfw:comment>http://www.blogjava.net/wzl002/comments/243032.html</wfw:comment><comments>http://www.blogjava.net/wzl002/articles/243032.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wzl002/comments/commentRss/243032.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wzl002/services/trackbacks/243032.html</trackback:ping><description><![CDATA[今天试着不用自动生成，手动配置了一次struts。结果是 传到Action的form 一直为空，上网查寻后原因是：<br />
<br />
在struts-config.xml&nbsp;&nbsp; &lt;action&gt;里的name属性值要和你的formbean里的name属性值要一致,validate属性值要为true,要是没写默认为true<br />
<br />
看来有必要详看下struts-config.xml的配置。以下是复制于网上的&#8220;struts-config.xml详解&#8221;：<br />
&nbsp;<a href="http://www.9php.com/college/net/java/qt/2006/07/522422119091.html">http://www.9php.com/college/net/java/qt/2006/07/522422119091.html</a><br />
<div style="border-right: #666666 1px solid; border-top: #666666 1px solid; border-left: #666666 1px solid; border-bottom: #666666 1px solid">Struts的核心是struts-config.xml配置文件，在这个文件里描述了所有的Struts组件。在这里包括配置主要的组件及次要的组件，下面是struts-config.xml包含主要元素的内容：<br />
<br />
<strong>一、 &nbsp; &nbsp; &nbsp; &nbsp;struts-config.xml的主要元素：</strong><br />
&lt;?xml &nbsp;version=&#8221;1.0&#8221; &nbsp;encoding=&#8221;ISO-8859-1&#8221;?&gt;<br />
&lt;!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"&gt;<br />
&lt;struts-config&gt;<br />
&nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp;&lt;data-sources&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;data-source&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;/data-source&gt;<br />
&nbsp; &nbsp; &nbsp;&lt;/data-sources&gt;<br />
<br />
&nbsp; &nbsp; &nbsp;&lt;form-beans&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;form-bean &nbsp;name&nbsp;=&#8220; &#8221;&nbsp; type=&#8220; &#8221;&nbsp;&nbsp; /&nbsp;&gt;<br />
&nbsp; &nbsp; &nbsp;&lt;/form-beans&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;global-exceptions /&gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;global-forwards&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;forward &nbsp;/ &nbsp;&gt;<br />
&nbsp; &nbsp; &nbsp;&lt;/global-forwards&gt;<br />
<br />
&nbsp; &nbsp; &nbsp;&lt;action-mappings&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;action &nbsp;/ &nbsp;&gt;<br />
&nbsp; &nbsp; &nbsp;&lt;/action-mappings&gt;<br />
<br />
&nbsp; &nbsp; &nbsp;&lt;controller &nbsp;/ &nbsp;&gt;<br />
<br />
&nbsp; &nbsp; &nbsp;&lt;message-resources &nbsp;/ &nbsp;&gt;<br />
<br />
&nbsp; &nbsp; &nbsp;&lt;plug-in &nbsp;/&gt;<br />
<br />
&lt;/struts-config&gt;<br />
注意：<span style="color: #ff0000">以上各元素的顺序是非常重要的，你的struts-config.xml配置文件必须按照这个顺序进行配置，否则在你的容器启动的时候就会出错。<br />
</span>
<hr />
<br />
<strong>二、 &nbsp; &nbsp; &nbsp; &nbsp;struts-config.xml的子元素：</strong><br />
1．&lt;icon / &gt;子元素<br />
&nbsp; &nbsp; &nbsp;它包含&lt;small-icon &nbsp;/ &nbsp;&gt;及&lt;large-icon &nbsp;/ &nbsp;&gt;，它的作用是图形化其父元素，&lt;small-icon/&gt;的内容是一个16x16的图像文件，而&lt;large-icon/&gt;的内容是一个32x32的图像文件。如下例子：<br />
&nbsp; &nbsp; &nbsp;&lt;icon&gt;<br />
&lt;small-icon&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/images/smalllogo.gif<br />
&lt;/small-icon&gt;<br />
&lt;large-icon&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp;/images/largelogo.gif<br />
&lt;/large-icon&gt;<br />
&lt;/icon&gt;<br />
2．&lt;display-name &nbsp;/ &nbsp;&gt;子元素<br />
&nbsp; &nbsp; &nbsp;它提供对父元素的短文字（short &nbsp;textual）描述信息，如下：<br />
&nbsp; &nbsp; &nbsp;&lt;display-name&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;short &nbsp;textual &nbsp;discription &nbsp;of &nbsp;its &nbsp;parent &nbsp;element<br />
&nbsp; &nbsp; &nbsp;&lt;/display-name&gt;<br />
3．&lt;description &nbsp;/ &nbsp;&gt;子元素<br />
&nbsp; &nbsp; &nbsp;它提供对父元素的完全（full-length &nbsp;textual）的描述信息，如下：<br />
&lt;description&gt;<br />
full-length &nbsp;textual &nbsp;discription &nbsp;of &nbsp;its &nbsp;parent &nbsp;element<br />
&lt;/description&gt;<br />
4．&lt;set-property &nbsp;/ &nbsp;&gt;子元素<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;它用来设置它的父元素中设定的JavaBean的属性值，它一般用在指定的GenericDataSource &nbsp;属性，扩展的ActionMappings以及扩展的 &nbsp;global &nbsp;forwards。如下：<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;set-property &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;property="name &nbsp;of &nbsp;bean &nbsp;property" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />
value="value &nbsp;of &nbsp;bean &nbsp;property" &nbsp;/&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;例如：<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;set-property &nbsp;property="driverClass" &nbsp;value="org.gjt.mm.mysql.Driver" &nbsp;/&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;set-property &nbsp;property="user" &nbsp;value="admin"/&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;set-property &nbsp;property="maxCount" &nbsp;value="4"/&gt;<br />
&lt;set-property &nbsp;property="minCount" &nbsp;value="2"/&gt; &nbsp;<br />
&lt;set-property &nbsp;property="password" &nbsp;value=""/&gt; &nbsp;<br />
&lt;set-property &nbsp;property="url" &nbsp;value="jdbc:mysql://localhost:3306/struts"/&gt;<br />
<hr />
<br />
<strong>三、 &nbsp; &nbsp; &nbsp; &nbsp;配置JDBC数据源</strong><br />
其配置形式如下：<br />
&lt;data-sources&gt;<br />
&lt;data-source&gt;<br />
&lt;set-property &nbsp;property="driverClass" &nbsp;value="fully &nbsp;qualified &nbsp;path &nbsp;of &nbsp;JDBC &nbsp;driver"/&gt;<br />
&lt;set-property &nbsp;property="url" &nbsp;value="data &nbsp;source &nbsp;URL"/&gt;<br />
&lt;set-property &nbsp;property=&#8221;mincount&#8221; &nbsp;value="the &nbsp;minimum &nbsp;number &nbsp;of &nbsp;connections &nbsp;to &nbsp;open"/&gt;<br />
&lt;set-property &nbsp;property="password" &nbsp;value="the &nbsp;password &nbsp;used &nbsp;to &nbsp;create &nbsp;connections"/&gt;<br />
&lt;set-property &nbsp;property="user" &nbsp;value="the &nbsp;username &nbsp;used &nbsp;to &nbsp;create &nbsp;connections"/&gt;<br />
&lt;/data-source&gt;<br />
&lt;/data-sources&gt;<br />
&lt;data-source&gt;的属性及其描述信息如下：<br />
Key &nbsp; &nbsp; &nbsp; &nbsp;绑定在ServletContext上的DataSource实例的索引键，若不设定则缺省为Action.DATA_SOURCE_KEY，如果在应用程序中有多于一个的DataSource，则必须设置Key的值。<br />
DriverClass &nbsp; &nbsp; &nbsp; &nbsp;所用的JDBC驱动类(必须的)如：com.microsoft.jdbc.sqlserver.SQLServerDriver<br />
url &nbsp; &nbsp; &nbsp; &nbsp;所用的JDBC的URL(必须的)如：jdbc:microsoft:sqlserver://xg088:1433<br />
MaxCount &nbsp; &nbsp; &nbsp; &nbsp;同时打开的最大连结数，缺省值为2(可选的)<br />
MinCount &nbsp; &nbsp; &nbsp; &nbsp;同时打开的最小连结数，缺省值为1(可选的)<br />
User &nbsp; &nbsp; &nbsp; &nbsp;连结到数据库的用户名(必须的)<br />
Password &nbsp; &nbsp; &nbsp; &nbsp;连结到数据库的密码(必须的)<br />
Description &nbsp; &nbsp; &nbsp; &nbsp;关于DataSource的描述信息(可选的)<br />
ReadOnly &nbsp; &nbsp; &nbsp; &nbsp;如果设为true，则表示该连结是只读的，缺省为false。(可选的)<br />
LoginTimeout &nbsp; &nbsp; &nbsp; &nbsp;创建连结的最大允许时间，以秒为单位。(可选的)<br />
AutoCommit &nbsp; &nbsp; &nbsp; &nbsp;如果为true，则每次execute之后会强制回滚。缺省为true。(可选的)<br />
举例说明：<br />
<span style="color: #0000ff">&lt;data-sources&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp;&lt;data-source&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;set-property &nbsp;property=&#8221;key&#8221; &nbsp;value=&#8221; &nbsp;value="WILEY_DATA_SOURCE" &nbsp;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;set-property &nbsp;property="driverClass" &nbsp;value="org.gjt.mm.mysql.Driver" &nbsp;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;set-property &nbsp;property="url" &nbsp;value="jdbc:mysql://localhost/wileyusers" &nbsp;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;set-property &nbsp;property="maxCount" &nbsp;value="5"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;set-property &nbsp;property="minCount" &nbsp;value="1"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;set-property &nbsp;property="user" &nbsp;value="sa"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;set-property &nbsp;property="password" &nbsp;value="yourpassword"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/data-source&gt;<br />
&lt;/data-sources&gt;<br />
</span>
<hr />
<br />
<strong>四、 &nbsp; &nbsp; &nbsp; &nbsp;配置FormBean</strong><br />
&lt;form-bean &nbsp;/ &nbsp;&gt;用来定义将要绑定到Action的FormBean的实例。语法如下：<br />
&lt;form-beans&gt;<br />
&lt;form-bean &nbsp;name="name &nbsp;used &nbsp;to &nbsp;uniquely &nbsp;identify &nbsp;a &nbsp;FormBean"&nbsp; &nbsp;type=&#8221;fully &nbsp;qualified &nbsp;class &nbsp;name &nbsp;of &nbsp;FormBean"/&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;/form-beans&gt;<br />
例：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">&lt;form-beans&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form-bean &nbsp;name="lookupForm" &nbsp;type="wiley.LookupForm" &nbsp;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/form-beans&gt;</span><br />
<hr />
<br />
<strong>五、 &nbsp; &nbsp; &nbsp; &nbsp;配置全局转发</strong><br />
全局转发可以定义几个&lt;forward/&gt;子元素，struts首先会在&lt;action-mappings&gt;元素中找对应的&lt;forward&gt;，若找不到，则到全局转发配置中找。语法如下：<br />
&lt;global-forwards&gt;<br />
&lt;forward &nbsp;name="unique &nbsp;target &nbsp;identifier" &nbsp;<br />
path="context-relative &nbsp;path &nbsp;to &nbsp;targetted &nbsp;resource &nbsp;"/&gt;<br />
&lt;/global-forwards&gt;<br />
除了name及path属性之外，还有一个redirect属性，如果redirect设为true的时候，则用HttpServletResponse.sendRedirect()方法，否则用RequestDispatcher.forward()方法，缺省为false。<br />
注：如果为true，则用HttpServletResponse.sendRedirect()方法，此时存储在原来的HttpServletRequest中的值将会丢失。<br />
例子：<br />
&lt;global-forwards&gt;<br />
&lt;forward &nbsp;name="success" &nbsp;path="/welcome.jsp"/&gt;<br />
&lt;forward &nbsp;name="failure" &nbsp;path="/index.jsp"/&gt;<br />
&lt;/global-forwards&gt;<br />
<hr />
<br />
<strong style="color: #ff0000">六、 &nbsp; &nbsp; &nbsp; &nbsp;配置&lt;action-mappings&gt;</strong><br />
它可以定义几个&lt;action &nbsp;/ &nbsp;&gt;子元素，它主要是定义Action实例到ActionServlet类中，语法如下：<br />
&lt;action-mappings&gt;<br />
&lt;action &nbsp;path="context-relative &nbsp;path &nbsp;mapping &nbsp;action &nbsp;to &nbsp;a &nbsp;request"<br />
type="fully &nbsp;qualified &nbsp;class &nbsp;name &nbsp;of &nbsp;the &nbsp;Action &nbsp;class"<br />
name="the &nbsp;name &nbsp;of &nbsp;the &nbsp;form &nbsp;bean &nbsp;bound &nbsp;to &nbsp;this &nbsp;Action"&gt;<br />
&lt;forward &nbsp;name="forwardname1" &nbsp;path="context-relative &nbsp;path"/&gt;<br />
&lt;forward name="forwardname2" path="context-relative path"/&gt;<br />
&lt;/action&gt;<br />
&lt;/action-mappings&gt;<br />
&lt;action/&gt;属性及其描述信息如下：<br />
<strong>属&nbsp;&nbsp;性&nbsp;&nbsp;&nbsp;&nbsp;描 述 信 息<br />
Path&nbsp;&nbsp;&nbsp;&nbsp;在浏览器的URL中输入的字符(必须的)<br />
Type&nbsp;&nbsp;&nbsp;&nbsp;连结到本映射的Action的全称(可选的)<br />
Name&nbsp;&nbsp;&nbsp;&nbsp;与本操作关联的Action Bean在&lt;form-bean/&gt;中定义name名(可选的)<br />
Scope&nbsp;&nbsp;&nbsp;&nbsp;指定ActionForm Bean的作用域(session和request)，缺省为session。(可选的)<br />
Input&nbsp;&nbsp;&nbsp;&nbsp;当Bean发生错误时返回的控制。(可选的)<br />
ClassName&nbsp;&nbsp;&nbsp;&nbsp;指定一个调用这个Action类的ActionMapping类的全名。缺省用org.apache.struts.action.ActionMapping，(可选的)<br />
Forward&nbsp;&nbsp;&nbsp;&nbsp;指定处理相应请求所对应的JSP页面。(可选的)<br />
Include&nbsp;&nbsp;&nbsp;&nbsp;如果没有forward的时候，它起forward的作用。(可选的)<br />
Validate&nbsp;&nbsp;&nbsp;&nbsp;若为true，则会调用ActionForm的validate()方法，否则不调用，缺省为true。（可选的）<br />
</strong>例子：<br />
<span style="color: #0000ff">&lt;action-mappings&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;action path="/lookupAction"&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type="wiley.LookupAction"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name="LookupForm"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope="request"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validate="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input="/index.jsp"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;forward name="success" path="/quote.jsp"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;forward name="faliue" path="/index.jsp"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/action&gt;<br />
&lt;/action-mappings&gt;</span><br />
<hr />
<br />
<strong>七、&nbsp;&nbsp;&nbsp;&nbsp;配置RequestProcessor</strong><br />
在struts-config.xml文件中用&lt;controller/&gt;子元素来定义RequestProcessor，其语法格式如下：<br />
&lt;controller processorClass="fully qualified class name" /&gt;<br />
&lt;controller /&gt;元素属性及其描述信息如下：<br />
属&nbsp;&nbsp;性&nbsp;&nbsp;&nbsp;&nbsp;描&nbsp;&nbsp;述<br />
processorClass&nbsp;&nbsp;&nbsp;&nbsp;指定自定义的RequestProcessor类的全名<br />
BufferSize&nbsp;&nbsp;&nbsp;&nbsp;指定用来下载所用的缓存大小。缺省是4096字节。<br />
contentType&nbsp;&nbsp;&nbsp;&nbsp;定义response文本类型，缺省是text/html<br />
Debug&nbsp;&nbsp;&nbsp;&nbsp;定义当前系统的除错级别，缺省是0<br />
Locale&nbsp;&nbsp;&nbsp;&nbsp;如果是true，则在用户的session中存放Locale对象，缺省为true<br />
maxFileSize&nbsp;&nbsp;&nbsp;&nbsp;指定下载文件最大的大小。缺省是250M<br />
multipartClass&nbsp;&nbsp;&nbsp;&nbsp;指定去代替org.apache.struts.upload.DiskMultipartRequestHandler类的类的全名。<br />
Nocache&nbsp;&nbsp;&nbsp;&nbsp;如果是true，则会关闭每个response的缓存功能。缺省是false<br />
TempDir&nbsp;&nbsp;&nbsp;&nbsp;指定上载文件所用的临时目录。缺省值由容器决定<br />
例子：<br />
<span style="color: #0000ff">①</span><span style="color: #0000ff">&nbsp;&lt;controller processorClass="wiley.WileyRequestProcessor" /&gt;<br />
② &lt;controller&nbsp;&nbsp;&nbsp;&nbsp;contentType="text/html;charset=UTF-8"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debug="3"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;locale="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nocache="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;processorClass="org.apache.struts.action.RequestProcessor"/&gt;</span><br />
<hr />
<br />
<strong>八、&nbsp;&nbsp;&nbsp;&nbsp;配置Message Resources</strong><br />
在struts-config.xml文件中用&lt;message-resources /&gt;元素来定义消息资源。其语法如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;message-resources&nbsp;&nbsp;parameter="wiley.ApplicationResources"/&gt;<br />
&lt;message-resources /&gt;元素属性及其描述信息如下：<br />
属&nbsp;&nbsp;性&nbsp;&nbsp;&nbsp;&nbsp;描&nbsp;&nbsp;述<br />
Parameter&nbsp;&nbsp;&nbsp;&nbsp;给定资源文件全名<br />
ClassName&nbsp;&nbsp;&nbsp;&nbsp;定义处理消息资源的类名的全名，缺省是org.apache.struts.config.MessageResourcesConfig<br />
Factory&nbsp;&nbsp;&nbsp;&nbsp;定义MessageResourcesFactory类的全名，缺省是org.apache.struts.util.property.MessageResourcesFacotry<br />
Key&nbsp;&nbsp;&nbsp;&nbsp;定义绑定在这个资源包中的ServletContext的属性主键，缺省值是Action.MESSAGES_KEY.<br />
Null&nbsp;&nbsp;&nbsp;&nbsp;如果为true，则找不到消息key时，则返回null，缺省是true.<br />
例子：<br />
<span style="color: #0000ff">① &lt;message-resources parameter="wiley.ApplicationResources"/&gt;<br />
② &lt;message-resources<br />
&nbsp;&nbsp;&nbsp;&nbsp;parameter="StorefrontMessageResources"<br />
&nbsp;&nbsp;&nbsp;&nbsp;null="false"/&gt;<br />
&lt;message-resources<br />
&nbsp;&nbsp;&nbsp;&nbsp;key="IMAGE_RESOURCE_KEY"<br />
&nbsp;&nbsp;&nbsp;&nbsp;parameter="StorefrontImageResources"<br />
&nbsp;&nbsp;&nbsp;&nbsp;null="false"/&gt;</span><br />
注意：设定key的目的如下：<br />
&lt;html:img altKey="navbar.home.image.alt" bundle="IMAGE_RESOURCE_KEY" pageKey="navbar.home.image" width="125" height="15" border="0"/&gt;<br />
这里说明要到StorefrontImageResources.properties资源文件中找主键值是&#8221;navbar.home.image&#8221;所对应的值。<br />
这里StorefrontImageResources.properties的内容如下：<br />
&#8230;&#8230;<br />
navbar.home.image=/images/home.gif<br />
navbar.home.image.alt=Home<br />
&#8230;&#8230;<br />
此处navbar.home.image.alt说明的和&lt;img alt=&#8221;Home&#8221;&#8230;&#8230;/&gt;一样。<br />
<hr />
<br />
<strong>九、&nbsp;&nbsp;&nbsp;&nbsp;配置Plug-in</strong><br />
配置Plug-in如下：<br />
&lt;plug-in className="wiley.WileyPlugin"/&gt;<br />
也可如下：<br />
<span style="color: #0000ff">&lt;plug-in className="com.oreilly.struts.storefront.service.memory.StorefrontMemoryDatabasePlugIn"&gt;<br />
&nbsp;&nbsp;&lt;set-property property="pathname" value="/WEB-INF/database.xml"/&gt;<br />
&lt;/plug-in&gt;</span><br />
</div>
下面是我现在的struts-config.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&nbsp;version="1.0"&nbsp;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&nbsp;struts-config&nbsp;PUBLIC&nbsp;"-//Apache&nbsp;Software&nbsp;Foundation//DTD&nbsp;Struts&nbsp;Configuration&nbsp;1.3//EN"&nbsp;"http://struts.apache.org/dtds/struts-config_1_3.dtd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">struts-config</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form-beans&nbsp;</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">form-bean&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="OfferForm"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="com.neusoft.struts.form.OfferForm"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form-beans</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">global-exceptions&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">global-forwards&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">action-mappings&nbsp;</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">action<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">attribute</span><span style="color: #0000ff">="OfferForm"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input</span><span style="color: #0000ff">="/service/offerNew.jsp"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name</span><span style="color: #0000ff">="OfferForm"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path</span><span style="color: #0000ff">="/addOffer"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope</span><span style="color: #0000ff">="request"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span><span style="color: #0000ff">="com.neusoft.struts.action.AddOfferAction"</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">forward&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="message"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="/service/message.jsp"</span><span style="color: #ff0000">&nbsp;</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">forward&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="fail"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="/service/offerNew.jsp"</span><span style="color: #ff0000">&nbsp;</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">action</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">action&nbsp;</span><span style="color: #ff0000">path</span><span style="color: #0000ff">="/offerSearch"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input</span><span style="color: #0000ff">="/service/offerSearch.jsp"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope</span><span style="color: #0000ff">="request"</span><span style="color: #ff0000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span><span style="color: #0000ff">="com.neusoft.struts.action.OfferSearchAction"</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;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">forward&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="show"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="/service/offerSearch.jsp"</span><span style="color: #ff0000">&nbsp;</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">action</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">action&nbsp;&nbsp;</span><span style="color: #ff0000">attribute</span><span style="color: #0000ff">="OfferForm"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name</span><span style="color: #0000ff">="OfferForm"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path</span><span style="color: #0000ff">="/offerUpdate"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input</span><span style="color: #0000ff">="/service/offerUpdate.jsp"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope</span><span style="color: #0000ff">="request"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type&nbsp;</span><span style="color: #0000ff">="com.neusoft.struts.action.OfferUpdateAction"</span><span style="color: #ff0000">&nbsp;</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">forward&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="message"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="/service/message.jsp"</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;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">forward&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="fail"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="/service/offerUpdate.jsp"</span><span style="color: #ff0000">&nbsp;</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">action</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action-mappings</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">message-resources&nbsp;</span><span style="color: #ff0000">parameter</span><span style="color: #0000ff">="com.neusoft.struts.ApplicationResources"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">struts-config</span><span style="color: #0000ff">&gt;</span></div>
<br />
<img src ="http://www.blogjava.net/wzl002/aggbug/243032.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wzl002/" target="_blank">wesley1987</a> 2008-11-27 16:53 <a href="http://www.blogjava.net/wzl002/articles/243032.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在MVC中实现的分页。</title><link>http://www.blogjava.net/wzl002/articles/242988.html</link><dc:creator>wesley1987</dc:creator><author>wesley1987</author><pubDate>Thu, 27 Nov 2008 05:34:00 GMT</pubDate><guid>http://www.blogjava.net/wzl002/articles/242988.html</guid><wfw:comment>http://www.blogjava.net/wzl002/comments/242988.html</wfw:comment><comments>http://www.blogjava.net/wzl002/articles/242988.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wzl002/comments/commentRss/242988.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wzl002/services/trackbacks/242988.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.。JSP页面中：////////////数据显示///////////////////////显示 从数据库查出的，放在 list&lt;offer&gt; 中的数据。&lt;c:forEach&nbsp;items="${requestScope.list}"&nbsp;var="offer"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&n...&nbsp;&nbsp;<a href='http://www.blogjava.net/wzl002/articles/242988.html'>阅读全文</a><img src ="http://www.blogjava.net/wzl002/aggbug/242988.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wzl002/" target="_blank">wesley1987</a> 2008-11-27 13:34 <a href="http://www.blogjava.net/wzl002/articles/242988.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javaScript 实现 点击日期输入出现日期菜单</title><link>http://www.blogjava.net/wzl002/articles/242622.html</link><dc:creator>wesley1987</dc:creator><author>wesley1987</author><pubDate>Tue, 25 Nov 2008 11:17:00 GMT</pubDate><guid>http://www.blogjava.net/wzl002/articles/242622.html</guid><wfw:comment>http://www.blogjava.net/wzl002/comments/242622.html</wfw:comment><comments>http://www.blogjava.net/wzl002/articles/242622.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wzl002/comments/commentRss/242622.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wzl002/services/trackbacks/242622.html</trackback:ping><description><![CDATA[<p>&lt;!--<br />
/* 调用方法：<br />
&nbsp; &lt;input onfocus="calendar()" name="s2" type="text" id="s2" style="width:100%;" /&gt;<br />
*/<br />
var cal_Width = 180;//定义日历显示的宽度，至少140</p>
<p>document.write("&lt;div id='meizzCalendarLayer' style='position: absolute; z-index: 9999; width: " + (cal_Width+4).toString() + "px; height: 193px; display: none'&gt;");<br />
document.write("&lt;iframe name='meizzCalendarIframe' scrolling='no' frameborder='0' width='100%' height='100%'&gt;&lt;/iframe&gt;&lt;/div&gt;");<br />
var WebCalendar = new WebCalendar();</p>
<p>function document.onclick()<br />
{<br />
&nbsp;&nbsp;&nbsp; if(WebCalendar.eventSrc != window.event.srcElement) hiddenCalendar();<br />
}</p>
<p>function WebCalendar() //初始化日历的设置<br />
{<br />
&nbsp;&nbsp;&nbsp; this.regInfo&nbsp;&nbsp;&nbsp; = "WEB Calendar ver 3.0&#13;关闭的快捷键：[Esc]";<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; this.dayShow&nbsp;&nbsp;&nbsp; = 38;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //定义页面上要显示的天数,不能小于35,或大于39<br />
&nbsp;&nbsp;&nbsp; this.daysMonth&nbsp; = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);<br />
&nbsp;&nbsp;&nbsp; this.day&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = new Array(this.dayShow);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //定义日历展示用的数组<br />
&nbsp;&nbsp;&nbsp; this.dayObj&nbsp;&nbsp;&nbsp;&nbsp; = new Array(this.dayShow);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //定义日期展示控件数组<br />
&nbsp;&nbsp;&nbsp; this.dateStyle&nbsp; = null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //保存格式化后日期数组<br />
&nbsp;&nbsp;&nbsp; this.objExport&nbsp; = null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //日历回传的显示控件<br />
&nbsp;&nbsp;&nbsp; this.eventSrc&nbsp;&nbsp; = null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //日历显示的触发控件<br />
&nbsp;&nbsp;&nbsp; this.inputDate&nbsp; = null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //转化外的输入的日期(d/m/yyyy)<br />
&nbsp;&nbsp;&nbsp; this.thisYear&nbsp;&nbsp; = new Date().getFullYear(); //定义年的变量的初始值<br />
&nbsp;&nbsp;&nbsp; this.thisMonth&nbsp; = new Date().getMonth()+ 1; //定义月的变量的初始值<br />
&nbsp;&nbsp;&nbsp; this.thisDay&nbsp;&nbsp;&nbsp; = new Date().getDate();&nbsp;&nbsp;&nbsp;&nbsp; //定义日的变量的初始值<br />
&nbsp;&nbsp;&nbsp; this.today&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = this.thisDay +"/"+ this.thisMonth +"/"+ this.thisYear;&nbsp;&nbsp; //今天(d/m/yyyy)<br />
&nbsp;&nbsp;&nbsp; this.iframe&nbsp;&nbsp;&nbsp;&nbsp; = window.frames("meizzCalendarIframe"); //日历的 iframe 载体<br />
&nbsp;&nbsp;&nbsp; this.calendar&nbsp;&nbsp; = getObjectById("meizzCalendarLayer");&nbsp; //日历的层<br />
&nbsp;&nbsp;&nbsp; this.dateReg&nbsp;&nbsp;&nbsp; = "";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //日历格式验证的正则式</p>
<p>&nbsp;&nbsp;&nbsp; this.yearFall&nbsp;&nbsp; = 50;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //定义显示的年份下拉框的年差值，如果今年是2000年，这里设置为50，就显示1950－2050<br />
&nbsp;&nbsp;&nbsp; this.format&nbsp;&nbsp;&nbsp;&nbsp; = "yyyy-mm-dd"; //回传日期的格式<br />
&nbsp;&nbsp;&nbsp; this.timeShow&nbsp;&nbsp; = false;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //是否返回时间<br />
&nbsp;&nbsp;&nbsp; this.drag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = true;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //是否允许拖动<br />
&nbsp;&nbsp;&nbsp; this.darkColor&nbsp; = "#95B7F3";&nbsp;&nbsp;&nbsp; //控件的暗色<br />
&nbsp;&nbsp;&nbsp; this.lightColor = "#FFFFFF";&nbsp;&nbsp;&nbsp; //控件的亮色<br />
&nbsp;&nbsp;&nbsp; this.btnBgColor = "#E6E6FA";&nbsp;&nbsp;&nbsp; //控件的按钮背景色<br />
&nbsp;&nbsp;&nbsp; this.wordColor&nbsp; = "#000080";&nbsp;&nbsp;&nbsp; //控件的文字颜色<br />
&nbsp;&nbsp;&nbsp; this.wordDark&nbsp;&nbsp; = "#DCDCDC";&nbsp;&nbsp;&nbsp; //控件的暗文字颜色<br />
&nbsp;&nbsp;&nbsp; this.dayBgColor = "#F5F5FA";&nbsp;&nbsp;&nbsp; //日期数字背景色<br />
&nbsp;&nbsp;&nbsp; this.todayColor = "#FF0000";&nbsp;&nbsp;&nbsp; //今天在日历上的标示背景色<br />
&nbsp;&nbsp;&nbsp; this.DarkBorder = "#D4D0C8";&nbsp;&nbsp;&nbsp; //日期显示的立体表达色<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; this.yearOption = "";<br />
&nbsp;&nbsp;&nbsp; var yearNow = new Date().getFullYear();<br />
&nbsp;&nbsp;&nbsp; yearNow = (yearNow &lt;= 1000)? 1000 : ((yearNow &gt;= 9999)? 9999 : yearNow);<br />
&nbsp;&nbsp;&nbsp; var yearMin = (yearNow - this.yearFall &gt;= 1000) ? yearNow - this.yearFall : 1000;<br />
&nbsp;&nbsp;&nbsp; var yearMax = (yearNow + this.yearFall &lt;= 9999) ? yearNow + this.yearFall : 9999;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yearMin = (yearMax == 9999) ? yearMax-this.yearFall*2 : yearMin;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yearMax = (yearMin == 1000) ? yearMin+this.yearFall*2 : yearMax;<br />
&nbsp;&nbsp;&nbsp; for (var i=yearMin; i&lt;=yearMax; i++) this.yearOption += "&lt;option value='"+i+"'&gt;"+i+"年&lt;/option&gt;";<br />
}&nbsp;&nbsp; </p>
<p>function writeIframe()<br />
{<br />
&nbsp;&nbsp;&nbsp; var strIframe = "&lt;html&gt;&lt;head&gt;&lt;meta http-equiv='Content-Type' content='text/html; charset=gb2312'&gt;&lt;style&gt;"+<br />
&nbsp;&nbsp;&nbsp; "*{font-size: 12px; font-family: 宋体}"+<br />
&nbsp;&nbsp;&nbsp; ".bg{&nbsp; color: "+ WebCalendar.lightColor +"; cursor: default; background-color: "+ WebCalendar.darkColor +";}"+<br />
&nbsp;&nbsp;&nbsp; "table#tableMain{ width: "+ (cal_Width+2).toString() +"px; height: 180px;}"+<br />
&nbsp;&nbsp;&nbsp; "table#tableWeek td{ width:14%;color: "+ WebCalendar.lightColor +";}"+<br />
&nbsp;&nbsp;&nbsp; "table#tableDay&nbsp; td{ width:14%;font-weight: bold;}"+<br />
&nbsp;&nbsp;&nbsp; "td#meizzYearHead, td#meizzYearMonth{color: "+ WebCalendar.wordColor +"}"+<br />
&nbsp;&nbsp;&nbsp; ".out { text-align: center; border-top: 1px solid "+ WebCalendar.DarkBorder +"; border-left: 1px solid "+ WebCalendar.DarkBorder +";"+<br />
&nbsp;&nbsp;&nbsp; "border-right: 1px solid "+ WebCalendar.lightColor +"; border-bottom: 1px solid "+ WebCalendar.lightColor +";}"+<br />
&nbsp;&nbsp;&nbsp; ".over{ text-align: center; border-top: 1px solid #FFFFFF; border-left: 1px solid #FFFFFF;"+<br />
&nbsp;&nbsp;&nbsp; "border-bottom: 1px solid "+ WebCalendar.DarkBorder +"; border-right: 1px solid "+ WebCalendar.DarkBorder +"}"+<br />
&nbsp;&nbsp;&nbsp; "input{ border: 1px solid "+ WebCalendar.darkColor +"; padding-top: 1px; height: 18px; cursor: hand;"+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; color:"+ WebCalendar.wordColor +"; background-color: "+ WebCalendar.btnBgColor +"}"+<br />
&nbsp;&nbsp;&nbsp; "&lt;/style&gt;&lt;/head&gt;&lt;body onselectstart='return false' style='margin: 0px' oncontextmenu='return false'&gt;&lt;form name=meizz&gt;";</p>
<p>&nbsp;&nbsp;&nbsp; if (WebCalendar.drag){ strIframe += "&lt;scr"+"ipt language=javascript&gt;"+<br />
&nbsp;&nbsp;&nbsp; "var drag=false, cx=0, cy=0, o = parent.WebCalendar.calendar; function document.onmousemove(){"+<br />
&nbsp;&nbsp;&nbsp; "if(parent.WebCalendar.drag &amp;&amp; drag){if(o.style.left=='')o.style.left=0; if(o.style.top=='')o.style.top=0;"+<br />
&nbsp;&nbsp;&nbsp; "o.style.left = parseInt(o.style.left) + window.event.clientX-cx;"+<br />
&nbsp;&nbsp;&nbsp; "o.style.top&nbsp; = parseInt(o.style.top)&nbsp; + window.event.clientY-cy;}}"+<br />
&nbsp;&nbsp;&nbsp; "function document.onkeydown(){ switch(window.event.keyCode){&nbsp; case 27 : parent.hiddenCalendar(); break;"+<br />
&nbsp;&nbsp;&nbsp; "case 37 : parent.prevM(); break; case 38 : parent.prevY(); break; case 39 : parent.nextM(); break; case 40 : parent.nextY(); break;"+<br />
&nbsp;&nbsp;&nbsp; "case 84 : document.forms[0].today.click(); break;} " +<br />
&nbsp;&nbsp;&nbsp; "try{window.event.keyCode = 0; window.event.returnValue= false;}catch(ee){}}"+<br />
&nbsp;&nbsp;&nbsp; "function dragStart(){cx=window.event.clientX; cy=window.event.clientY; drag=true;}&lt;/scr"+"ipt&gt;"}</p>
<p>&nbsp;&nbsp;&nbsp; strIframe += "&lt;table id=tableMain class=bg border=0 cellspacing=2 cellpadding=0&gt;"+<br />
&nbsp;&nbsp;&nbsp; "&lt;tr&gt;&lt;td width='"+ cal_Width +"px' height='19px' bgcolor='"+ WebCalendar.lightColor +"'&gt;"+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp; &lt;table width='"+ cal_Width +"px' id='tableHead' border='0' cellspacing='1' cellpadding='0'&gt;&lt;tr align='center'&gt;"+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp; &lt;td width='10%' height='19px' class='bg' title='向前翻 1 月&#13;快捷键：&#8592;' style='cursor: hand' onclick='parent.prevM()'&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/td&gt;"+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp; &lt;td width='45%' id=meizzYearHead "+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onmouseover='this.bgColor=parent.WebCalendar.darkColor; this.style.color=parent.WebCalendar.lightColor'"+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onmouseout='this.bgColor=parent.WebCalendar.lightColor; this.style.color=parent.WebCalendar.wordColor'&gt;" + <br />
&nbsp;&nbsp;&nbsp; "&lt;select name=tmpYearSelect&nbsp; onblur='parent.hiddenSelect(this)' style='width:100%;'"+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onchange='parent.WebCalendar.thisYear =this.value; parent.hiddenSelect(this); parent.writeCalendar();'&gt;";<br />
&nbsp;&nbsp;&nbsp; <br />
//&nbsp;&nbsp;&nbsp; var yearNow = new Date().getFullYear();<br />
//&nbsp;&nbsp;&nbsp; yearNow = (yearNow &lt;= 1000)? 1000 : ((yearNow &gt;= 9999)? 9999 : yearNow);<br />
//&nbsp;&nbsp;&nbsp; var yearMin = (yearNow - WebCalendar.yearFall &gt;= 1000) ? yearNow - WebCalendar.yearFall : 1000;<br />
//&nbsp;&nbsp;&nbsp; var yearMax = (yearNow + WebCalendar.yearFall &lt;= 9999) ? yearNow + WebCalendar.yearFall : 9999;<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yearMin = (yearMax == 9999) ? yearMax-WebCalendar.yearFall*2 : yearMin;<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yearMax = (yearMin == 1000) ? yearMin+WebCalendar.yearFall*2 : yearMax;<br />
//&nbsp;&nbsp;&nbsp; for (var i=yearMin; i&lt;=yearMax; i++) strIframe += "&lt;option value='"+i+"'&gt;"+i+"年&lt;/option&gt;";</p>
<p>&nbsp;&nbsp;&nbsp; strIframe += WebCalendar.yearOption + "&lt;/select&gt;"+<br />
&nbsp;&nbsp;&nbsp; "&lt;/td&gt;"+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp; &lt;td width='35%' id=meizzYearMonth "+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onmouseover='this.bgColor=parent.WebCalendar.darkColor; this.style.color=parent.WebCalendar.lightColor'"+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onmouseout='this.bgColor=parent.WebCalendar.lightColor; this.style.color=parent.WebCalendar.wordColor'&gt;" +<br />
&nbsp;&nbsp;&nbsp; "&lt;select name=tmpMonthSelect onblur='parent.hiddenSelect(this)' style='width:100%;'" +&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onchange='parent.WebCalendar.thisMonth=this.value; parent.hiddenSelect(this); parent.writeCalendar();'&gt;";<br />
&nbsp;&nbsp;&nbsp; for (var i=1; i&lt;13; i++) strIframe += "&lt;option value='"+i+"'&gt;"+i+"月&lt;/option&gt;";<br />
&nbsp;&nbsp;&nbsp; strIframe += "&lt;/select&gt;"+<br />
&nbsp;&nbsp;&nbsp; "&lt;/td&gt;"+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp; &lt;td width='10%' class=bg title='向后翻 1 月&#13;快捷键：&#8594;' onclick='parent.nextM()' style='cursor: hand'&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;"+<br />
&nbsp;&nbsp;&nbsp; "&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td height='20px'&gt;"+<br />
&nbsp;&nbsp;&nbsp; "&lt;table id=tableWeek border=1 width='"+ cal_Width +"px' cellpadding=0 cellspacing=0 ";<br />
&nbsp;&nbsp;&nbsp; if(WebCalendar.drag){strIframe += "onmousedown='dragStart()' onmouseup='drag=false' ";}<br />
&nbsp;&nbsp;&nbsp; strIframe += " borderColorLight='"+ WebCalendar.darkColor +"' borderColorDark='"+ WebCalendar.lightColor +"'&gt;"+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp; &lt;tr align=center&gt;&lt;td height='20px'&gt;日&lt;/td&gt;&lt;td&gt;一&lt;/td&gt;&lt;td&gt;二&lt;/td&gt;&lt;td&gt;三&lt;/td&gt;&lt;td&gt;四&lt;/td&gt;&lt;td&gt;五&lt;/td&gt;&lt;td&gt;六&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;"+<br />
&nbsp;&nbsp;&nbsp; "&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=top width='"+ cal_Width +"px' bgcolor='"+ WebCalendar.lightColor +"'&gt;"+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp; &lt;table id=tableDay height='120px' width='"+ cal_Width +"px' border=0 cellspacing=1 cellpadding=0&gt;";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var x=0; x&lt;5; x++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strIframe += "&lt;tr&gt;";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var y=0; y&lt;7; y++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strIframe += "&lt;td class=out id='meizzDay"+ (x*7+y) +"'&gt;&lt;/td&gt;"; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strIframe += "&lt;/tr&gt;";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strIframe += "&lt;tr&gt;";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var x=35; x&lt;WebCalendar.dayShow; x++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strIframe += "&lt;td class=out id='meizzDay"+ x +"'&gt;&lt;/td&gt;";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strIframe +="&lt;td colspan="+(42-WebCalendar.dayShow).toString()+" class=out style='text-align:center;' title='"+ WebCalendar.regInfo +"'&gt;" + <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;input style=' background-color: " + WebCalendar.btnBgColor +";cursor: hand; padding-top: 2px; width: 44%; height: 100%;' onfocus='this.blur()'"+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " type=button value='清空' onclick='parent.WebCalendar.objExport.value=\"\";parent.hiddenCalendar()'&gt;" + <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&amp;nbsp;" + <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;input style=' background-color: " + WebCalendar.btnBgColor +";cursor: hand; padding-top: 2px; width: 43%; height: 100%;' onfocus='this.blur()'"+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " type=button value='关闭' onclick='parent.hiddenCalendar()'&gt;" + <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;"+<br />
&nbsp;&nbsp;&nbsp; "&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td height='20px' width='"+ cal_Width +"px' bgcolor='"+ WebCalendar.lightColor +"'&gt;"+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp; &lt;table border=0 cellpadding=1 cellspacing=0 width='"+ cal_Width +"px'&gt;"+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp; &lt;tr&gt;&lt;td&gt;&lt;input name=prevYear title='向前翻 1 年&#13;快捷键：&#8593;' onclick='parent.prevY()' type=button value='&amp;lt;&amp;lt;'"+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp; onfocus='this.blur()' style='meizz:expression(this.disabled=parent.WebCalendar.thisYear==1000)'&gt;&lt;input"+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp; onfocus='this.blur()' name=prevMonth title='向前翻 1 月&#13;快捷键：&#8592;' onclick='parent.prevM()' type=button value='&amp;lt;&amp;nbsp;'&gt;"+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp; &lt;/td&gt;&lt;td align=center&gt;&lt;input name=today type=button value='Today' onfocus='this.blur()' style='width: 50px;' title='当前日期&#13;快捷键：T'"+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp; onclick=\"parent.returnDate(new Date().getDate() +'/'+ (new Date().getMonth() +1) +'/'+ new Date().getFullYear())\"&gt;"+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp; &lt;/td&gt;&lt;td align=right&gt;&lt;input title='向后翻 1 月&#13;快捷键：&#8594;' name=nextMonth onclick='parent.nextM()' type=button value='&amp;nbsp;&amp;gt;'"+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp; onfocus='this.blur()'&gt;&lt;input name=nextYear title='向后翻 1 年&#13;快捷键：&#8595;' onclick='parent.nextY()' type=button value='&amp;gt;&amp;gt;'"+<br />
&nbsp;&nbsp;&nbsp; "&nbsp;&nbsp;&nbsp; onfocus='this.blur()' style='meizz:expression(this.disabled=parent.WebCalendar.thisYear==9999)'&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;"+<br />
&nbsp;&nbsp;&nbsp; "&lt;/td&gt;&lt;/tr&gt;&lt;table&gt;&lt;/form&gt;&lt;/body&gt;&lt;/html&gt;";<br />
&nbsp;&nbsp;&nbsp; with(WebCalendar.iframe)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.writeln(strIframe); document.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var i=0; i&lt;WebCalendar.dayShow; i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.dayObj[i] = eval("meizzDay"+ i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.dayObj[i].onmouseover = dayMouseOver;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.dayObj[i].onmouseout&nbsp; = dayMouseOut;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.dayObj[i].onclick&nbsp;&nbsp;&nbsp;&nbsp; = returnDate;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>function calendar() //主调函数<br />
{<br />
&nbsp;&nbsp;&nbsp; var e = window.event.srcElement;&nbsp;&nbsp; writeIframe();<br />
&nbsp;&nbsp;&nbsp; var o = WebCalendar.calendar.style; WebCalendar.eventSrc = e;<br />
&nbsp;if (arguments.length == 0) WebCalendar.objExport = e;<br />
&nbsp;&nbsp;&nbsp; else WebCalendar.objExport = eval(arguments[0]);</p>
<p>&nbsp;&nbsp;&nbsp; WebCalendar.iframe.tableWeek.style.cursor = WebCalendar.drag ? "move" : "default";<br />
&nbsp;var t = e.offsetTop,&nbsp; h = e.clientHeight, l = e.offsetLeft, p = e.type;<br />
&nbsp;while (e = e.offsetParent){t += e.offsetTop; l += e.offsetLeft;}<br />
&nbsp;&nbsp;&nbsp; o.display = ""; WebCalendar.iframe.document.body.focus();<br />
&nbsp;&nbsp;&nbsp; var cw = WebCalendar.calendar.clientWidth, ch = WebCalendar.calendar.clientHeight;<br />
&nbsp;&nbsp;&nbsp; var dw = document.body.clientWidth, dl = document.body.scrollLeft, dt = document.body.scrollTop;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; if (document.body.clientHeight + dt - t - h &gt;= ch) o.top = (p=="image")? t + h : t + h + 6;<br />
&nbsp;&nbsp;&nbsp; else o.top&nbsp; = (t - dt &lt; ch) ? ((p=="image")? t + h : t + h + 6) : t - ch;<br />
&nbsp;&nbsp;&nbsp; if (dw + dl - l &gt;= cw) o.left = l; else o.left = (dw &gt;= cw) ? dw - cw + dl : dl;</p>
<p>&nbsp;&nbsp;&nbsp; if&nbsp; (!WebCalendar.timeShow) WebCalendar.dateReg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/;<br />
&nbsp;&nbsp;&nbsp; else WebCalendar.dateReg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;</p>
<p>&nbsp;&nbsp;&nbsp; try{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (WebCalendar.objExport.value.trim() != ""){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.dateStyle = WebCalendar.objExport.value.trim().match(WebCalendar.dateReg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (WebCalendar.dateStyle == null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.thisYear&nbsp;&nbsp; = new Date().getFullYear();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.thisMonth&nbsp; = new Date().getMonth()+ 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.thisDay&nbsp;&nbsp;&nbsp; = new Date().getDate();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("原文本框里的日期有错误！\n可能与你定义的显示时分秒有冲突！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writeCalendar(); return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.thisYear&nbsp;&nbsp; = parseInt(WebCalendar.dateStyle[1], 10);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.thisMonth&nbsp; = parseInt(WebCalendar.dateStyle[3], 10);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.thisDay&nbsp;&nbsp;&nbsp; = parseInt(WebCalendar.dateStyle[4], 10);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.inputDate&nbsp; = parseInt(WebCalendar.thisDay, 10) +"/"+ parseInt(WebCalendar.thisMonth, 10) +"/"+ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parseInt(WebCalendar.thisYear, 10); writeCalendar();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.thisYear&nbsp;&nbsp; = new Date().getFullYear();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.thisMonth&nbsp; = new Date().getMonth()+ 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.thisDay&nbsp;&nbsp;&nbsp; = new Date().getDate();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writeCalendar();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; } catch(e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.thisYear&nbsp;&nbsp; = new Date().getFullYear();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.thisMonth&nbsp; = new Date().getMonth()+ 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.thisDay&nbsp;&nbsp;&nbsp; = new Date().getDate();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writeCalendar();<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>function funMonthSelect() //月份的下拉框<br />
{<br />
&nbsp;&nbsp;&nbsp; var m = isNaN(parseInt(WebCalendar.thisMonth, 10)) ? new Date().getMonth() + 1 : parseInt(WebCalendar.thisMonth);<br />
&nbsp;&nbsp;&nbsp; var e = WebCalendar.iframe.document.forms[0].tmpMonthSelect;<br />
&nbsp;&nbsp;&nbsp; e.value = m; //e.focus(); <br />
&nbsp;&nbsp;&nbsp; //window.status = e.style.left;<br />
}</p>
<p>function funYearSelect() //年份的下拉框<br />
{<br />
&nbsp;&nbsp;&nbsp; var e = WebCalendar.iframe.document.forms[0].tmpYearSelect;<br />
&nbsp;&nbsp;&nbsp; var y = isNaN(parseInt(WebCalendar.thisYear, 10)) ? new Date().getFullYear() : parseInt(WebCalendar.thisYear);<br />
&nbsp;&nbsp;&nbsp; e.value = y; //e.focus();<br />
//&nbsp;&nbsp;&nbsp; if(e.value == "")<br />
//&nbsp;&nbsp;&nbsp; {<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.value = new Date().getFullYear();<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.thisYear = e.value;<br />
//&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>function prevM()&nbsp; //往前翻月份<br />
{<br />
&nbsp;&nbsp;&nbsp; WebCalendar.thisDay = 1;<br />
&nbsp;&nbsp;&nbsp; if (WebCalendar.thisMonth==1)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.thisYear--;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.thisMonth=13;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; WebCalendar.thisMonth--; writeCalendar();<br />
}</p>
<p>function nextM()&nbsp; //往后翻月份<br />
{<br />
&nbsp;&nbsp;&nbsp; WebCalendar.thisDay = 1;<br />
&nbsp;&nbsp;&nbsp; if (WebCalendar.thisMonth==12)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.thisYear++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.thisMonth=0;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; WebCalendar.thisMonth++; writeCalendar();<br />
}<br />
function prevY(){WebCalendar.thisDay = 1; WebCalendar.thisYear--; writeCalendar();}//往前翻 Year<br />
function nextY(){WebCalendar.thisDay = 1; WebCalendar.thisYear++; writeCalendar();}//往后翻 Year<br />
function hiddenSelect(e){<br />
&nbsp; //for(var i=e.options.length; i&gt;-1; i--)e.options.remove(i); e.style.display="none";<br />
}<br />
function getObjectById(id){ if(document.all) return(eval("document.all."+ id)); return(eval(id)); }<br />
function hiddenCalendar(){getObjectById("meizzCalendarLayer").style.display = "none";};<br />
function appendZero(n){return(("00"+ n).substr(("00"+ n).length-2));}//日期自动补零程序<br />
function String.prototype.trim(){return this.replace(/(^\s*)|(\s*$)/g,"");}<br />
function dayMouseOver()<br />
{<br />
&nbsp;&nbsp;&nbsp; this.className = "over";<br />
&nbsp;&nbsp;&nbsp; this.style.backgroundColor = WebCalendar.darkColor;<br />
&nbsp;&nbsp;&nbsp; if(WebCalendar.day[this.id.substr(8)].split("/")[1] == WebCalendar.thisMonth)<br />
&nbsp;&nbsp;&nbsp; this.style.color = WebCalendar.lightColor;<br />
}<br />
function dayMouseOut()<br />
{<br />
&nbsp;&nbsp;&nbsp; this.className = "out"; var d = WebCalendar.day[this.id.substr(8)], a = d.split("/");<br />
&nbsp;&nbsp;&nbsp; this.style.removeAttribute('backgroundColor');<br />
&nbsp;&nbsp;&nbsp; if(a[1] == WebCalendar.thisMonth &amp;&amp; d != WebCalendar.today)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(WebCalendar.dateStyle &amp;&amp; a[0] == parseInt(WebCalendar.dateStyle[4], 10))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.style.color = WebCalendar.lightColor;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.style.color = WebCalendar.wordColor;<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
function writeCalendar() //对日历显示的数据的处理程序<br />
{<br />
&nbsp;&nbsp;&nbsp; var y = WebCalendar.thisYear;<br />
&nbsp;&nbsp;&nbsp; var m = WebCalendar.thisMonth; <br />
&nbsp;&nbsp;&nbsp; var d = WebCalendar.thisDay;<br />
&nbsp;&nbsp;&nbsp; WebCalendar.daysMonth[1] = (0==y%4 &amp;&amp; (y%100!=0 || y%400==0)) ? 29 : 28;<br />
&nbsp;&nbsp;&nbsp; if (!(y&lt;=9999 &amp;&amp; y &gt;= 1000 &amp;&amp; parseInt(m, 10)&gt;0 &amp;&amp; parseInt(m, 10)&lt;13 &amp;&amp; parseInt(d, 10)&gt;0)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("对不起，你输入了错误的日期！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.thisYear&nbsp;&nbsp; = new Date().getFullYear();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.thisMonth&nbsp; = new Date().getMonth()+ 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.thisDay&nbsp;&nbsp;&nbsp; = new Date().getDate(); }<br />
&nbsp;&nbsp;&nbsp; y = WebCalendar.thisYear;<br />
&nbsp;&nbsp;&nbsp; m = WebCalendar.thisMonth;<br />
&nbsp;&nbsp;&nbsp; d = WebCalendar.thisDay;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; funYearSelect(parseInt(y, 10));<br />
&nbsp;&nbsp;&nbsp; funMonthSelect(parseInt(m,10));<br />
&nbsp;&nbsp;&nbsp; //WebCalendar.iframe.meizzYearHead.innerText&nbsp; = y +" 年";<br />
&nbsp;&nbsp;&nbsp; //WebCalendar.iframe.meizzYearMonth.innerText = parseInt(m, 10) +" 月";<br />
&nbsp;&nbsp;&nbsp; WebCalendar.daysMonth[1] = (0==y%4 &amp;&amp; (y%100!=0 || y%400==0)) ? 29 : 28; //闰年二月为29天<br />
&nbsp;&nbsp;&nbsp; var w = new Date(y, m-1, 1).getDay();<br />
&nbsp;&nbsp;&nbsp; var prevDays = m==1&nbsp; ? WebCalendar.daysMonth[11] : WebCalendar.daysMonth[m-2];<br />
&nbsp;&nbsp;&nbsp; for(var i=(w-1); i&gt;=0; i--) //这三个 for 循环为日历赋数据源（数组 WebCalendar.day）格式是 d/m/yyyy<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.day[i] = prevDays +"/"+ (parseInt(m, 10)-1) +"/"+ y;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(m==1) WebCalendar.day[i] = prevDays +"/"+ 12 +"/"+ (parseInt(y, 10)-1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prevDays--;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; for(var i=1; i&lt;=WebCalendar.daysMonth[m-1]; i++) WebCalendar.day[i+w-1] = i +"/"+ m +"/"+ y;<br />
&nbsp;&nbsp;&nbsp; for(var i=1; i&lt;WebCalendar.dayShow-w-WebCalendar.daysMonth[m-1]+1; i++)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.day[WebCalendar.daysMonth[m-1]+w-1+i] = i +"/"+ (parseInt(m, 10)+1) +"/"+ y;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(m==12) WebCalendar.day[WebCalendar.daysMonth[m-1]+w-1+i] = i +"/"+ 1 +"/"+ (parseInt(y, 10)+1);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; for(var i=0; i&lt;WebCalendar.dayShow; i++)&nbsp;&nbsp;&nbsp; //这个循环是根据源数组写到日历里显示<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var a = WebCalendar.day[i].split("/");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.dayObj[i].innerText&nbsp;&nbsp;&nbsp; = a[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.dayObj[i].title&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = a[2] +"-"+ appendZero(a[1]) +"-"+ appendZero(a[0]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.dayObj[i].bgColor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = WebCalendar.dayBgColor;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.dayObj[i].style.color&nbsp; = WebCalendar.wordColor;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((i&lt;10 &amp;&amp; parseInt(WebCalendar.day[i], 10)&gt;20) || (i&gt;27 &amp;&amp; parseInt(WebCalendar.day[i], 10)&lt;12))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.dayObj[i].style.color = WebCalendar.wordDark;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (WebCalendar.inputDate==WebCalendar.day[i])&nbsp;&nbsp;&nbsp; //设置输入框里的日期在日历上的颜色<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {WebCalendar.dayObj[i].bgColor = WebCalendar.darkColor; WebCalendar.dayObj[i].style.color = WebCalendar.lightColor;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (WebCalendar.day[i] == WebCalendar.today)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置今天在日历上反应出来的颜色<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {WebCalendar.dayObj[i].bgColor = WebCalendar.todayColor; WebCalendar.dayObj[i].style.color = WebCalendar.lightColor;}<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
function returnDate() //根据日期格式等返回用户选定的日期<br />
{<br />
&nbsp;&nbsp;&nbsp; if(WebCalendar.objExport)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var returnValue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var a = (arguments.length==0) ? WebCalendar.day[this.id.substr(8)].split("/") : arguments[0].split("/");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var d = WebCalendar.format.match(/^(\w{4})(-|\/)(\w{1,2})\2(\w{1,2})$/);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(d==null){alert("你设定的日期输出格式不对！\r\n\r\n请重新定义 WebCalendar.format ！"); return false;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var flag = d[3].length==2 || d[4].length==2; //判断返回的日期格式是否要补零<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; returnValue = flag ? a[2] +d[2]+ appendZero(a[1]) +d[2]+ appendZero(a[0]) : a[2] +d[2]+ a[1] +d[2]+ a[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(WebCalendar.timeShow)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var h = new Date().getHours(), m = new Date().getMinutes(), s = new Date().getSeconds();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; returnValue += flag ? " "+ appendZero(h) +":"+ appendZero(m) +":"+ appendZero(s) : " "+&nbsp; h&nbsp; +":"+ m +":"+ s;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WebCalendar.objExport.value = returnValue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hiddenCalendar();<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
//--&gt;</p>
 <img src ="http://www.blogjava.net/wzl002/aggbug/242622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wzl002/" target="_blank">wesley1987</a> 2008-11-25 19:17 <a href="http://www.blogjava.net/wzl002/articles/242622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用javaScript实现表单验证</title><link>http://www.blogjava.net/wzl002/articles/242621.html</link><dc:creator>wesley1987</dc:creator><author>wesley1987</author><pubDate>Tue, 25 Nov 2008 11:14:00 GMT</pubDate><guid>http://www.blogjava.net/wzl002/articles/242621.html</guid><wfw:comment>http://www.blogjava.net/wzl002/comments/242621.html</wfw:comment><comments>http://www.blogjava.net/wzl002/articles/242621.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wzl002/comments/commentRss/242621.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wzl002/services/trackbacks/242621.html</trackback:ping><description><![CDATA[<p>**<br />
* Check form<br />
*/<br />
function checkForm(vform){<br />
&nbsp;&nbsp;&nbsp; for(var i=0;i&lt;vform.elements.length;i++){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(vform.elements[i].type=="text"){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var checkResult=checkTextBox(vform.elements[i]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var name=vform.elements[i].getAttribute("name");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(checkResult){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById(name+"Msg").style.display="none";//alert(vform.elements.length+" - "+i+checkResult);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById(name+"Msg").style.display="inline";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vform.elements[i].focus();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; return true;<br />
}</p>
<p>/**//**<br />
* Check text field in the form<br />
*/<br />
function checkTextBox(vTextBox){<br />
&nbsp;&nbsp;&nbsp; var validChar=vTextBox.getAttribute("validChar");<br />
&nbsp;&nbsp;&nbsp; var isRequired=vTextBox.getAttribute("isRequired");<br />
&nbsp;&nbsp;&nbsp; var inputValue=vTextBox.value;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; if(isRequired!="true" &amp;&amp; inputValue.length&lt;1){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var regexStr=validChar;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var regex=new RegExp(regexStr);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return regex.test(inputValue);<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>/**//**<br />
* Remove Extra Char in textbox<br />
*/<br />
function removeExtraChar(vTextBox,event){<br />
&nbsp;&nbsp;&nbsp; var maxlength=parseInt(vTextBox.getAttribute("maxlength"));<br />
&nbsp;&nbsp;&nbsp; var inputValue=vTextBox.value;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; if(inputValue.length&gt;=maxlength){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event.keyCode=9;<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p><br />
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br />
对应的JSP表单 ：<br />
&lt;script src="&lt;%=path%&gt;/xxx.js" type="text/javascript"&gt;&lt;/script&gt;<br />
&lt;form action="&lt;%=path%&gt;/addOffer.do" method="post" onsubmit="return checkForm(this);"&gt;<br />
&lt;table align="center" width="434" border="1"&gt;<br />
&lt;tr&gt;<br />
&nbsp; &lt;td width="117"&gt;供应商名称(必填)：&lt;/td&gt;<br />
&nbsp; &lt;td width="300"&gt;&lt;div align="left"&gt;&amp;nbsp;&lt;input name="offername"&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="text"&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxlength="15"&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height="16"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isRequired="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; validChar="^[\u4E00-\u9FA5]{2,10}$"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//用于验证此text的正则表达式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onfocus="this.style.backgroundColor='#e6e6e6'" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onblur="this.style.backgroundColor='#ffffff'" /&gt;<br />
&nbsp;<br />
&nbsp;&lt;p id="offernameMsg" style="display:none"&gt;请输入2-10位汉字&lt;/p&gt;<br />
&nbsp; &lt;/div&gt;<br />
&nbsp; &lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&nbsp; &lt;td width="117"&gt;地址：&lt;/td&gt;<br />
&nbsp; &lt;td&gt;&lt;div align="left"&gt;&amp;nbsp;&lt;input name="offeradd" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="text" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxlength="20"&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height="16" <br />
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validChar="^[\u4E00-\u9FA5\w]+$" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onfocus="this.style.backgroundColor='#e6e6e6'" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;onblur="this.style.backgroundColor='#ffffff'"/&gt; <br />
&nbsp;&lt;p id="offeraddMsg" style="display:none"&gt;请勿含特殊符号(含空格)&lt;/p&gt;<br />
&nbsp; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&nbsp; &lt;td&gt;联系人：&lt;/td&gt;<br />
&nbsp; &lt;td&gt;&lt;div align="left"&gt;&amp;nbsp;&lt;input name="connecter" type="text" height="16" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxlength="10"<br />
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validChar="^[\u4E00-\u9FA5\w]+$" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onfocus="this.style.backgroundColor='#e6e6e6'" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onblur="this.style.backgroundColor='#ffffff'"/&gt; <br />
&nbsp;&lt;p id="connecterMsg" style="display:none"&gt;请勿含特殊符号(含空格)&lt;/p&gt;<br />
&nbsp; &lt;/div&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;&lt;/form&gt; </p>
<p>&nbsp;<a title="附：常用正则表达式" href="http://news.newhua.com/news1/programming/2007/1116/071116105527I3IK2C3FCK20CJE4F8A5.html">附：常用正则表达式</a></p>
<img src ="http://www.blogjava.net/wzl002/aggbug/242621.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wzl002/" target="_blank">wesley1987</a> 2008-11-25 19:14 <a href="http://www.blogjava.net/wzl002/articles/242621.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库操作类</title><link>http://www.blogjava.net/wzl002/articles/242550.html</link><dc:creator>wesley1987</dc:creator><author>wesley1987</author><pubDate>Tue, 25 Nov 2008 07:24:00 GMT</pubDate><guid>http://www.blogjava.net/wzl002/articles/242550.html</guid><wfw:comment>http://www.blogjava.net/wzl002/comments/242550.html</wfw:comment><comments>http://www.blogjava.net/wzl002/articles/242550.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wzl002/comments/commentRss/242550.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wzl002/services/trackbacks/242550.html</trackback:ping><description><![CDATA[<a href="http://webservices.ctocio.com.cn/tips/13/7711513.shtml">引用于 ：http://webservices.ctocio.com.cn/tips/13/7711513.shtml</a><br />
<br />
　封装数据库操作，目的就是为了隐藏java.sql包内的类，在编码中去掉核心的数据库操作代码。这种方式,不能适应大数据量的查询,不过如果真的碰到大数据量的查询,那用什么封装都不好,还是得直接数据库操作.
<div id="content">
<div class="guanggao">封装数据库操作，目的就是为了隐藏<a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/403/5948403.shtml" target="_blank">java</a>.sql包内的类，在编码中去掉核心的数据库操作代码。以杜绝直接数据库操作容易带来的资源未释放问题。同时也减少了数据库操作的编码量。</div>
<p>　　但是很多网友在封装时，却喜欢返回结果集(ResultSet对象)，那么这个封装就没有意义了。</p>
<p>　　1. 又是直接操作核心数据库类，跟封装前几乎没什么变化。</p>
<p>　　2. 结果集总是依赖于它使用的连接(<a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/393/5947393.shtml" target="_blank">Connection</a>)对象。因此当连接对象在方法内被关闭后，你返回的ResultSet就没有用了。</p>
<p>　　如果真的要获得查询数据库的结果集，就把结果集对象内的所有数据，转储到以Map为元素的List对象内。</p>
<p>　　当然,这种方式,不能适应大数据量的查询,不过如果真的碰到大数据量的查询,那用什么封装都不好,还是得直接数据库操作. :)))</p>
<p>　　下面是简单的数据库操作<a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/425/5948425.shtml" target="_blank">Javabean</a>的代码</p>
<p>　　DbWrapper.java</p>
<p>　　import java.sql.*;</p>
<p>　　import java.util.*;</p>
<p>public <a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/213/5947213.shtml" target="_blank">class</a> DbWrapper{</p>
<p>　　// 定义连接池对象为静态变量，将一直存在，直到工作目录关闭。</p>
<p>　　private static DataSource ds = null;</p>
<p>　　// 1.用连接池的方式获得连接</p>
<p>　　// 如果不是做多数据库程序，推荐使用此方法</p>
<p>　　// 相关内容：在tomcat管理界面配置连接池</p>
<p>　　public static Connection openConnection() throws Exception{</p>
<p>　　// 只需要初始化1次</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　if ( ds == null ){</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　Context initContext = new InitialContext();</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　Context envContext = (Context) initContext.lookup("java:/comp/env");</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　DataSource ds = (DataSource) envContext.lookup("jdbc/MyDataSource");</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　}</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　return ds.getConnection();</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;　}</p>
<p>　　// 2.用jdbc驱动获得连接</p>
<p>　　// 相关内容：JSP数据库连接大全</p>
<p>　　public static Connection openConnection(<a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/400/6026400.shtml" target="_blank">String</a> driver,String <a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/125/5949125.shtml" target="_blank">url</a>,String username,String <a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/435/6025935.shtml" target="_blank">password</a>) throws Exception{</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　Class.forName(driver).newInstance();</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　return DriverManager.getConnection(url, username, password);</p>
<p>　　}</p>
<p>　　public static void closeConnection(Connection conn) throws Exception{</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　if ( conn != null )conn.close();</p>
<p>　　}</p>
<p>　　public static int executeUpdate(String sql) throws Exception{</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　int count = 0;</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　Connection conn = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　Statement stmt = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;　&nbsp;&nbsp;&nbsp;&nbsp;　try{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　conn = openConnection();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　stmt = conn.createStatement();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　count = stmt.executeUpdate(sql);</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　}catch ( Exception e ){</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}finally{</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　closeConnection(conn);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　}</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　return count;</p>
<p>　　}</p>
<p>　　public static List executeQuery(String sql) throws Exception{</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　List list = new ArrayList();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　Connection conn = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　Statement stmt = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　ResultSet rs = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　try{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　conn = openConnection();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　stmt = conn.createStatement();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　rs = stmt.executeQuery(sql);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　ResultSetMetaData rsmd = rs.getMetaData();</p>
<p>　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while ( rs.<a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/412/6093412.shtml" target="_blank">next</a>() ){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　Map map = new HashMap();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;　　for ( int i = 1; i &lt; = rsmd.getColumnCount(); i++ ){</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　map.put(rsmd.getColumnName(i), rs.getObject(i));</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　}</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　list.add(map);</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　} }catch ( Exception e ){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　e.printStackTrace();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　}finally{</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　if ( rs != null ) rs.close();</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　closeConnection(conn);</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　}</p>
<p>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　return list; }</p>
<p>　　}</p>
<p>　　使用示例:</p>
<p>　　// 1.对于insert, update, delete语句int count = DbWrapper.executeUpdate(sql);</p>
<p>　　// 2.对于selete语句</p>
<p>　　java.util.List list = DbWrapper.executeQuery(sql);</p>
<p>　　// 方法一:按名字取值，注意大小写是严格区分的</p>
<p>　　for ( int i = 0; i &lt; list.size(); i++ )</p>
<p>　　{</p>
<p>　　java.util.Map map = (java.util.Map)list.get(i);</p>
<p>　　out.println(mag.get("column_name").toString());</p>
<p>　　}</p>
<p>　　// 方法二：遍历取值</p>
<p>　　for ( int i = 0; i &lt; list.size(); i++ )</p>
<p>　　{</p>
<p>　　java.util.Map map = (java.util.Map)list.get(i);</p>
<p>　　for (java.util.Iterator <a class="bluekey" href="http://whatis.ctocio.com.cn/searchwhatis/250/6025750.shtml" target="_blank">it</a> = map.keySet().iterator(); it.hasNext();)</p>
<p>　　{</p>
<p>　　String column_name = it.next().toString()); // 取值时注意null判断</p>
<p>　　out.println(column_name + " = " + map.get(column_name) == null ? "" : map.get(column_name).toString());</p>
<p>　　}</p>
<p>　　}<br />
</p>
</div>
<img src ="http://www.blogjava.net/wzl002/aggbug/242550.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wzl002/" target="_blank">wesley1987</a> 2008-11-25 15:24 <a href="http://www.blogjava.net/wzl002/articles/242550.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle ORA-12545 主机或对象不存在&amp; Oracle Management Server配置步骤</title><link>http://www.blogjava.net/wzl002/articles/242369.html</link><dc:creator>wesley1987</dc:creator><author>wesley1987</author><pubDate>Mon, 24 Nov 2008 13:34:00 GMT</pubDate><guid>http://www.blogjava.net/wzl002/articles/242369.html</guid><wfw:comment>http://www.blogjava.net/wzl002/comments/242369.html</wfw:comment><comments>http://www.blogjava.net/wzl002/articles/242369.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wzl002/comments/commentRss/242369.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wzl002/services/trackbacks/242369.html</trackback:ping><description><![CDATA[想从新配下Oracle的监听器，结果再 独立登陆的时候冒出这个错误。<br />
<div class="postTitle"><a class="postTitle2" id="viewpost1_TitleUrl" href="http://www.blogjava.net/badboyryan/archive/2006/08/19/64556.html">ora-12545问题</a><br />
解决办法修改，tnsnames.ora（小写）文件，将要用的数据库的 host 参数 从名字改为 IP<br />
如 mydatabase 改为 127.0.0.1</div>
<br />
Oracle Management Server配置步骤如下：<br />
1、使用enterprise manager configuration assistant建立档案资料库<br />
&nbsp;&nbsp; 其中可选择新建一个数据库实例或者在已有数据库实例中新建资料库（新建表空间）。<br />
2、启动management server<br />
3、运行enterprise manage console，选择登录到management server<br />
&nbsp;&nbsp; 登录名sysman，初始密码oem_temp。登录后会要求修改密码。<br />
4、将要管理的数据库添加到目录树中。通过导航器中的节点搜索。<br />
&nbsp;&nbsp; 要管理的数据库必须开http server和开agent server。<br />
5、在工具中即可配置备份管理。<br />
&nbsp;&nbsp; 1）要在配置中的首选项，首选身份证明中加入要备份的数据库服务器的首选身份证明。<br />
&nbsp;&nbsp; 2）在要备份的数据库服务器上要授予步骤1）首选身份证明所用用户批处理权限：管理工具<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; －本地安全设置－本地策略－用户权利指派中设置。<br />
<br />
<br />
另一种不需要配置资料库的访问：<br />
关于 net configuration assistant<br />
服务器 需要为数据库服务配置&#8220;监听器&#8221;。在客户端上，配置需一个 &#8220;本地net服务配置&#8221;<br />
&nbsp;配置完成后&nbsp; 客户端即可用PL/SQL develop等访问了。但是Oracle Management Server是不能使用的。<br />
 <img src ="http://www.blogjava.net/wzl002/aggbug/242369.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wzl002/" target="_blank">wesley1987</a> 2008-11-24 21:34 <a href="http://www.blogjava.net/wzl002/articles/242369.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用JSTL实现的分页 含&lt;sql：&gt;</title><link>http://www.blogjava.net/wzl002/articles/242325.html</link><dc:creator>wesley1987</dc:creator><author>wesley1987</author><pubDate>Mon, 24 Nov 2008 10:28:00 GMT</pubDate><guid>http://www.blogjava.net/wzl002/articles/242325.html</guid><wfw:comment>http://www.blogjava.net/wzl002/comments/242325.html</wfw:comment><comments>http://www.blogjava.net/wzl002/articles/242325.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wzl002/comments/commentRss/242325.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wzl002/services/trackbacks/242325.html</trackback:ping><description><![CDATA[<p>纯粹在JSP中实现的分页，效果只有数据上一页 下一页的连接。<br />
这种在JSP中取数据库的做法已经不推荐了，但是可以作为在页面显示数据 和学习JSTL的参考</p>
<p>分页</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">br</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">table&nbsp;</span><span style="color: #ff0000">border</span><span style="color: #0000ff">="1"</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">tr</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">sql:query&nbsp;</span><span style="color: #ff0000">var</span><span style="color: #0000ff">="articleCount"</span><span style="color: #ff0000">&nbsp;sql</span><span style="color: #0000ff">="select&nbsp;count(*)&nbsp;from&nbsp;article"</span><span style="color: #ff0000">&nbsp;dataSource</span><span style="color: #0000ff">="${sqlDS}"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">sql:query</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">c:forEach&nbsp;</span><span style="color: #ff0000">items</span><span style="color: #0000ff">="${articleCount.rowsByIndex}"</span><span style="color: #ff0000">&nbsp;var</span><span style="color: #0000ff">="articlecount"</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;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">c:set&nbsp;</span><span style="color: #ff0000">var</span><span style="color: #0000ff">="Count"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">${articlecount[0]}</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">c:set</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">c:forEach</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">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">共&nbsp;${Count}条</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">c:set&nbsp;</span><span style="color: #ff0000">var</span><span style="color: #0000ff">="pageSize"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">10</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">c:set</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">c:if&nbsp;</span><span style="color: #ff0000">test</span><span style="color: #0000ff">="${Count%pageSize==0}"</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">c:set&nbsp;</span><span style="color: #ff0000">var</span><span style="color: #0000ff">="page"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">${Count/pageSize}</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">c:set</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">c:if</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">c:if&nbsp;</span><span style="color: #ff0000">test</span><span style="color: #0000ff">="${Count%pageSize!=0}"</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">c:set&nbsp;</span><span style="color: #ff0000">var</span><span style="color: #0000ff">="page"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">${(Count-Count%pageSize)/pageSize+1}</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">c:set</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">c:if</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">fmt:formatNumber&nbsp;</span><span style="color: #ff0000">maxFractionDigits</span><span style="color: #0000ff">="0"</span><span style="color: #ff0000">&nbsp;var</span><span style="color: #0000ff">="pageCount"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">${page}</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">fmt:formatNumber</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">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">共${pageCount}页</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">c:if&nbsp;</span><span style="color: #ff0000">test</span><span style="color: #0000ff">="${empty&nbsp;param.pageNo}"</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">c:set&nbsp;</span><span style="color: #ff0000">var</span><span style="color: #0000ff">="currentPage"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="1"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">c:set</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">c:if</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">c:if&nbsp;</span><span style="color: #ff0000">test</span><span style="color: #0000ff">="${not&nbsp;empty&nbsp;param.pageNo}"</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">c:set&nbsp;</span><span style="color: #ff0000">var</span><span style="color: #0000ff">="currentPage"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">${param.pageNo}</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">c:set</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">c:if</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">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">当前第${currentPage}&nbsp;页</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</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">c:if&nbsp;</span><span style="color: #ff0000">test</span><span style="color: #0000ff">="${currentPage&gt;1}"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">a&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">="front/index.jsp?pageNo=${currentPage-1}"</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"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">c:if</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">c:if&nbsp;</span><span style="color: #ff0000">test</span><span style="color: #0000ff">="${currentPage==1}"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">上一页&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">c:if</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">c:if&nbsp;</span><span style="color: #ff0000">test</span><span style="color: #0000ff">="${currentPage&lt;pageCount}"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">a&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">="front/index.jsp?pageNo=${currentPage+1}"</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"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">c:if</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">c:if&nbsp;</span><span style="color: #ff0000">test</span><span style="color: #0000ff">="${currentPage==pageCount}"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">下一页&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">c:if</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">td</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">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">table</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">table&nbsp;</span><span style="color: #ff0000">border</span><span style="color: #0000ff">="3"</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">sql:query&nbsp;</span><span style="color: #ff0000">var</span><span style="color: #0000ff">="RS"</span><span style="color: #ff0000">&nbsp;dataSource</span><span style="color: #0000ff">="${sqlDS}"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;sql</span><span style="color: #0000ff">="select&nbsp;*&nbsp;from&nbsp;article&nbsp;where&nbsp;rownum&lt;=${pageSize}&nbsp;and&nbsp;id&nbsp;not&nbsp;in(select&nbsp;id&nbsp;from&nbsp;article&nbsp;where&nbsp;rownum&lt;=${pageSize*(currentPage-1)}&nbsp;)"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">sql:query</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">c:forEach&nbsp;</span><span style="color: #ff0000">items</span><span style="color: #0000ff">="${RS.rowsByIndex}"</span><span style="color: #ff0000">&nbsp;var</span><span style="color: #0000ff">="article"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">${article[1]}</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</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">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">${article[2]}</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</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">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">${article[4]}</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">${article[5]}</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">[</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">fmt:formatDate&nbsp;</span><span style="color: #ff0000">value</span><span style="color: #0000ff">="${article[6]}"</span><span style="color: #ff0000">&nbsp;pattern</span><span style="color: #0000ff">="yyyy'年'M'月'd'日'"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">]</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">c:forEach</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">table</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;</span></div>
<img src ="http://www.blogjava.net/wzl002/aggbug/242325.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wzl002/" target="_blank">wesley1987</a> 2008-11-24 18:28 <a href="http://www.blogjava.net/wzl002/articles/242325.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于java连接池</title><link>http://www.blogjava.net/wzl002/articles/242304.html</link><dc:creator>wesley1987</dc:creator><author>wesley1987</author><pubDate>Mon, 24 Nov 2008 09:25:00 GMT</pubDate><guid>http://www.blogjava.net/wzl002/articles/242304.html</guid><wfw:comment>http://www.blogjava.net/wzl002/comments/242304.html</wfw:comment><comments>http://www.blogjava.net/wzl002/articles/242304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wzl002/comments/commentRss/242304.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wzl002/services/trackbacks/242304.html</trackback:ping><description><![CDATA[1.为工程配置tomcat连接池：<br />
配置server.xml （tomcat/conf/server.xml）在&lt;/Host&gt;前面加上<br />
&lt;Context docBase="myWebProject"" path="/myWebProject" reloadable="true"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Resource name="连接池名字 例：jdbc/oracle"&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;auth="Container"&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type="javax.sql.DataSource"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; factory="org.apache.common.dbcp.BasicDataSourceFactory"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;driverClassName="oracle.jdbc.driver.OracleDriver"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url="jdbc:oracle:thin:@127.0.0.1:1521:NEUSOFT"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username=""&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password=""&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxActive="5000"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxIdle="10"&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxWait="-1"/&gt;<br />
&lt;/Context&gt;<br />
参数说明：<br />
i.JNDI Name::注册到JNDI树上的名字（可以随便写）<br />
ii.&nbsp;Data Source URL：连接数据库的URL<br />
iii.&nbsp;JDBC Driver Class：Jbdc数据库的驱动名称<br />
iv.&nbsp;User Name：访问数据库的用户<br />
v.&nbsp;Password：访问数据库的密码<br />
vi.&nbsp;Max. Active Connections：最大活跃连接数，指同时可以有多少个连接，设置为0没有限制<br />
vii.&nbsp;Max. Idle Connections：最大空闲连接数，表示没有数据库连接时，连接池也必须保持最大空闲连接数，设置为0没有限制<br />
viii.&nbsp;Max. Wait for Connection：连接建立等待时间，单位为毫秒，设置为-1无限制<br />
ix.&nbsp;Validation Query:：此参数用来查询池中的空闲连接（可以不配置）<br />
<br />
需要把 jdbc的包导入 tomcat的lib中&nbsp;（&nbsp; tomcat6/lib&nbsp;&nbsp; tomcat5.x/commen/lib）<br />
oracle的包在oracle92/jdbc/classes12.jar<br />
ms sqlserver要用到的三个驱动包<br />
<br />
2。连接语句<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Context initCtx = new InitialContext();<br />
&nbsp;&nbsp;&nbsp;javax.sql.DataSource ds = (javax.sql.DataSource)initCtx.lookup("java:comp/env/连接池名字");<br />
&nbsp;&nbsp;&nbsp;conn = ds.getConnection();<br />
<br />
jsp中：（不推荐）<br />
&nbsp;：&lt;sql:setDataSource dataSource="连接池名字" var="myOracleDB"/&gt;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;sql:query sql="select * from channel" dataSource="${myOracleDB}" var="channelRS"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;c:forEach items="${channelRS.rowsByIndex}" var="channel"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;${channel[1]}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/c:forEach&gt;<br />
<br />
使用连接池实现的连接，只能在web服务器中运行。不能run。<br />
/*非连接池的一般JDBC使用*/<br />
Class.forName(driver);<br />
Connection conn = DriverManager.getConnection(url,name,password);<br />
stmt = conn.createStatement();<br />
&nbsp;&nbsp;&nbsp;rs = stmt.executeQuery(sql);<br />
ORACLE：driver ：oracle.jdbc.driver.OracleDriver<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url：&nbsp;&nbsp; jdbc:oracle:thin:@IP:1521:数据库名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包： oracle92/jdbc/classes12.jar<br />
Sqlserver：driver：com.microsoft.jdbc.sqlserver.SQLServerDriver<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url：jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=数据库名<br />
<br />
3. 连接池还有&#8216;对所有工程配置tomcat连接池&#8217;和&#8216;在struts中 配置struts-config.xml以配置连接池&#8217;。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://blog.csdn.net/angel_bear/archive/2006/06/09/784573.aspx">http://blog.csdn.net/angel_bear/archive/2006/06/09/784573.aspx</a>&nbsp;（by angelbear）里有以上3种连接池的配置方法。<br />
<br />
<br />
后补 疑问：factory="org.apache.common.dbcp.BasicDataSourceFactory" 这句话回引起一个 class cannt find 的异常，尚未解决。<br />
&nbsp;&nbsp;&nbsp;&nbsp;大致原因可能是缺少commons-dbcp-1.2.1和commons-pool-1.3的包，此包在tomcat6中未发现，tomcat5/commen/lib下有commons-pool-1.2.jar。<br />
&nbsp;&nbsp;&nbsp;&nbsp;而且很多人的连接池配置语句中 没有这句话。这句话的作用不太明白，但暂时好像不添加也能正常运行。<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/wzl002/aggbug/242304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wzl002/" target="_blank">wesley1987</a> 2008-11-24 17:25 <a href="http://www.blogjava.net/wzl002/articles/242304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>