<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    lizongbo 的 編程學習

    http://618119.com

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      23 Posts :: 1 Stories :: 78 Comments :: 0 Trackbacks

    #

    1.首先擴展一個IQ:
    源代碼來自:
    java代碼為:
    http://cvs.codehaus.org/viewrep/groovy/groovy/modules/xmlrpc/src/main...

    import org.jivesoftware.smack.packet.IQ;

    /**
    ?* @author John Wilson
    ?*
    ?*/

    public class JabberRPC extends IQ {

    ? ? ? ? private final String xml;

    ? ? ? ? public JabberRPC(final String xml) {
    ? ? ? ? ? ? ? ? this.xml = "<query xmlns='jabber:iq:rpc'>\n" + xml + "\n</query>";
    ? ? ? ? }

    ? ? ? ? public String getChildElementXML() {
    ? ? ? ? ? ? ? ? return this.xml;
    ? ? ? ? }

    }

    2.擴展一個IQProvider.
    源代碼來自:
    http://cvs.codehaus.org/viewrep/groovy/groovy/modules/xmlrpc/src/main...
    java代碼為:
    import org.jivesoftware.smack.packet.IQ;
    import org.jivesoftware.smack.provider.IQProvider;
    import org.jivesoftware.smack.util.StringUtils;
    import org.xmlpull.v1.XmlPullParser;

    /**
    ?* @author John Wilson
    ?*
    ?*/

    public class JabberRPCProvider implements IQProvider {

    ? ? ? ? public IQ parseIQ(final XmlPullParser parser) throws Exception {
    ? ? ? ? ? ? ? ? final StringBuffer buffer = new StringBuffer();

    ? ? ? ? ? ? ? ? // skip the <query> tag by calling parser.next()
    ? ? ? ? ? ? ? ? while (true) {
    ? ? ? ? ? ? ? ? ? ? ? ? switch (parser.next()) {
    ? ? ? ? ? ? ? ? ? ? ? ? case XmlPullParser.TEXT:
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // We need to escape characters like & and <
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? buffer.append(StringUtils.escapeForXML(parser.getText()));
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

    ? ? ? ? ? ? ? ? ? ? ? ? case XmlPullParser.START_TAG:
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? buffer.append('<' + parser.getName() + '>');
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

    ? ? ? ? ? ? ? ? ? ? ? ? case XmlPullParser.END_TAG:
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if ("query".equals(parser.getName())) {
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // don't save the </query> end tag
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return new JabberRPC(buffer.toString().trim());
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } else {
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? buffer.append("</" + parser.getName() + '>');
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
    ? ? ? ? ? ? ? ? ? ? ? ? default:
    ? ? ? ? ? ? ? ? ? ? ? ? }
    ? ? ? ? ? ? ? ? }
    ? ? ? ? }

    }

    3.在smack中注冊IQProvider .
    java代碼為:
    org.jivesoftware.smack.provider.ProviderManager.addIQProvider("query",
    "jabber:iq:rpc", new JabberRPCProvider());

    4.smack客戶端例子:

    try {
    ? ? ? ? ? ? ? ? ? ? ? ? XMPPConnection con = new XMPPConnection("127.0.0.1", 5222);
    ? ? ? ? ? ? ? ? ? ? ? ? con.login("username", "password");
    ? ? ? ? ? ? ? ? ? ? ? ? //注冊IQProvider
    ? ? ? ? ? ? ? ? ? ? ? ? org.jivesoftware.smack.provider.ProviderManager.addIQProvider(
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "query", "jabber:iq:rpc", new JabberRPCProvider());
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 監聽所有的包
    ? ? ? ? ? ? ? ? ? ? ? ? con.addPacketListener(new PacketListener() {
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? public void processPacket(Packet packet) {
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (packet instanceof org.jivesoftware.smack.packet.IQ) {
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? org.jivesoftware.smack.packet.IQ iq =
    (org.jivesoftware.smack.packet.IQ) packet;
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("rpc內容為 " + iq.getChildElementXML());
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

    ? ? ? ? ? ? ? ? ? ? ? ? }, new org.jivesoftware.smack.filter.PacketFilter() {
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? public boolean accept(Packet arg0) {
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return true;
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

    ? ? ? ? ? ? ? ? ? ? ? ? });
    ? ? ? ? ? ? ? ? ? ? ? ? con.createChat("xmlrpc.lizongbo.im").sendMessage("測試發送!");
    ? ? ? ? ? ? ? ? ? ? ? ? JabberRPC jp = new JabberRPC("xmlrpc");
    ? ? ? ? ? ? ? ? ? ? ? ? jp.setType(org.jivesoftware.smack.packet.IQ.Type.SET);
    ? ? ? ? ? ? ? ? ? ? ? ? jp.setTo("xmlrpc.lizongbo.im");
    ? ? ? ? ? ? ? ? ? ? ? ? con.sendPacket(jp);
    ? ? ? ? ? ? ? ? ? ? ? ? Thread.sleep(25000);
    ? ? ? ? ? ? ? ? ? ? ? ? con.close();
    ? ? ? ? ? ? ? ? } catch (Exception e) {
    ? ? ? ? ? ? ? ? ? ? ? ? e.printStackTrace();
    ? ? ? ? ? ? ? ? }

    5.服務端回應一個xmlrpc包:
    wildfire中通過插件進行響應:
    public void processPacket(Packet p) {
    ? ? ? ? ? ? ? ? if (p instanceof IQ) {
    ? ? ? ? ? ? ? ? ? ? ? ? IQ iq =(IQ)p;
    ? ? ? ? ? ? ? ? ? ? ? ? IQ niq=IQ.createResultIQ(iq);
    ? ? ? ? ? ? ? ? ? ? ? ? ? Element responseElement=niq.setChildElement("query",
    "jabber:iq:rpc");
    ? ? ? ? ? ? ? ? ? ? ? ? try {
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? java.util.Vector v=new ?java.util.Vector();
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? v.add("lizongbo ?xmpp");
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? v.add("jabber-rpc lizongbo");
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? v.add("xep-0009 lizongbo");
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? XmlRpcResponseProcessor xrrp=new XmlRpcResponseProcessor();
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String rs= new String( xrrp.encodeResponse(v, "UTF-8"));
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? org.dom4j.Document re=org.dom4j.DocumentHelper.parseText(rs);
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? responseElement.add(re.getRootElement());
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? componentManager.sendPacket(this, niq);
    ? ? ? ? ? ? ? ? ? ? ? ? } catch (Exception e) {
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? e.printStackTrace();
    ? ? ? ? ? ? ? ? ? ? ? ? }
    ? ? ? ? ? ? ? ? }
    ? ? ? ? }

    6.客戶端輸出結果為:

    rpc內容為 <query xmlns='jabber:iq:rpc'>
    <methodResponse><params><param><value><array><data><value>lizongbo
    xmpp</value><value>jabber-rpc lizongbo</value><value>xep-0009
    lizongbo</value></data></array></value></param></params></methodResponse>
    </query>

    posted @ 2006-12-04 18:16 lizongbo 的編程學習| 編輯 收藏

         摘要: wildfire是支持標準即時通訊協議xmpp的服務端,而linq則是支持xmpp的客戶端,通過wildfire和linq可以將Gtalk,MSN,QQ,在一個客戶端中聯合起來,正文是我的操作步驟,有詳細抓圖過程。  閱讀全文
    posted @ 2006-11-29 10:17 lizongbo 的編程學習| 編輯 收藏

    在javaeye上看到關于sna的一些討論,于是對sna很有好奇心,但是google了半天也沒有搜索到java webapp中關于sna的開源項目。
    于是結合和同學交流之后,動手寫了幾個java文件,通過過濾器對HttpSession的包裝,實現java web應用的sna架構。
    使用 snafilter之后,即使web服務器掛了,只要用戶還能訪問其它web服務器,則可以照常維持session。
    代碼很簡單,但是想到sf上面沒有相關的東西,于是昨晚快睡覺的時候就去申請了一個項目,
    剛才登錄sf的時候,沒想到今天就已經被批準了:)

    我把代碼整理一下之后,就把它傳到sf上來:)

    這個項目的名稱是:snafilter。
    英文簡介是:?snafilter is a J2EE servlet filter which wraped HttpSession to supports share nothing architecture 。
    這句說明是仿照另外一個開源過濾器(http://pjl-comp-filter.sourceforge.net/)改寫的。
    項目的地址是:
    http://sourceforge.net/projects/snafilter

    目前實現的snafilter是,sna會話id基于cookie,使用Memcached Server存放sna信息。
    通過snafilter可以避免session復制的消耗,而且不需要黏性會話的配置,就可以使得多個servlet容器(可以同時包含不同的servlet容器,比如tomcat和resin同時使用)可以結合在一起實現類似failover的效果。
    基本上可以隨時重起tomcat而不影響客戶端用戶:)

    在發布第一個版本之后,打算再加入其它的一些特性,歡迎大家交流意見。
    ps1:我不太會使用sf的一些功能,歡迎大家分享經驗。
    ps2:前段時間向tomcat反映的一個小意見,被新版本的tomcat采納了,很開心:)
    http://tomcat.apache.org/tomcat-5.5-doc/changelog.html
    39674: Support JRockit JVM in service.bat script, as suggested by lizongbo. (yoavs)
    http://issues.apache.org/bugzilla/show_bug.cgi?id=39674

    現在深刻體會到我的英語真爛,以后得多鍛煉英語了:)

    posted @ 2006-10-26 00:54 lizongbo 的編程學習| 編輯 收藏

         摘要: 當在同一個網頁里引入10多個js文件之后,
    各js中的同名函數就很容易沖突了。
    比如xxx庫里寫了個addCssStyle方法,
    yyy類庫里也寫了個addCssStyle方法,
    而這兩個方法的具體實現又有一定差別。
    那么同時引用這兩個組件的時候,函數沖突之后導致頁面效果發生變化,
    調試和修改都是非常痛苦的,如果為了避免沖突,
    而放棄引用一些優秀的組件,那更是讓人郁悶的事情。

    為此,在封裝javascript組件庫的時候,請使用命名空間來避免沖突。
    將所有的方法和變量都要按包名類名的方式來寫。
    (這個時候寫代碼的感覺和封裝java的util方法一樣方便,呵呵) (詳細示例代碼見文章具體內容)  閱讀全文
    posted @ 2006-06-19 15:39 lizongbo 的編程學習| 編輯 收藏

    ?? Spring BeanDoc 使用

    ?? Spring BeanDoc 是一個根據spring的bean配置文件生成文檔的工具。

    1.下載:
    spring-beandoc-0.7.0:
    http://opensource.atlassian.com/confluence/spring/download/attachments/993/spring-beandoc-0.7.0.tgz?version=1

    參考: http://opensource.atlassian.com/confluence/spring/display/BDOC/Home
    graphviz-2.8:

    http://www.graphviz.org/pub/graphviz/ARCHIVE/graphviz-2.8.exe
    參考: http://www.graphviz.org/Download_windows.php
    apache-ant-1.6.5:
    http://www.eu.apache.org/dist/ant/binaries/apache-ant-1.6.5-bin.zip

    2.安裝,解壓spring-beandoc-0.7.0.tgz和apache-ant-1.6.5-bin.zip到d:/Java/
    設置環境變量:
    ANT_HOME=D:\java\apache-ant-1.6.5
    Path=D:\jdk1.5.0_06\bin;D:\java\apache-ant-1.6.5\bin;........
    運行graphviz-2.8.exe,安裝到D:\Programs\ATT。

    3.到D:\java\spring-beandoc-0.7.0\src\org\springframework\beandoc\output\i18n下
    增加中文資源文件labels_zh.properties ,然后對照翻譯,
    #-----------------------------------------
    # @since 1.0

    i18n-generated=beandoc \u751F\u6210\u4E86
    i18n-filelist=files making up this application context
    i18n-description=\u63CF\u8FF0
    i18n-attributes=\u5C5E\u6027
    i18n-constructorargs=\u6784\u9020\u53C2\u6570
    i18n-allTitle=\u6240\u6709 Beans
    i18n-summaryTitle=beans\u6458\u8981
    i18n-detailTitle=beans\u8BE6\u60C5
    i18n-innerbean=\u533F\u540D\u5185\u90E8bean
    i18n-home=\u9996\u9875
    i18n-summary=\u6458\u8981
    i18n-detail=\u8BE6\u60C5
    i18n-abstractbean=\u62BD\u8C61 bean
    i18n-deps=\u4F9D\u8D56, \u5C5E\u6027\u503C \u548C \u65B9\u6CD5 \u6CE8\u5165
    i18n-backtotop=\u9000\u56DE\u5230\u9876\u90E8
    i18n-name=\u540D\u5B57
    i18n-bean=bean
    i18n-argtypes=\u53C2\u6570\u7C7B\u578B

    #-----------------------------------------

    再到D:\java\spring-beandoc-0.7.0\下運行build.bat。

    4.到D:\java\spring-beandoc-0.7.0\samples\
    編輯beandoc.properties,

    第50行改為:i18n.locale=zh
    第60行改為:compiler.dotExe=d:/Programs/ATT/GraphViz/bin/dot.exe

    5.清空 D:\java\spring-beandoc-0.7.0\samples\jpetstore和 D:\java\spring-beandoc-0.7.0\samples\petclinic,復制spring配置文件
    到D:\java\spring-beandoc-0.7.0\samples\jpetstore

    6.然后運行D:\java\spring-beandoc-0.7.0\samples\runbeandoc-cli.bat
    需要帶參數:
    D:\java\SPRING~1.0\samples>runbeandoc-cli.bat beandoc.properties

    7.然后打開D:\java\spring-beandoc-0.7.0\target\sample-output\index.html.
    就可以看到生成好的文檔了。

    posted @ 2006-06-13 22:50 lizongbo 的編程學習| 編輯 收藏

    由于項目中有需求要一個blog功能,在大致看了下dlog4j和roller之后。

    通過使用blogjava和codelphi的blog的體會。
    參考的.text的樣子,決定照虎畫貓自己寫一個。
    目前已經完成大部分功能。

    通過http://222.66.24.243/webblog/debug/init.jsp這個地址自動登錄,然后進行blog管理。

    http://222.66.24.243/webblog/u/demouser 察看效果。

    前臺界面使用了jstl和oscache標簽。開發時間大約一個星期
    后臺界面,采用的ajax的方式。開發時間大約兩個星期。
    頁面風格樣式主題照搬的codelphi的blog。

    由于現在數據量小,現在執行一個頁面的時間大約是200毫秒,在oscache緩存之后是20毫秒。
    暫時還推斷不了數據量大了之后會不會出現csdn和donews那樣的性能問題。
    由于對頁面緩存的時間是一個小時,只在回復文章的時候做了即時刷新緩存。
    因此其它地方的修改,需要過段時間才能夠看到效果。


    歡迎大家幫忙測試,并歡迎在此發表意見。





    posted @ 2006-05-10 10:16 lizongbo 的編程學習| 編輯 收藏

         摘要: 受 charon@xxx 的回復的提示,結合myeclipse生成 pojo的思路,對我的代碼生成器進行改進,作以下處理。
    謝謝 charon@xxx 。  閱讀全文
    posted @ 2006-04-26 14:08 lizongbo 的編程學習| 編輯 收藏

         摘要: 在此寫一下我自己的代碼生成器的設計和一點體會。
      閱讀全文
    posted @ 2006-04-25 22:47 lizongbo 的編程學習| 編輯 收藏

    很奇怪,很多人都說proxool很好,
    但是搜索spring中配置proxool作 數據源連接池的資料卻幾乎找不到詳細點的。

    因此自己整理如下:

    ? 先下載:
    ?
    ? http://surfnet.dl.sourceforge.net/sourceforge/proxool/proxool-0.9.0RC2.zip


    ? web.xml

    -------------------------


    ? <servlet>
    ??? <servlet-name>proxoolServletConfigurator</servlet-name>
    ??? <servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
    ??? <init-param>
    ????? <param-name>xmlFile</param-name>
    ????? <param-value>WEB-INF/proxool.xml</param-value>
    ??? </init-param>
    ??? <load-on-startup>1</load-on-startup>
    ? </servlet>
    ? <servlet>
    ??? <servlet-name>proxooladmin</servlet-name>
    ??? <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
    ? </servlet>
    ? <servlet-mapping>
    ??? <servlet-name>proxooladmin</servlet-name>
    ??? <url-pattern>/proxooladmin</url-pattern>
    ? </servlet-mapping>


    -------------------------

    ? proxool.xml

    -------------------------
    <?xml version="1.0" encoding="UTF-8"?>
    <proxool-config>
    ? <proxool>
    ??? <alias>blogdb</alias>
    ??? <driver-url>jdbc:oracle:thin:@127.0.0.1:1521:ORADB</driver-url>
    ??? <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    ??? <driver-properties>
    ????? <property name="user" value="lizongbo"/>
    ????? <property name="password" value="password"/>
    ??? </driver-properties>
    ??? <maximum-connection-count>10</maximum-connection-count>
    ??? <house-keeping-test-sql>select 1 from dual</house-keeping-test-sql>
    ? </proxool>
    </proxool-config>

    spring里:
    兩種配置:
    a:? <!-- 與上面的proxool以及web.xml里結合使用-->
    ??? <bean id="mainDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    ??? <property name="driverClassName">
    ??? <value>org.logicalcobwebs.proxool.ProxoolDriver</value>
    ??? </property>
    ??? <property name="url">
    ??? <value>proxool.blogdb</value>
    ??? </property>
    ??? </bean>

    b:<!-- 單獨的類似dbcp的使用-->
    ? <bean id="mainDataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource" destroy-method="close">
    ??? <property name="driver">
    ????? <value>oracle.jdbc.driver.OracleDriver</value>
    ??? </property>
    ??? <property name="driverUrl">
    ????? <value>jdbc:oracle:thin:lizongbo/password@127.0.0.1:1521:ORADB</value>????
    ?<!--用戶名和密碼寫在一起才調用成功,不然會報 調用無效的參數 錯誤,下面設置用戶名和密碼的property好像是無效的,其它數據庫也是這樣
    ?比如mysql的也要把用戶名和密碼寫在url里:<property name="driverUrl" value="jdbc:mysql://localhost:3306/blogdb?user=lizongbo&amp;password=lizongbo" />
    ?-->
    ??? </property>
    ??? <property name="user"> <!-- 必須在這里也設置,但是 proxool卻不使用它,或許是個bug-->
    ????? <value>lizongbo</value>
    ??? </property>
    ??? <property name="password"> <!-- 必須在這里也設置,但是 proxool卻不使用它,或許是個bug-->
    ????? <value>lizongbo</value>
    ??? </property>
    ??? <property name="alias">
    ????? <value>lizongbo</value>
    ??? </property>
    ??? <property name="houseKeepingSleepTime">
    ????? <value>90000</value>
    ??? </property>
    ??? <property name="prototypeCount">
    ????? <value>5</value>
    ??? </property>
    ??? <property name="maximumConnectionCount">
    ????? <value>100</value>
    ??? </property>
    ??? <property name="minimumConnectionCount">
    ????? <value>10</value>
    ??? </property>
    ??? <property name="trace">
    ????? <value>true</value>
    ??? </property>
    ??? <property name="verbose">
    ????? <value>true</value>
    ??? </property>
    ? </bean>


    ???
    posted @ 2006-04-07 14:17 lizongbo 的編程學習| 編輯 收藏

    有同事討論到關于url編碼的問題。
    因此總結以下幾點方法供大家參考。
    首先,對于post請求的時候,通過過濾器就可以搞定,以下的方法主要是針對get方式的亂碼處理。

    1. 手工對字符串編碼解碼的方法為:
    java.net.URLEncoder.encode("測試","UTF-8");
    java.net.URLDecoder.decode("%E6%B5%8B%E8%AF%95%26%3Faaa","UTF-8");
    這個方法適用于自己從原始字符串中進行解碼處理。

    2. tomcat服務器的處理url編碼的方法:

    修改tomcat的server.xml增加指定的編碼,以代替tomcat默認的ISO-8859-1。
    需要增加的參數為:URIEncoding,
    比如下面的例子是制定解碼使用UTF-8,
    <Connector port="8080"
    maxThreads="800" minSpareThreads="25" maxSpareThreads="100"
    enableLookups="false" redirectPort="8443" acceptCount="0"
    debug="0" connectionTimeout="20000" URIEncoding="UTF-8"
    disableUploadTimeout="true" />
    如果用到了apache與tomcat 的整合,則還需要:
    <Connector port="8009" URIEncoding="UTF-8"
    enableLookups="false" redirectPort="8443" debug="0"
    protocol="AJP/1.3" maxThreads="1100" minSpareThreads="25" maxSpareThreads="100" acceptCount="0"/>
    (這個方法最簡單方便,但是使用這種的方法之后,代碼中就不需要也能有new String(strvalue.getBytes("ISO8859-1","GBK"); 這樣的處理方式)

    3.對于已經部署的系統,可能已經有其他同事對編碼使用了
    new String(strvalue.getBytes("ISO8859-1","GBK");
    這樣的方法作了處理,這個時候使用第二種方法就可能會影響到其它模塊的正常使用,

    因此,我們可以自己重新解析queryString我封裝了幾個方法。使用重新封裝的方法可以在不影響原來系統的情況下,正確的獲得參數。

    封裝的代碼如下,供大家參考:



    /**
    * 從請求的url字符串中解析參數,當request.getParameterValues()取得的參數值編碼值不正確的時候可以使用該方法
    * @param request HttpServletRequest
    * @param paramName String
    * @return String[] 返回多個同參數名的值
    */
    public static String[] getParamsFromQueryString(HttpServletRequest request,
    String paramName) {
    return getParamsFromQueryString(request.getQueryString(), paramName);
    }

    /**
    * 從請求的url字符串中解析參數,當request.getParameterValues()取得的參數值編碼值不正確的時候可以使用該方法
    * @param request HttpServletRequest
    * @param paramName String
    * @return String[]
    */
    public static String getParameterFromQueryString(HttpServletRequest request,
    String paramName) {
    return getParameterFromQueryString(request.getQueryString(), paramName);
    }

    /**
    * 從請求的url字符串中解析參數,當request.getParameter()取得的參數值編碼值不正確的時候可以使用該方法
    * @param queryString String
    * @param paramName String
    * @return String 只返回一個值
    */
    public static String getParameterFromQueryString(String queryString,
    String paramName) {
    String[] s = getParamsFromQueryString(queryString, paramName);
    if (s != null && s.length >= 1) {
    return s[0];
    }
    return null;
    }

    /**
    * 從請求的url字符串中解析參數,當request.getParameter()取得的參數值編碼值不正確的時候可以使用該方法
    * @param queryString String
    * @param paramName String
    * @return String[] 返回多個同參數名的值
    */
    public static String[] getParamsFromQueryString(String queryString,
    String paramName) {
    if (paramName == null || paramName.length() < 1 || paramName == null ||
    paramName.length() < 1) {
    return new String[0];
    }
    List rsl = new ArrayList();
    String params[] = queryString.split("&");
    for (int i = 0; i < params.length; i++) {
    // System.out.println(params[i]);
    if (params[i] != null && params[i].startsWith(paramName + "=")) {
    try {
    rsl.add(java.net.URLDecoder.decode(params[i].substring(paramName.
    length() +
    1), "UTF-8")); //根據需要修改自己要使用的編碼。
    }
    catch (UnsupportedEncodingException ex) {
    }
    }
    }
    return (String[]) rsl.toArray(new String[0]);
    }

    public static void main(String[] args) {
    //該例子演示解碼。
    //jsp和servlet中調用
    // System.out.println(getParameterFromQueryString(request.getQueryString(), "q"));
    //該例子示意的是gogole的url中的queryString。
    System.out.println(getParameterFromQueryString(
    "hl=zh-CN&newwindow=1&q=%E6%B5%8B%E8%AF%95%26%3Faaa&meta=", "q"));
    }


    posted @ 2006-04-07 14:10 lizongbo 的編程學習| 編輯 收藏

    僅列出標題
    共3頁: 上一頁 1 2 3 下一頁 
    主站蜘蛛池模板: 亚洲av无码专区在线观看亚| 色妞www精品视频免费看| 亚洲三区在线观看无套内射| 最近中文字幕无免费视频| 亚洲第一第二第三第四第五第六 | 久久久久亚洲精品天堂久久久久久| 亚洲免费闲人蜜桃| 亚洲日本成本人观看| 亚洲av日韩综合一区在线观看| 亚洲国产精品狼友中文久久久| 岛国av无码免费无禁网站| 亚洲av成人中文无码专区| 亚洲精品美女视频| 亚洲AV无码成人网站久久精品大| 亚洲美女在线国产| 95老司机免费福利| 亚洲日本天堂在线| 日韩亚洲产在线观看| 亚洲AV网站在线观看| 久久嫩草影院免费看夜色| 午夜在线亚洲男人午在线| 亚洲精品9999久久久久无码 | 2019中文字幕在线电影免费| 亚洲国产成人久久精品大牛影视| 亚洲一区二区免费视频| 91亚洲国产成人久久精品网站 | 久久久久国产精品免费免费不卡| 国产成人精品日本亚洲网址| 亚洲日韩中文字幕在线播放| 久久久久亚洲av成人无码电影| 免费在线观看你懂的| 99精品视频在线免费观看| 一区二区在线免费观看| 久久亚洲免费视频| 91精品国产免费入口| 8888四色奇米在线观看免费看| 97在线视频免费播放| 免费视频爱爱太爽了| 成年女人午夜毛片免费视频| 午夜毛片不卡免费观看视频| 国产男女猛烈无遮档免费视频网站 |