??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美激情影院,欧美综合一区二区,欧美国产一区二区三区http://www.aygfsteel.com/1504/archive/2010/07/01/324963.htmlweesun一c阳?/dc:creator>weesun一c阳?/author>Thu, 01 Jul 2010 03:18:00 GMThttp://www.aygfsteel.com/1504/archive/2010/07/01/324963.htmlhttp://www.aygfsteel.com/1504/comments/324963.htmlhttp://www.aygfsteel.com/1504/archive/2010/07/01/324963.html#Feedback0http://www.aygfsteel.com/1504/comments/commentRss/324963.htmlhttp://www.aygfsteel.com/1504/services/trackbacks/324963.html

错误描述:

org.directwebremoting.dwrp.BaseDwrpHandler - A request has been denied as a potential CSRF attack.
org.directwebremoting.dwrp.BaseCallHandler - Exception while processing batch
java.lang.SecurityException: CSRF Security Error

  at org.directwebremoting.dwrp.BaseDwrpHandler.checkNotCsrfAttack(BaseDwrpHandler.java:85)
  at org.directwebremoting.dwrp.BaseCallHandler.handle(BaseCallHandler.java:76)
  at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:120)
  at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:141)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
  at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
  at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process  (Http11Protocol.java:581)
  at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
  at java.lang.Thread.run(Thread.java:619)

 

解决办法:

修改 web.xml ?DWR 配置信息

?

<servlet> 
      <servlet-name>dwr-invoker</servlet-name> 
     <servlet-class>org.directwebremoting.spring.DwrSpringServlet</servlet-class> 
     <init-param>
      <param-name>debug</param-name>
      <param-value>true</param-value>
  </init-param>
</servlet>

 

加入跨域调用配置信息(U色部分)Q修改ؓ:

<servlet> 
      <servlet-name>dwr-invoker</servlet-name> 
      <servlet-class>org.directwebremoting.spring.DwrSpringServlet</servlet-class> 
      <init-param>
             <param-name>debug</param-name>
             <param-value>true</param-value>
      </init-param>
      <init-param>
             <param-name>crossDomainSessionSecurity</param-name>
             <param-value>false</param-value>
      </init-param>
      <init-param>
            <param-name>allowScriptTagRemoting</param-name>
            <param-value>true</param-value>
      </init-param>

</servlet>



]]>
L掌握ISO8583报文协议【{?/title><link>http://www.aygfsteel.com/1504/archive/2010/05/20/321468.html</link><dc:creator>weesun一c阳?/dc:creator><author>weesun一c阳?/author><pubDate>Thu, 20 May 2010 06:31:00 GMT</pubDate><guid>http://www.aygfsteel.com/1504/archive/2010/05/20/321468.html</guid><wfw:comment>http://www.aygfsteel.com/1504/comments/321468.html</wfw:comment><comments>http://www.aygfsteel.com/1504/archive/2010/05/20/321468.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/1504/comments/commentRss/321468.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/1504/services/trackbacks/321468.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt">转自Qhttp://www.itpub.net/419521.html</span> <div id="wmqeeuq" class="blog_content"> <div id="wmqeeuq" class="storytext"> <p><span id="wmqeeuq" class="javascript" id="text2969839"><span style="font-size: 10pt"><span style="font-family: Verdana">我刚q入金融行业Ӟq道了IS08583报文协议Q我惛_能我q没q入q个行业都已l听q了Q可知ISO8583的媄响力有多大了。最初刚接触它时Q确实对其中的一些细节概念不是很清晰Q对有些地方比较qh。鉴于此Q我惛_多同行也必然会经历同样得阶段Q所以我写下本文Q以便大家能够少C些弯路。同Ӟ我在|上Q?/span> </span><a 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">Q写下我要写“全面掌握ISO8583报文”?#8220;W合CEN/XFSQ即WOSA/XFSQ规范的SP~写”两篇文章Ӟ很多人都询问我什么时候能够写出来Q可知许多h是需要了解这斚w的知识的Q即使我旉不是很多Q也得尽量将q两文章写出来Q给需要的人提供一些参考?br /> <br /> 如果单纯的讲IS08583那些字段的定义,我觉得没有什么意思,标准中已l对每个字段解释的非常详l了Q如果你觉得理解英文版的ISO8583规范有些困难Q网上也有同行ؓ我们译好的中文版ISO8583规范Q所以我的目的是辑ֈ阅读本文后能够对ISO8583知其Ӟ亦知其所以然Q以前基本没有接触它的Z能够辑ֈ掌握ISO8583报文规范?/span> </span></span></p> <br /> <span style="font-family: Verdana"><span style="font-size: 10pt">好了Q我们该转入正题了?br /> <br /> 最开始时Q金融系l只有IBMq些大的公司来提供设备,象各U主Zl端{。在各个计算备之_需要交换数据。我们知道数据是通过|络来传送的Q而在|络上传送的数据都是Z0?q样的二q制数据Q如果没有对数据q行~码Q则q些数据没有够理解,属于没有用的数据。v初的X.25、SDLC以及现在行的TCP/IP|络协议都提供底层的通讯~码协议Q它们解决了最底层的通讯问题Q能够将一串字W从一个地方传送到另一个地斏V但是,仅仅传送字W串是没有太大意义的Q怎样来解析字W串代表什么内Ҏ非常重要的,否则传送一?#8220;0123abcd”的字W串也是无用的ؕ码?br /> <br /> 让我们随着时光回到几十q前的某个时刻,假设我们被推到历史的舞台上,由我们来设计一个通用报文协议Q来解决金融pȝ之间的报文交换,暂且U该协议叫做ISO8583 协议。此Ӟ技术是在不断的前行Q当初IBM一支独U的局面好像已l不妙了Q各U大不一的公叔Rq入金融行业以求能有所斩获Q呈一片百花齐攄局面。我们怎样来设计一个报文协议,能够这些如雨后春笋般出现的所有公叔RU_q来Q其实也不是一件很单的事?br /> <br /> 我们q是先一步步的来考虑吧。金融行业其实涉及到的数据内容ƈ不是成千上万Q无法统计,恰恰相反Q是比较的。我们都可以在心底数得过来,象交易类型、帐受帐L型、密码、交易金额、交易手l费、日期时间、商户代码??数据、交易序列号{,把所有能够ȝ出来的都ȝh不过100个左右的数据。那我们可以首先单的设计 ISO8583Q定?28个字D,所有能够考虑到的cM上面提到?#8220;帐号”{金融数据类型,按照一个顺序排hQ分别对?28个字D中的一个字Dc每个数据类型占固定的长度,q个序和长度我们都事先定义好。这样就单了Q要发送一个报文时Q就?28个字D|照顺序接hQ然后将接v来的整串数据包发送出厅R?br /> <br /> M金融软g收到ISO8583包后Q直接按照我们定义的规范解包卛_Q因为整个报文的128个字D从哪一位到哪一位代表什么,大家都知道,只要知道你的数据包是ISO8583包即可,我们都已l定义好了。比如第1个字D|“交易cd”Q长度ؓ4位,W?个字D位?#8220;帐号”Qؓ19位等{。接收方可以先?位,再取接着?9位,依次cLQ直到整个数据包128个字D都解完为止?br /> <br /> 其实q种做法真是单直接,基本上就可以满需要了。不q我们有几个问题要思考下Q?br /> 1?我怎么知道每个字段的数据类型呢Q是数字q是字符Q?br /> 2?每个传送的报文都把128个字D都传过去,那网l带宽能够承受得了,有时候我可能只需要其?个字D,l果多收C123个无用的字段?br /> 3?如果我某些字D늚长度不固定,属于变长怎么办,因ؓ你现在解包是当作数据包每个字D都是固定的Q用C语言解包时直接依靠指针取固定长度的一串字W做Z个字Dc?br /> <br /> 我们来一一解决q些问题?br /> <br /> W一个问题简单,我在定义ISO8583旉了定义每个字D表CZ么,q规定其内容是数字或是字W等卛_。考虑可能出现的类型不q有以下几种Q字母、数字、特D字W、年月日{时间、二q制数据。比如我?28个字D中?#8220;商户cd”字段定义光度是15Q同时定义其cd为字母。再_点,如果“商户cd”里面的数据同时包括数字和字母呢?那我们就定义其类型ؓ字母也可Qؓ数字也可Q即一个字D可以同时属于多个类型?br /> <br /> W二个问题稍微复杂点。其本质是如果我只?28个字D늚5个字D,接收Ҏ么知道我传了哪几个字段l它了。要是我们把剩下?23全部填成0或其他特D标识,标明该字D不需要用?q种处理Ҏ没有半点用处Q没有解决网l带宽的本质问题Q还是要?28个字Dc?br /> <br /> 换个思\Q我在报文前面加上个包头Q包头里面包含的信息能够让别人知道只传了5个字Dc怎样设计q个包头Q可以这P我们?6个字节,?28?bitQ一个字节等?bitQ来表示128个字D中的某个字D|否存在。每个bit在计机的二q制里面不是1是0Q如果是1pC对应的字段在本ơ报文中存在Q如果是0是不存在。这样好了,如果别h接收CISO8583报文Q可以先Ҏ最前面的报文头Q就知道紧接着报文头后面的报文有哪些字D,没有哪些字段了。比如,我要发?个字D,分别属于128个字D中的第2????字段Q我可以将128bit的报文头填成 011001011000000000………..Q一?28个bitQ后面就全是0了。注意其中第2????位ؓ1Q其他都??br /> <br /> 有了q个128bit的报文头Q我们就可以只发送需要的5个字D了。怎样l织报文Q先放上q?28bitQ即16个字节的_然后在头后面????8?字段Q这些字D늴挨在一P3?之间也不需要填??q两个字D了。接收方收到q个报文Q它会根?28bit的报文头来解包,它自然知道把W?3个字D取出后Q就直接在第3字段的后面取W?个字D,每个字段的长度在ISO8583里面都定义好了,很轻村ְ把数据包解出来了?br /> <br /> q下好了Qؓ了解决上面的W二问题Q我们只是在报文中增加了16个字节的数据Q就L搞定了,我们把这16个字节称为bit mapQ即位图Q用来表C某个位是否存在。不q我们再E微优化一下,考虑到很多时候报文不需?28个字D这么多Q其一?4个字D都不一定能够用完。那我可以将报文头由128bit减到64bitQ只有在需要的时候才把剩下的64bit攑ֈ报文里面Q这h文长度不又少?个字节吗Q?br /> <br /> 是个好主意。我们把ISO8583?28个字D中最常见的都攑ֈ?4个字D中Q那我们可以处理羃一倍。这h一般发送报文时只需发?4bitQ即一个字节的报文_再加上需要的几个字段可以了。如果有些报文用?4?28之间的字D呢Q这个也好办Q我?4bit报文头的W一位bit用来代表Ҏ含义Q如果该bit?Q则表示64bit后面跟了剩下?4bit报文_如果W一位bit?Q则表示64bit后面没有跟剩下的64bit报文_直接?28个字D中的报文了。那们,接收方会判断一下报头的W一个bit?q是0Q从而知道报文头?4bitq是128bit了,可以做相应处理。因为报文头W二?4bit属于有时候有Q所以我们叫它Extended bit map扩展位图Q相应的报文头最开始的64bit我们叫它Primary bit mapM图。我们直接把扩展位图固定攑ֈ128个字D늚W一个字D,而主位图每个数据包都有,强制性放在所?28个字D늚前面Qƈ不归?28个字D中厅R?br /> <br /> W三个问题可以考虑q样解决。比如第2个字D|“帐号”Q是不定长的Q可能有的银行帐h19位,有的?7位等。我们定 ISO8583规范时可以规定第2个字D|25位,q下_?9?7的情况都包含q来Q但是如果以后出C30位的怎么办?那我们现在将字段定ؓ 100位。以后超q?00位怎么办,况且如果你只?9位的帐号Q我们定义了100位,?1位的数据不是费了网l的带宽。看来预先定义一个我们认为比较大的位数是不太好的?br /> <br /> 我们q样Q对于第2个字D?#8220;帐号”Q在字段的开头加?#8220;帐号”的长度。比如帐h0123456789Q一?0 位,我们变成100123456789Q注意前面多了个10Q表C后面的10位ؓ帐号。如果你接触qCOM里面的BSTRQ应该对q种处理比较熟悉了。接收方收到该字D后Q它知道ISO8583规定W?个字D?#8220;帐号”是变长的Q所以会先取前面?位出来,获取其|此时为长度,然后Ҏ该长度值知道应该拷贝该字段后面哪几位数据,才是真正的帐受如果你觉得长度如果只有两位最多只能表C?9位长Q不太够Q我们也定义可以允许前面3位都为长度的变长字段Q这样就?99位长Q应该够了吧。在规范里面如果我定义某个字D늚属性是“LLVAR”Q你注意了,其中的LL表示长度QVAR表示后面的数据,两个LL表示两位长,最大是99Q如果是三位是“LLLVAR”Q最大是999。这L我们定义的ISO8583规范文档时直接根据这几个字母q解某个变长字D늚意思了?br /> <br /> 该解决的几个问题到这里都解决了,我们来回下自己设计的ISO8583规范。其实没有什么,无非是把金融行业可能出现的数据分门别c,排好序Q接着把它们连接v来,l成一个报文发送出去而已。其中针对该报文的设计进行了一些优化,引入了bit map位图的概念,也算是一个不错的x?br /> <br /> 剩下的工作就单了Q我们就直接攉金融行业可能出现的数据字D늱型,分成128个字D늱型,如果没有?28个这么多先保留一些下来,另外考虑到有些h有特D的要求Q我们规定可以将128个字D中的几个字D你自己来定义其内容Q也是一U扩展了?br /> <br /> q样Q最后我们就得到了ISO8583规范的那张字D|q表了。想要详l的知道每个字段的含义直接对着表看可以,比较单?br /> <br /> 全文?br /> <br /> <br /> 刘永?nbsp;       2005q于q堡q州<br /> </span></span></div> </div> <img src ="http://www.aygfsteel.com/1504/aggbug/321468.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/1504/" target="_blank">weesun一c阳?/a> 2010-05-20 14:31 <a href="http://www.aygfsteel.com/1504/archive/2010/05/20/321468.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自定义分|{【收藏?/title><link>http://www.aygfsteel.com/1504/archive/2009/06/22/283499.html</link><dc:creator>weesun一c阳?/dc:creator><author>weesun一c阳?/author><pubDate>Mon, 22 Jun 2009 01:38:00 GMT</pubDate><guid>http://www.aygfsteel.com/1504/archive/2009/06/22/283499.html</guid><wfw:comment>http://www.aygfsteel.com/1504/comments/283499.html</wfw:comment><comments>http://www.aygfsteel.com/1504/archive/2009/06/22/283499.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/1504/comments/commentRss/283499.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/1504/services/trackbacks/283499.html</trackback:ping><description><![CDATA[收藏自:http://www.aygfsteel.com/zhutianxiang/archive/2009/04/18/263837.html<br /> <p><span style="color: #0000ff">q期在做的S2SH目Q因为多处用到分,BOSS要求弟其抽象出来。小弟不才,实际参与开发的l验也就1q?br /> 于是׃Ҏ间将其做成自定义标签供所有需要分늚业务调用。小l一下,供新手参?/span></p> <p><span style="color: #0000ff">自定义标{用如下:<br /> JSP面引入Q?br /> <%@ taglib uri="/htdz-tag" prefix="htdz-tag"%><br /> 在需要摆攄늚相关按钮处用:<br /> <htdz-tag:PagerTag pagesize="${pagesize}" rowcount="${rowcount}" currpagenum="${currpagenum}" action="${action}"/></span></p> <p><span style="color: #0000ff">以下介绍如何自定义标{:</span></p> <p><span style="color: #0000ff">1.首先是针对自定义标签的描qͼ<br /> 创徏WEB-INF/tags/htdz-tag.tld标签描述文gQ?br /> <?xml version="1.0" encoding="UTF-8" ?><br /> <taglib xmlns="http://java.sun.com/xml/ns/j2ee"<br />  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"<br />  version="2.0"><br />     <description>htdz tag</description><br />     <display-name>htdz tag</display-name><br />     <tlib-version>1.0</tlib-version><br />     <short-name>htdz-tag</short-name><br />     <uri>/htdz-tag</uri><br />  <br />     <tag><br />           <!--分页控g使用说明Q?br />           1.最全参数用法:<htdz-tag:PagerTag pagesize="${pagesize}" rowcount="${rowcount}" currpagenum="${currpagenum}" action="${action}" className="button_small"/><br />           1.最参数用法Q?lt;htdz-tag:PagerTag pagesize="${pagesize}" rowcount="${rowcount}" currpagenum="${currpagenum}" action="${action}"/><br />           参数说明Q?br />           1. pagesize为每记录数(必写)<br />           2. rowcount为总记录数(必写)<br />           3. currpagenum为当前页?必写)<br />           4. className为分|钮样式,如果不写Q则为默认样?br />           5. action为URLh路径(必写)<br />           --><br />           <description>分页控g</description><br />           <!--JSP里用时的标{֐--><br />           <name>PagerTag</name><br />           <!--用以自定义标签解析成控件的Javac?-><br />           <tag-class>com.htdz.util.tag.PagerTag</tag-class><br />           <body-content>JSP</body-content><br />           <!--每个attribute代表标签的一个属?-><br />           <attribute><br />                <description>pagesize:每页条数</description><br />                <!--属性名--><br />                <name>pagesize</name><br />                <!--是否必填属?-><br />                <required>true</required><br />                <!--此属性值是否接受EL,<%= 之类的Ş?-><br />                <rtexprvalue>true</rtexprvalue><br />          </attribute><br />          <attribute><br />              <description>rowcount:总记录数</description><br />              <name>rowcount</name><br />              <required>true</required><br />              <rtexprvalue>true</rtexprvalue><br />          </attribute><br />          <attribute><br />              <description>currpagenum:当前|</description><br />              <name>currpagenum</name><br />              <required>true</required><br />              <rtexprvalue>true</rtexprvalue><br />          </attribute><br />          <attribute><br />              <description>action:URLh路径</description><br />              <name>action</name><br />              <required>true</required><br />              <rtexprvalue>true</rtexprvalue><br />          </attribute><br />          <attribute><br />              <description>className:用于客户端确定分|钮的样式</description><br />              <name>className</name><br />              <required>false</required><br />          </attribute><br />      </tag></span></p> <p><span style="color: #0000ff"></taglib></span></p> <p><span style="color: #0000ff">2.创徏用于标{解析ؓ面页控g的类<br /> PagerTag.java</span></p> <p><span style="color: #0000ff">public class PagerTag extends TagSupport {</span></p> <p><span style="color: #0000ff">    public static final int USER_PAGESIZE = 5;// C品搜烦--每页记录?br />     private static final String DEFAULT_BUTTON_CLASS= "button_small"; //页按钮默认样式<br />     private static final String DISABLE_BUTTON_CLASS= "button_small_disable"; //失效按钮默认样式<br />  <br />     private int pagesize;<br />     private int rowcount;<br />     private int currpagenum;<br />     private String action;<br />     private String className; </span></p> <p><span style="color: #0000ff">    public PagerTag() {</span></p> <p><span style="color: #0000ff">    }</span></p> <p><span style="color: #0000ff">    public void setPagesize(int pagesize) {<br />         this.pagesize = pagesize;<br />     }<br />     public void setRowcount(int rowcount) {<br />         this.rowcount = rowcount;<br />     }<br />    public void setCurrpagenum(int currpagenum) {<br />         this.currpagenum = currpagenum;<br />     }<br />     public void setClassName(String className) {<br />         this.className = className;<br />     }<br />     public void setAction(String action) {<br />         this.action = action;<br />     }<br /> <br />     public int doStartTag() throws JspException {<br />   <br />         if (new Integer(pagesize) == null) {<br />             throw new JspException("PagerTag标签中缺乏pagesize属性!");<br />         }else if(pagesize==0){<br />             throw new JspException("PagerTag标签中的pagesize属性无|");<br />         }<br />         if (new Integer(rowcount) == null) {<br />             throw new JspException("PagerTag标签中缺乏rowcount属性!");<br />         }<br />         if (new Integer(currpagenum) == null) {<br />             throw new JspException("PagerTag标签中缺乏currpagenum属性!");<br />         }<br />         if (action == null) {<br />             throw new JspException("PagerTag标签中缺乏action属性!");<br />         }else if(action.length()==0){<br />             throw new JspException("PagerTag标签中的action属性无|");<br />         }</span></p> <p><span style="color: #0000ff">        //如果面标签中没写className属性,则让页按钮应用默认的按钮样?br />         if(className==null||className.length()==0){<br />             className = DEFAULT_BUTTON_CLASS;<br />         }<br />         //获取总页?br />         int totalpagesize = getTotalpagesize(rowcount);</span></p> <p><span style="color: #0000ff">        //用以标志是否能上?br />         boolean noUp = false;<br />         //用以标志是否能下?br />         boolean noDown = false;</span></p> <p><span style="color: #0000ff">        //声明应用?首页'Q?上一?按钮的样?因ؓ此俩按钮要么同时失效Q要么同时可?<br />         String buttonClass1 = className;<br />         //声明应用?下一?Q?N'按钮的样?同上)<br />         String buttonClass2 = className;<br />   <br />         //如果无记录,则设|总页C当前|都ؓ1<br />         if(rowcount==0){<br />             currpagenum = 1;<br />             totalpagesize = 1;<br />         }<br />   <br />         //如果当前|W一?br />         if(currpagenum==1){<br />             noUp = true;<br />             //讄'首页'Q?上一?按钮失效样式<br />             buttonClass1 = DISABLE_BUTTON_CLASS;<br />         }<br />         //如果当前|最大页<br />         if(currpagenum==totalpagesize){<br />             noDown = true;<br />             //讄'下一?Q?N'按钮失效样式<br />             buttonClass2 = DISABLE_BUTTON_CLASS;<br />         }<br />   </span></p> <p><span style="color: #0000ff">        try {<br />             StringBuffer html = new StringBuffer();<br />    <br />             html.append(currpagenum+"/"+totalpagesize+"?);</span></p> <p><span style="color: #0000ff">            html.append("<input class="+buttonClass1+" type=\"button\" value=\"首页\" onclick=\"turnPage('first','"+currpagenum+"','"+totalpagesize+"','"+action+"')\" ");<br />             if(noUp){<br />                 html.append("disabled=\"true\"");<br />             }<br />             html.append("/>");</span></p> <p><span style="color: #0000ff">            html.append("<input class="+buttonClass1+" type=\"button\" value=\"上一\" onclick=\"turnPage('up','"+currpagenum+"','"+totalpagesize+"','"+action+"')\" ");<br />             if(noUp){<br />                 html.append("disabled=\"true\"");<br />             }<br />             html.append("/>");<br />    <br />             html.append("<input class="+buttonClass2+" type=\"button\" value=\"下一\" onclick=\"turnPage('down','"+currpagenum+"','"+totalpagesize+"','"+action+"')\"");<br />             if(noDown){<br />                 html.append("disabled=\"true\"");<br />             }<br />             html.append("/>");</span></p> <p><span style="color: #0000ff">            html.append("<input class="+buttonClass2+" type=\"button\" value=\"N\" onclick=\"turnPage('last','"+currpagenum+"','"+totalpagesize+"','"+action+"')\" ");<br />             if(noDown){<br />                 html.append("disabled=\"true\"");<br />             }<br />             html.append("/>");</span></p> <p><span style="color: #0000ff">            html.append(currpagenum+"/"+totalpagesize+"?amp;nbsp;&nbsp;");</span></p> <p><span style="color: #0000ff">            html.append("<input type=\"text\" maxlength=\"3\" id=\"text\" size=\"3\" onkeypress=\"return checkInput(event);\" />?);<br />             html.append("<input class="+className+" type=\"button\" value=\"GO\" onclick=\"turnPage('to','"+currpagenum+"','"+totalpagesize+"','"+action+"')\" />");<br />             pageContext.getOut().println(html.toString());<br />         } catch (Exception e) {<br />             throw new JspException(e.getMessage());<br />         }<br />          return this.SKIP_BODY;<br />     }</span></p> <p><span style="color: #0000ff">     /**<br />       * Ҏ总记录数得到总页?br />       * <br />       * @param rowcount<br />       *            总记录数<br />       * @return 总页?br />       */<br />     public int getTotalpagesize(int rowcount) {<br />         int totalpagesize = 0;<br />   <br />         if (rowcount % pagesize == 0) {<br />             totalpagesize = rowcount / pagesize;<br />         } else {<br />             totalpagesize = rowcount / pagesize + 1;<br />         }<br />         return totalpagesize;<br />     }<br /> }</span></p> <p><span style="color: #0000ff">到此为止Q自定义标签书已完成?br /> 可应用于目各处Q?br /> <span style="color: #800080">只要面上遵循标{描q规则,后台该给标签属性传值的时候记得传p了?br /> 以下用一个简单的例子来说明一下,U色字体昄的部分别忘记写就行了?/span></span></p> <p><span style="color: #0000ff">UserAction.java:<br /> public class UserAction extends ActionSupport {</span></p> <p><span style="color: #0000ff">    private UserService userService;<br />     private List<User> users;</span></p> <p><span style="color: #0000ff">    public String findUser(){<br />         String str = null;<br />         HttpServletRequest request = ServletActionContext.getRequest();<br />         Map sessionMap = ActionContext.getContext().getSession();<br />   <br />         String currpagenum= "1";<br />         try {<br />             String pagenum = request.getParameter("pagenum ");<br />             if(pagenum != null && pagenum .length()!=0){<br />                 currpagenum= pagenum ;<br />             }<br />         } catch (Exception e) {</span></p> <p><span style="color: #0000ff">        }<br />   <br />         //查询用户记录<br />         users= userService.findUser(pageNum); <br />         if(users.size!=0){<br />             request.setAttribute("users", users); </span></p> <p><span style="color: #0000ff">            int rowcount = userService.getCount();</span></p> <p><span style="color: #0000ff">            </span><span style="color: #ff0000"><span style="color: #ff0000">request.setAttribute("rowcount ",rowcount );<br />             request.setAttribute("currpagenum",currpagenum);</span></span></p> <p><span style="color: #0000ff">            str = "success";//成功视图<br />         }else{<br />             message = "无记?"                <br />             str = "failure";//p|视图<br />         }<br />   <br />         <span style="color: #ff0000">request.setAttribute("pagesize", PagerTag.USER_PAGESIZE);<br />         request.setAttribute("action", "findUser.action);</span></span></p> <p><span style="color: #0000ff">        //q回视图<br />         return str;<br />     }</span></p> <p><br /> <span style="color: #0000ff">    public UserService getUserService() {<br />         return userService;<br />     }<br />     public void setUserService(UserService userService) {<br />         this.userService = userService;<br />     }<br />     <br />     public List<User> getUsers(){<br />         return users;<br />     }<br />     public void setUsers(List<User> users){<br />         this.users = users;    <br />     }</span></p> <p><span style="color: #0000ff">}</span></p> <p><span style="color: #0000ff"> <br /> UserService.java:</span></p> <p><span style="color: #0000ff">public class UserService {</span></p> <p><span style="color: #0000ff">    private UserDao userDao; </span></p> <p><span style="color: #0000ff">    public List<User> findUser(String pageNum){<br />         List<User> userList = userDao.findUser(pageNum);<br />         return userList;<br />     }</span></p> <p><span style="color: #0000ff">    public int getCount(){<br />         int count = userDao.getCount();<br />         return count;<br />     }</span></p> <p><span style="color: #0000ff">    public UserDao getUserDao() {<br />         return userDao;<br />     }<br />     public void setUserDao(UserDao userDao) {<br />         this.userDao = userDao;<br />     }<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">    /**<br />      * 查询用户<br />      * @return User对象集合<br />      */<br />     public List<User> findUser(String pagenum) {<br />         List<User> users = null;<br />         Session session = null;<br />         try {<br />             int myPagenum= Integer.parseInt(pagenum);<br />             String hql = "from User";<br />             session = this.getSession();<br />             Query query = session.createQuery(hql);<br />             query.setFirstResult(Pager.USER_PAGESIZE * (myPagenum - 1));<br />             query.setMaxResults(Pager.USER_PAGESIZE);<br />             users = query.list();<br />             session.flush();<br />         } catch (Exception e) {<br />             e.printStackTrace();<br />         } finally {<br />         if (session != null) {<br />             session.close();<br />         }<br />     }<br />     return users;<br /> }</span></p> <p><br /> <span style="color: #0000ff">    /**<br />      * 获取用户总记录数<br />      * @return 用户总记录数<br />      */<br />     public int getCount(){<br />         String hql ="select count(id) from User";<br />         Session session = null;<br />         int count =0;<br />         try {<br />             session = this.getSession();<br />             Query query = session.createQuery(hql);<br />             List list = query.list();<br />             session.flush();<br />             count = Integer.parseInt(list.get(0).toString());<br />         } catch (Exception e) {<br />             e.printStackTrace();<br />         } finally{<br />         session.close();<br />         }<br />         return count;<br />     }</span></p> <p><span style="color: #0000ff">}<br /> </span></p> <img src ="http://www.aygfsteel.com/1504/aggbug/283499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/1504/" target="_blank">weesun一c阳?/a> 2009-06-22 09:38 <a href="http://www.aygfsteel.com/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.aygfsteel.com/1504/archive/2009/06/18/283069.html</link><dc:creator>weesun一c阳?/dc:creator><author>weesun一c阳?/author><pubDate>Thu, 18 Jun 2009 08:10:00 GMT</pubDate><guid>http://www.aygfsteel.com/1504/archive/2009/06/18/283069.html</guid><wfw:comment>http://www.aygfsteel.com/1504/comments/283069.html</wfw:comment><comments>http://www.aygfsteel.com/1504/archive/2009/06/18/283069.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/1504/comments/commentRss/283069.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/1504/services/trackbacks/283069.html</trackback:ping><description><![CDATA[<span style="color: #ff0000"><strong>声明:此源代码来自|友Q目的是为初学者提供一个实?<br /> <a title="struts2自定义调用方法实? href="/Files/1504/myStruts2.rar">struts2自定义调用方法实?/a></strong></span> <img src ="http://www.aygfsteel.com/1504/aggbug/283069.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/1504/" target="_blank">weesun一c阳?/a> 2009-06-18 16:10 <a href="http://www.aygfsteel.com/1504/archive/2009/06/18/283069.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java实现一个读取Properties配置文g的实现类 【收藏?/title><link>http://www.aygfsteel.com/1504/archive/2009/06/08/280593.html</link><dc:creator>weesun一c阳?/dc:creator><author>weesun一c阳?/author><pubDate>Mon, 08 Jun 2009 04:04:00 GMT</pubDate><guid>http://www.aygfsteel.com/1504/archive/2009/06/08/280593.html</guid><wfw:comment>http://www.aygfsteel.com/1504/comments/280593.html</wfw:comment><comments>http://www.aygfsteel.com/1504/archive/2009/06/08/280593.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/1504/comments/commentRss/280593.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/1504/services/trackbacks/280593.html</trackback:ping><description><![CDATA[     摘要: 收藏自:http://www.aygfsteel.com/xmatthew/archive/2008/04/13/192534.html 针对于JDK本n提供的Propertiesc,增加了以下功能:  * 提供指定文g的读写编码支?Properties使用的编码与当前操作pȝ有关。一般ؓ unicode  * 支持Properties变量的用。如?a=123 \n ...  <a href='http://www.aygfsteel.com/1504/archive/2009/06/08/280593.html'>阅读全文</a><img src ="http://www.aygfsteel.com/1504/aggbug/280593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/1504/" target="_blank">weesun一c阳?/a> 2009-06-08 12:04 <a href="http://www.aygfsteel.com/1504/archive/2009/06/08/280593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA-用HttpClient来模拟浏览器GET,POST [转]http://www.aygfsteel.com/1504/archive/2009/05/16/271057.htmlweesun一c阳?/dc:creator>weesun一c阳?/author>Sat, 16 May 2009 14:31:00 GMThttp://www.aygfsteel.com/1504/archive/2009/05/16/271057.htmlhttp://www.aygfsteel.com/1504/comments/271057.htmlhttp://www.aygfsteel.com/1504/archive/2009/05/16/271057.html#Feedback0http://www.aygfsteel.com/1504/comments/commentRss/271057.htmlhttp://www.aygfsteel.com/1504/services/trackbacks/271057.html阅读全文

]]>
վ֩ģ壺 ֯| ˿| | ۽| »| Dz| | | ɳƺ| ٹ| Դ| | ԣ| | | | | | ̨| | ݳ| | | | հ| Ͷ| | ·| | »| Զ| | | | ƽ| ϳ| Դ| ʡ| | | |