﻿<?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-waysun一路阳光-随笔分类-收藏的文章</title><link>http://www.blogjava.net/1504/category/39421.html</link><description>不轻易服输,不轻言放弃.--心是梦的舞台，心有多大，舞台有多大。踏踏实实做事，认认真真做人。</description><language>zh-cn</language><lastBuildDate>Sun, 04 Jul 2010 12:53:55 GMT</lastBuildDate><pubDate>Sun, 04 Jul 2010 12:53:55 GMT</pubDate><ttl>60</ttl><item><title>DWR CSRF Security Error</title><link>http://www.blogjava.net/1504/archive/2010/07/01/324963.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Thu, 01 Jul 2010 03:18:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2010/07/01/324963.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/324963.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2010/07/01/324963.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/324963.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/324963.html</trackback:ping><description><![CDATA[<div class="blog_content">
<p><strong>错误描述:</strong></p>
<p>org.directwebremoting.dwrp.BaseDwrpHandler - A request has been denied as a potential CSRF attack.<br />
org.directwebremoting.dwrp.BaseCallHandler - Exception while processing batch<br />
java.lang.SecurityException: CSRF Security Error</p>
<p>&nbsp; at org.directwebremoting.dwrp.BaseDwrpHandler.checkNotCsrfAttack(BaseDwrpHandler.java:85)<br />
&nbsp; at org.directwebremoting.dwrp.BaseCallHandler.handle(BaseCallHandler.java:76)<br />
&nbsp; at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:120)<br />
&nbsp; at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:141)<br />
&nbsp; at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)<br />
&nbsp; at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)<br />
&nbsp; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)<br />
&nbsp; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)<br />
&nbsp; at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)<br />
&nbsp; at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)<br />
&nbsp; at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)<br />
&nbsp; at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)<br />
&nbsp; at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)<br />
&nbsp; at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)<br />
&nbsp; at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)<br />
&nbsp; at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)<br />
&nbsp; at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)<br />
&nbsp; at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)<br />
&nbsp; at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process&nbsp; (Http11Protocol.java:581)<br />
&nbsp; at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)<br />
&nbsp; at java.lang.Thread.run(Thread.java:619)</p>
<p>&nbsp;</p>
<p><strong>解决办法:</strong></p>
<p>修改 web.xml 中 DWR&nbsp;配置信息</p>
<p><strong>原:</strong></p>
<p>&lt;servlet&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt;servlet-class&gt;org.directwebremoting.spring.DwrSpringServlet&lt;/servlet-class&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt;init-param&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;param-name&gt;debug&lt;/param-name&gt; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;param-value&gt;true&lt;/param-value&gt; <br />
&nbsp;&nbsp;&lt;/init-param&gt;<br />
&lt;/servlet&gt;</p>
<p>&nbsp;</p>
<p>加入跨域调用配置信息(红色部分)，修改为:</p>
<p>&lt;servlet&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;servlet-class&gt;org.directwebremoting.spring.DwrSpringServlet&lt;/servlet-class&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp; &lt;init-param&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;debug&lt;/param-name&gt; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;true&lt;/param-value&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><span style="color: #ff0000"> &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;param-name&gt;crossDomainSessionSecurity&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;param-value&gt;false&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;allowScriptTagRemoting&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;param-value&gt;true&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;/init-param&gt;</span></strong><br />
&lt;/servlet&gt;</p>
</div>
<img src ="http://www.blogjava.net/1504/aggbug/324963.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2010-07-01 11:18 <a href="http://www.blogjava.net/1504/archive/2010/07/01/324963.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>轻松掌握ISO8583报文协议【转】</title><link>http://www.blogjava.net/1504/archive/2010/05/20/321468.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Thu, 20 May 2010 06:31:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2010/05/20/321468.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/321468.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2010/05/20/321468.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/321468.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/321468.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt">转自：http://www.itpub.net/419521.html</span>
<div class="blog_content">
<div class="storytext">
<p><span class="javascript" id="text2969839"><span style="font-size: 10pt"><span style="font-family: Verdana">我刚进入金融行业时，就知道了IS08583报文协议，我想可能我还没进入这个行业都已经听过了，可知ISO8583的影响力有多大了。最初刚接触它时，确实对其中的一些细节概念不是很清晰，对有些地方比较迷惑。鉴于此，我想很多同行也必然会经历同样得阶段，所以我写下本文，以便大家能够少走一些弯路。同时，我在网上（</span> </span><a href="http://blog.csdn.net/lysheng/archive/2005/03/03/309914.aspx" target="_blank"><span style="font-size: 10pt"><span style="font-family: Verdana">http://blog.csdn.net/lysheng/archiv.../03/309914.aspx</span> </span></a><span style="font-size: 10pt"><span style="font-family: Verdana">）写下我要写&#8220;全面掌握ISO8583报文&#8221;和&#8220;符合CEN/XFS（即WOSA/XFS）规范的SP编写&#8221;两篇文章时，很多人都询问我什么时候能够写出来，可知许多人是需要了解这方面的知识的，即使我时间不是很多，也得尽量将这两篇文章写出来，给需要的人提供一些参考。<br />
<br />
如果单纯的讲IS08583那些字段的定义，我觉得没有什么意思，标准中已经对每个字段解释的非常详细了，如果你觉得理解英文版的ISO8583规范有些困难，网上也有同行为我们翻译好的中文版ISO8583规范，所以我的目的是达到阅读本文后能够对ISO8583知其然，亦知其所以然，使以前基本没有接触它的人也能够达到掌握ISO8583报文规范。</span> </span></span></p>
<br />
<span style="font-family: Verdana"><span style="font-size: 10pt">好了，我们该转入正题了。<br />
<br />
最开始时，金融系统只有IBM这些大的公司来提供设备，象各种主机与终端等。在各个计算机设备之间，需要交换数据。我们知道数据是通过网络来传送的，而在网络上传送的数据都是基于0或1这样的二进制数据，如果没有对数据进行编码，则这些数据没有人能够理解，属于没有用的数据。起初的X.25、SDLC以及现在流行的TCP/IP网络协议都提供底层的通讯编码协议，它们解决了最底层的通讯问题，能够将一串字符从一个地方传送到另一个地方。但是，仅仅传送字符串是没有太大意义的，怎样来解析字符串代表什么内容是非常重要的，否则传送一些&#8220;0123abcd&#8221;的字符串也是无用的乱码。<br />
<br />
让我们随着时光回到几十年前的某个时刻，假设我们被推到历史的舞台上，由我们来设计一个通用报文协议，来解决金融系统之间的报文交换，暂且称该协议叫做ISO8583 协议。此时，技术是在不断的前行，当初IBM一支独秀的局面好像已经不妙了，各种大小不一的公司都进入金融行业以求能有所斩获，呈一片百花齐放的局面。我们怎样来设计一个报文协议，能够将这些如雨后春笋般出现的所有公司都纳入进来，其实也不是一件很简单的事。<br />
<br />
我们还是先一步步的来考虑吧。金融行业其实涉及到的数据内容并不是成千上万，无法统计，恰恰相反，是比较少的。我们都可以在心底数得过来，象交易类型、帐号、帐户类型、密码、交易金额、交易手续费、日期时间、商户代码、2磁3磁数据、交易序列号等，把所有能够总结出来的都总结起来不过100个左右的数据。那我们可以首先简单的设计 ISO8583，定义128个字段，将所有能够考虑到的类似上面提到的&#8220;帐号&#8221;等金融数据类型，按照一个顺序排起来，分别对应128个字段中的一个字段。每个数据类型占固定的长度，这个顺序和长度我们都事先定义好。这样就简单了，要发送一个报文时，就将128个字段按照顺序接起来，然后将接起来的整串数据包发送出去。<br />
<br />
任何金融软件收到ISO8583包后，直接按照我们定义的规范解包即可，因为整个报文的128个字段从哪一位到哪一位代表什么，大家都知道，只要知道你的数据包是ISO8583包即可，我们都已经定义好了。比如第1个字段是&#8220;交易类型&#8221;，长度为4位，第2个字段位是&#8220;帐号&#8221;，为19位等等。接收方就可以先取4位，再取接着的19位，依次类推，直到整个数据包128个字段都解完为止。<br />
<br />
其实这种做法真是简单直接，基本上就可以满足需要了。不过我们有几个问题要思考下：<br />
1、 我怎么知道每个字段的数据类型呢，是数字还是字符？<br />
2、 每个传送的报文都把128个字段都传过去，那网络带宽能够承受得了，有时候我可能只需要其中5个字段，结果多收到了123个无用的字段。<br />
3、 如果我某些字段的长度不固定，属于变长怎么办，因为你现在解包是当作数据包每个字段都是固定的，用C语言解包时直接依靠指针取固定长度的一串字符做为一个字段。<br />
<br />
我们来一一解决这些问题。<br />
<br />
第一个问题简单，我在定义ISO8583时除了定义每个字段表示什么，还规定其内容是数字或是字符等即可。考虑可能出现的类型不过有以下几种：字母、数字、特殊字符、年月日等时间、二进制数据。比如我对128个字段中的&#8220;商户类型&#8221;字段定义其长度是15，同时定义其类型为字母。再精细点，如果&#8220;商户类型&#8221;里面的数据同时包括数字和字母呢？那我们就定义其类型为字母也可，为数字也可，即一个字段可以同时属于多个类型。<br />
<br />
第二个问题稍微复杂点。其本质就是如果我只传128个字段的5个字段，接收方怎么知道我传了哪几个字段给它了。要是我们把剩下的123全部填成0或其他特殊标识，标明该字段不需要使用？这种处理方法没有半点用处，没有解决网络带宽的本质问题，还是要传128个字段。<br />
<br />
换个思路，我在报文前面加上个包头，包头里面包含的信息能够让别人知道只传了5个字段。怎样设计这个包头，可以这样，我们用16个字节，即128个 bit（一个字节等于8bit）来表示128个字段中的某个字段是否存在。每个bit在计算机的二进制里面不是1就是0，如果是1就表示对应的字段在本次报文中存在，如果是0就是不存在。这样好了，如果别人接收到了ISO8583报文，可以先根据最前面的报文头，就知道紧接着报文头后面的报文有哪些字段，没有哪些字段了。比如，我要发送5个字段，分别属于128个字段中的第2、3、6、8、9字段，我就可以将128bit的报文头填成 011001011000000000&#8230;&#8230;&#8230;..，一共128个bit，后面就全是0了。注意其中第2、3、6、8、9位为1，其他都为0。<br />
<br />
有了这个128bit的报文头，我们就可以只发送需要的5个字段了。怎样组织报文？先放上这128bit，即16个字节的头，然后在头后面放2、3、6、 8、9字段，这些字段紧挨在一起，3和6之间也不需要填上4、5这两个字段了。接收方收到这个报文，它会根据128bit的报文头来解包，它自然知道把第 3个字段取出后，就直接在第3字段的后面取第6个字段，每个字段的长度在ISO8583里面都定义好了，很轻松就把数据包解出来了。<br />
<br />
这下好了，为了解决上面的第二问题，我们只是在报文中增加了16个字节的数据，就轻松搞定了，我们把这16个字节称为bit map，即位图，用来表示某个位是否存在。不过我们再稍微优化一下，考虑到很多时候报文不需要128个字段这么多，其一半64个字段都不一定能够用完。那我可以将报文头由128bit减到64bit，只有在需要的时候才把剩下的64bit放到报文里面，这样报文长度不又少了8个字节吗？<br />
<br />
是个好主意。我们把ISO8583的128个字段中最常见的都放到前64个字段中，那我们可以将处理缩小一倍。这样我一般发送报文时只需发送64bit，即一个字节的报文头，再加上需要的几个字段就可以了。如果有些报文用到64到128之间的字段呢？这个也好办，我把64bit报文头的第一位bit用来代表特殊含义，如果该bit为1，则表示64bit后面跟了剩下的64bit报文头；如果第一位bit为0，则表示64bit后面没有跟剩下的64bit报文头，直接是128个字段中的报文了。那们，接收方会判断一下报头的第一个bit是1还是0，从而知道报文头是64bit还是128bit了，就可以做相应处理。因为报文头第二个64bit属于有时候有，所以我们叫它Extended bit map扩展位图，相应的报文头最开始的64bit我们叫它Primary bit map主位图。我们直接把扩展位图固定放到128个字段的第一个字段，而主位图每个数据包都有，就强制性放在所有128个字段的前面，并不归入128个字段中去。<br />
<br />
第三个问题可以考虑这样解决。比如第2个字段是&#8220;帐号&#8221;，是不定长的，可能有的银行帐号是19位，有的是17位等。我们定 ISO8583规范时可以规定第2个字段是25位，这下足够将19和17的情况都包含进来，但是如果以后出现了30位的怎么办？那我们现在将字段定为 100位。以后超过100位怎么办，况且如果你只有19位的帐号，我们定义了100位，那81位的数据不是浪费了网络的带宽。看来预先定义一个我们认为比较大的位数是不太好的。<br />
<br />
我们这样，对于第2个字段&#8220;帐号&#8221;，在字段的开头加上&#8220;帐号&#8221;的长度。比如帐号是0123456789，一共10 位，我们变成100123456789，注意前面多了个10，表示后面的10位为帐号。如果你接触过COM里面的BSTR，应该对这种处理比较熟悉了。接收方收到该字段后，它知道ISO8583规定第2个字段&#8220;帐号&#8221;是变长的，所以会先取前面的2位出来，获取其值，此时为长度，然后根据该长度值知道应该拷贝该字段后面哪几位数据，才是真正的帐号。如果你觉得长度如果只有两位最多只能表示99位长，不太够，我们也定义可以允许前面3位都为长度的变长字段，这样就有999位长，应该够了吧。在规范里面如果我定义某个字段的属性是&#8220;LLVAR&#8221;，你注意了，其中的LL表示长度，VAR表示后面的数据，两个LL表示两位长，最大是99，如果是三位就是&#8220;LLLVAR&#8221;，最大是999。这样看我们定义的ISO8583规范文档时直接根据这几个字母就理解某个变长字段的意思了。<br />
<br />
该解决的几个问题到这里都解决了，我们来回顾下自己设计的ISO8583规范。其实没有什么，无非是把金融行业可能出现的数据分门别类，排好顺序，接着把它们连接起来，组成一个报文发送出去而已。其中针对该报文的设计进行了一些优化，引入了bit map位图的概念，也算是一个不错的想法。<br />
<br />
剩下的工作就简单了，我们就直接收集金融行业可能出现的数据字段类型，分成128个字段类型，如果没有到128个这么多就先保留一些下来，另外考虑到有些人有特殊的要求，我们规定可以将128个字段中的几个字段你自己来定义其内容，也算是一种扩展了。<br />
<br />
这样，最后我们就得到了ISO8583规范的那张字段描述表了。想要详细的知道每个字段的含义直接对着表看就可以，比较简单。<br />
<br />
全文完<br />
<br />
<br />
刘永胜&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;2005年于迪堡广州<br />
</span></span></div>
</div>
<img src ="http://www.blogjava.net/1504/aggbug/321468.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2010-05-20 14:31 <a href="http://www.blogjava.net/1504/archive/2010/05/20/321468.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自定义分页标签【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/06/22/283499.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Mon, 22 Jun 2009 01:38:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/06/22/283499.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/283499.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/06/22/283499.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/283499.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/283499.html</trackback:ping><description><![CDATA[收藏自：http://www.blogjava.net/zhutianxiang/archive/2009/04/18/263837.html<br />
<p><span style="color: #0000ff">近期在做的S2SH项目，因为多处用到分页，BOSS要求小弟将其抽象出来。小弟不才，实际参与开发的经验也就1年。<br />
于是花了点时间将其做成自定义标签供所有需要分页的业务调用。小结一下，供新手参考</span></p>
<p><span style="color: #0000ff">自定义标签使用如下：<br />
JSP页面引入：<br />
&lt;%@ taglib uri="/htdz-tag" prefix="htdz-tag"%&gt;<br />
在需要摆放翻页的相关按钮处使用：<br />
&lt;htdz-tag:PagerTag pagesize="${pagesize}" rowcount="${rowcount}" currpagenum="${currpagenum}" action="${action}"/&gt;</span></p>
<p><span style="color: #0000ff">以下介绍如何自定义标签：</span></p>
<p><span style="color: #0000ff">1.首先是针对自定义标签的描述：<br />
创建WEB-INF/tags/htdz-tag.tld标签描述文件：<br />
&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
&lt;taglib xmlns="http://java.sun.com/xml/ns/j2ee"<br />
&nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"<br />
&nbsp;version="2.0"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;description&gt;htdz tag&lt;/description&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;display-name&gt;htdz tag&lt;/display-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tlib-version&gt;1.0&lt;/tlib-version&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;short-name&gt;htdz-tag&lt;/short-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;uri&gt;/htdz-tag&lt;/uri&gt;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &lt;tag&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--分页控件使用说明：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.最全参数用法：&lt;htdz-tag:PagerTag pagesize="${pagesize}" rowcount="${rowcount}" currpagenum="${currpagenum}" action="${action}" className="button_small"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.最简参数用法：&lt;htdz-tag:PagerTag pagesize="${pagesize}" rowcount="${rowcount}" currpagenum="${currpagenum}" action="${action}"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参数说明：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. pagesize为每页记录数(必写)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. rowcount为总记录数(必写)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3. currpagenum为当前页数(必写)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4. className为分页按钮样式，如果不写，则为默认样式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5. action为URL请求路径(必写)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;分页控件&lt;/description&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--JSP里使用时的标签名--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;PagerTag&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--用以将自定义标签解析成控件的Java类--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tag-class&gt;com.htdz.util.tag.PagerTag&lt;/tag-class&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;body-content&gt;JSP&lt;/body-content&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--每个attribute代表标签的一个属性--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;attribute&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;pagesize:每页条数&lt;/description&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--属性名--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;pagesize&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--是否必填属性--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;required&gt;true&lt;/required&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--此属性值是否接受EL,&lt;%= 之类的形式--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/attribute&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;attribute&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;rowcount:总记录数&lt;/description&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;rowcount&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;required&gt;true&lt;/required&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/attribute&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;attribute&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;currpagenum:当前页数&lt;/description&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;currpagenum&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;required&gt;true&lt;/required&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/attribute&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;attribute&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;action:URL请求路径&lt;/description&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;action&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;required&gt;true&lt;/required&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;rtexprvalue&gt;true&lt;/rtexprvalue&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/attribute&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;attribute&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;className:用于客户端确定分页按钮的样式&lt;/description&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;className&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;required&gt;false&lt;/required&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/attribute&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tag&gt;</span></p>
<p><span style="color: #0000ff">&lt;/taglib&gt;</span></p>
<p><span style="color: #0000ff">2.创建用于将标签解析为页面翻页控件的类<br />
PagerTag.java</span></p>
<p><span style="color: #0000ff">public class PagerTag extends TagSupport {</span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; public static final int USER_PAGESIZE = 5;// 礼品搜索--每页记录数<br />
&nbsp;&nbsp;&nbsp; private static final String DEFAULT_BUTTON_CLASS= "button_small"; //翻页按钮默认样式<br />
&nbsp;&nbsp;&nbsp; private static final String DISABLE_BUTTON_CLASS= "button_small_disable"; //失效按钮默认样式<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; private int pagesize;<br />
&nbsp;&nbsp;&nbsp; private int rowcount;<br />
&nbsp;&nbsp;&nbsp; private int currpagenum;<br />
&nbsp;&nbsp;&nbsp; private String action;<br />
&nbsp;&nbsp;&nbsp; private String className; </span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; public PagerTag() {</span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; }</span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; public void setPagesize(int pagesize) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.pagesize = pagesize;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setRowcount(int rowcount) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.rowcount = rowcount;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; public void setCurrpagenum(int currpagenum) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currpagenum = currpagenum;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setClassName(String className) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.className = className;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setAction(String action) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.action = action;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public int doStartTag() throws JspException {<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (new Integer(pagesize) == null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new JspException("PagerTag标签中缺乏pagesize属性！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(pagesize==0){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new JspException("PagerTag标签中的pagesize属性无值！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (new Integer(rowcount) == null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new JspException("PagerTag标签中缺乏rowcount属性！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (new Integer(currpagenum) == null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new JspException("PagerTag标签中缺乏currpagenum属性！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (action == null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new JspException("PagerTag标签中缺乏action属性！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(action.length()==0){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new JspException("PagerTag标签中的action属性无值！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果页面标签中没写className属性，则让翻页按钮应用默认的按钮样式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(className==null||className.length()==0){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; className = DEFAULT_BUTTON_CLASS;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //获取总页数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int totalpagesize = getTotalpagesize(rowcount);</span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //用以标志是否能上翻<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean noUp = false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //用以标志是否能下翻<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean noDown = false;</span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //声明应用于'首页'，'上一页'按钮的样式(因为此俩按钮要么同时失效，要么同时可用)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String buttonClass1 = className;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //声明应用于'下一页'，'尾页'按钮的样式(同上)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String buttonClass2 = className;<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果无记录，则设置总页数与当前页数都为1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(rowcount==0){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currpagenum = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; totalpagesize = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果当前页是第一页<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(currpagenum==1){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; noUp = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置'首页'，'上一页'按钮失效样式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buttonClass1 = DISABLE_BUTTON_CLASS;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果当前页是最大页<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(currpagenum==totalpagesize){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; noDown = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置'下一页'，'尾页'按钮失效样式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buttonClass2 = DISABLE_BUTTON_CLASS;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp; </span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer html = new StringBuffer();<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html.append(currpagenum+"/"+totalpagesize+"页");</span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html.append("&lt;input class="+buttonClass1+" type=\"button\" value=\"首页\" onclick=\"turnPage('first','"+currpagenum+"','"+totalpagesize+"','"+action+"')\" ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(noUp){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html.append("disabled=\"true\"");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html.append("/&gt;");</span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html.append("&lt;input class="+buttonClass1+" type=\"button\" value=\"上一页\" onclick=\"turnPage('up','"+currpagenum+"','"+totalpagesize+"','"+action+"')\" ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(noUp){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html.append("disabled=\"true\"");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html.append("/&gt;");<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html.append("&lt;input class="+buttonClass2+" type=\"button\" value=\"下一页\" onclick=\"turnPage('down','"+currpagenum+"','"+totalpagesize+"','"+action+"')\"");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(noDown){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html.append("disabled=\"true\"");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html.append("/&gt;");</span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html.append("&lt;input class="+buttonClass2+" type=\"button\" value=\"尾页\" onclick=\"turnPage('last','"+currpagenum+"','"+totalpagesize+"','"+action+"')\" ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(noDown){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html.append("disabled=\"true\"");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html.append("/&gt;");</span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html.append(currpagenum+"/"+totalpagesize+"页&amp;nbsp;&amp;nbsp;");</span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html.append("&lt;input type=\"text\" maxlength=\"3\" id=\"text\" size=\"3\" onkeypress=\"return checkInput(event);\" /&gt;页");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html.append("&lt;input class="+className+" type=\"button\" value=\"GO\" onclick=\"turnPage('to','"+currpagenum+"','"+totalpagesize+"','"+action+"')\" /&gt;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pageContext.getOut().println(html.toString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new JspException(e.getMessage());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this.SKIP_BODY;<br />
&nbsp;&nbsp;&nbsp; }</span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 根据总记录数得到总页数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @param rowcount<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 总记录数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @return 总页数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public int getTotalpagesize(int rowcount) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int totalpagesize = 0;<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (rowcount % pagesize == 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; totalpagesize = rowcount / pagesize;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; totalpagesize = rowcount / pagesize + 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return totalpagesize;<br />
&nbsp;&nbsp;&nbsp; }<br />
}</span></p>
<p><span style="color: #0000ff">到此为止，自定义标签书已完成。<br />
可应用于项目各处，<br />
<span style="color: #800080">只要页面上遵循标签描述规则，后台该给标签属性传值的时候记得传就行了。<br />
以下用一个简单的例子来说明一下，红色字体显示的部分别忘记写就行了。</span></span></p>
<p><span style="color: #0000ff">UserAction.java:<br />
public class UserAction extends ActionSupport {</span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; private UserService userService;<br />
&nbsp;&nbsp;&nbsp; private List&lt;User&gt; users;</span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; public String findUser(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletRequest request = ServletActionContext.getRequest();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map sessionMap = ActionContext.getContext().getSession();<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String currpagenum= "1";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String pagenum = request.getParameter("pagenum ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(pagenum != null &amp;&amp; pagenum .length()!=0){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currpagenum= pagenum ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {</span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //查询用户记录<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; users= userService.findUser(pageNum); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(users.size!=0){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.setAttribute("users", users); </span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int rowcount = userService.getCount();</span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #ff0000"><span style="color: #ff0000">request.setAttribute("rowcount ",rowcount );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.setAttribute("currpagenum",currpagenum);</span></span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str = "success";//成功视图<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; message = "无记录!"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str = "failure";//失败视图<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #ff0000">request.setAttribute("pagesize", PagerTag.USER_PAGESIZE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.setAttribute("action", "findUser.action);</span></span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //返回视图<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return str;<br />
&nbsp;&nbsp;&nbsp; }</span></p>
<p><br />
<span style="color: #0000ff">&nbsp;&nbsp;&nbsp; public UserService getUserService() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return userService;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setUserService(UserService userService) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.userService = userService;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public List&lt;User&gt; getUsers(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return users;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setUsers(List&lt;User&gt; users){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.users = users;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }</span></p>
<p><span style="color: #0000ff">}</span></p>
<p><span style="color: #0000ff">&nbsp;<br />
UserService.java:</span></p>
<p><span style="color: #0000ff">public class UserService {</span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; private UserDao userDao; </span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; public List&lt;User&gt; findUser(String pageNum){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List&lt;User&gt; userList = userDao.findUser(pageNum);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return userList;<br />
&nbsp;&nbsp;&nbsp; }</span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; public int getCount(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int count = userDao.getCount();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return count;<br />
&nbsp;&nbsp;&nbsp; }</span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; public UserDao getUserDao() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return userDao;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void setUserDao(UserDao userDao) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.userDao = userDao;<br />
&nbsp;&nbsp;&nbsp; }<br />
}</span></p>
<p><br />
<span style="color: #0000ff">UserDao.java:</span></p>
<p><span style="color: #0000ff">public class UserDao extends HibernateDaoSupport {</span></p>
<p><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 查询用户<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return User对象集合<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public List&lt;User&gt; findUser(String pagenum) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List&lt;User&gt; users = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session session = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int myPagenum= Integer.parseInt(pagenum);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String hql = "from User";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session = this.getSession();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Query query = session.createQuery(hql);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query.setFirstResult(Pager.USER_PAGESIZE * (myPagenum - 1));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query.setMaxResults(Pager.USER_PAGESIZE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; users = query.list();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.flush();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } finally {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (session != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return users;<br />
}</span></p>
<p><br />
<span style="color: #0000ff">&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 获取用户总记录数<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return 用户总记录数<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public int getCount(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String hql ="select count(id) from User";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session session = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int count =0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session = this.getSession();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Query query = session.createQuery(hql);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List list = query.list();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.flush();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count = Integer.parseInt(list.get(0).toString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } finally{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return count;<br />
&nbsp;&nbsp;&nbsp; }</span></p>
<p><span style="color: #0000ff">}<br />
</span></p>
<img src ="http://www.blogjava.net/1504/aggbug/283499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-06-22 09:38 <a href="http://www.blogjava.net/1504/archive/2009/06/22/283499.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2调用自定义方法【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/06/18/283069.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Thu, 18 Jun 2009 08:10:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/06/18/283069.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/283069.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/06/18/283069.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/283069.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/283069.html</trackback:ping><description><![CDATA[<span style="color: #ff0000"><strong>声明:此源代码来自网友，目的是为初学者提供一个实例.<br />
<a title="struts2自定义调用方法实例" href="/Files/1504/myStruts2.rar">struts2自定义调用方法实例</a></strong></span>
<img src ="http://www.blogjava.net/1504/aggbug/283069.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-06-18 16:10 <a href="http://www.blogjava.net/1504/archive/2009/06/18/283069.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java实现一个读取Properties配置文件的实现类 【收藏】</title><link>http://www.blogjava.net/1504/archive/2009/06/08/280593.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Mon, 08 Jun 2009 04:04:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/06/08/280593.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/280593.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/06/08/280593.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/280593.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/280593.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 收藏自：http://www.blogjava.net/xmatthew/archive/2008/04/13/192534.html针对于JDK本身提供的Properties类，增加了以下功能：&nbsp;* 提供指定文件的读写编码支持 Properties使用的编码与当前操作系统有关。一般为 unicode&nbsp;* 支持Properties变量的使用。如果 a=123 \n ...&nbsp;&nbsp;<a href='http://www.blogjava.net/1504/archive/2009/06/08/280593.html'>阅读全文</a><img src ="http://www.blogjava.net/1504/aggbug/280593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-06-08 12:04 <a href="http://www.blogjava.net/1504/archive/2009/06/08/280593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA-用HttpClient来模拟浏览器GET,POST [转]</title><link>http://www.blogjava.net/1504/archive/2009/05/16/271057.html</link><dc:creator>weesun一米阳光</dc:creator><author>weesun一米阳光</author><pubDate>Sat, 16 May 2009 14:31:00 GMT</pubDate><guid>http://www.blogjava.net/1504/archive/2009/05/16/271057.html</guid><wfw:comment>http://www.blogjava.net/1504/comments/271057.html</wfw:comment><comments>http://www.blogjava.net/1504/archive/2009/05/16/271057.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/1504/comments/commentRss/271057.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/1504/services/trackbacks/271057.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一般的情况下我们都是使用IE或者Navigator浏览器来访问一个WEB服务器，用来浏览页面查看信息或者提交一些数据等等。所访问的这些页面有的仅仅是一些普通的页面，有的需要用户登录后方可使用，或者需要认证以及是一些通过加密方式传输，例如HTTPS。目前我们使用的浏览器处理这些情况都不会构成问题。不过你可能在某些时候需要通过程序来访问这样的一些页面，比如从别人的网页中&#8220;偷&#8221;一...&nbsp;&nbsp;<a href='http://www.blogjava.net/1504/archive/2009/05/16/271057.html'>阅读全文</a><img src ="http://www.blogjava.net/1504/aggbug/271057.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/1504/" target="_blank">weesun一米阳光</a> 2009-05-16 22:31 <a href="http://www.blogjava.net/1504/archive/2009/05/16/271057.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>