棲息地

          家園

          2010年6月11日 #

          解決Jsp頁面URL中傳遞參數(shù)亂碼的方法

          Jsp頁面在URL中傳遞參數(shù)會出現(xiàn)亂碼可以采用以下方法解決:一、使用更改Tomcat的方法。二、使用JSP的scriptLet view plaincopy to clipboardprint?三、使用自定義JSTL。

          Jsp頁面在URL中傳遞參數(shù)會出現(xiàn)亂碼

          解決方法如下:

          一、使用更改Tomcat的方法。這個(gè)方法簡單,但是需要改動的地方是服務(wù)器軟件級別的,如果稍微變動系統(tǒng)將無法正確轉(zhuǎn)碼,移植性不高。

          1、來到tomcat目錄,找到conf目錄下的server.xml問價(jià),打開,找到<Connector>標(biāo)簽,在最后添加URIEncoding=’GBK’,效果如下:

          view plaincopy to clipboardprint?

          <Connector

          port="8080"maxThreads="150"minSpareThreads="25"maxSpareThreads="75"

          enableLookups="false"redirectPort="8443"acceptCount="100"

          debug="0"connectionTimeout="20000"

          disableUploadTimeout="true"URIEncoding=″GBK″/>

          <Connectorport="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" redirectPort="8443" acceptCount="100"debug="0" connectionTimeout="20000"disableUploadTimeout="true" URIEncoding=″GBK″/>

          這種方法對get這個(gè)方法測試成功。

          2、在每個(gè)Jsp頁面添加如下代碼

          view plaincopy to clipboardprint?

          <%@pagepageEncoding=”gb2312″%>

          <%@pagecontentType=”text/html;charset=gb2312″%>

          <%request.setCharacterEncoding(”gb2312″);%>

          <%@ page pageEncoding=”gb2312″%><%@ page contentType=”text/html;charset=gb2312″%><%request.setCharacterEncoding(”gb2312″);%>

          編碼方式也可以改成GBK,支持繁體中文。重啟Tomcat,這一步很重要,否則可能看不到效果。

          這種方法對post測試成功。建議兩種同步使用。

          二、使用JSP的scriptLet

          view plaincopy to clipboardprint?

          <%=newString(elValue.getBytes("iso-8859-1"),"GBK")%>

          <%=new String(elValue.getBytes("iso-8859-1"),"GBK")%>

          三、使用自定義JSTL

          這是我們的重點(diǎn)所在,這里要詳細(xì)說明.

          第一,編寫自定義標(biāo)簽

          第二編寫tag文件

          第三部署tag文件

          第四使用吧;)很簡單的.

          posted @ 2010-07-02 10:34 drecry 閱讀(213) | 評論 (0)編輯 收藏

          (轉(zhuǎn))方法重載與方法覆蓋(重寫)

          方法覆蓋必須滿足下列條件
          (1) 子類的方法的名稱及參數(shù)必須和所覆蓋的方法相同
          (2) 子類的方法返回類型必須和所覆蓋的方法相同
          (3) 子類方法不能縮小所覆蓋方法的訪問權(quán)限
          (4) 子類方法不能拋出比所覆蓋方法更多的異常
          重載方法必須滿足下列條件
          (1) 方法名必須相同
          (2) 方法的參數(shù)簽名必須相同
          (3) 方法的返回類型和方法的修飾符可以不相同
          順便說說方法覆蓋和重載的區(qū)別
          初次見到這兩個(gè)單詞并沒有什么特別的感覺,但是時(shí)間長了,卻發(fā)現(xiàn)書上一會兒用override,一會兒又用overload,搞得我的迷迷糊。于是就做了個(gè)總結(jié),希望能對和我一樣對這兩個(gè)概念模糊不清的網(wǎng)友有一個(gè)幫助。
          override可以翻譯為覆蓋,從字面就可以知道,它是覆蓋了一個(gè)方法并且對其重寫,以求達(dá)到不同的作用。對我們來說最熟悉的覆蓋就是對接口方法的實(shí)現(xiàn),在接口中一般只是對方法進(jìn)行了聲明,而我們在實(shí)現(xiàn)時(shí),就需要實(shí)現(xiàn)接口聲明的所有方法。除了這個(gè)典型的用法以外,我們在繼承中也可能會在子類覆蓋父類中的方法。在覆蓋要注意以下的幾點(diǎn):
          1、覆蓋的方法的標(biāo)志必須要和被覆蓋的方法的標(biāo)志完全匹配,才能達(dá)到覆蓋的效果;
          2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;
          3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類;
          4、被覆蓋的方法不能為private,否則在其子類中只是新定義了一個(gè)方法,并沒有對其進(jìn)行覆蓋。
          overload對我們來說可能比較熟悉,可以翻譯為重載,它是指我們可以定義一些名稱相同的方法,通過定義不同的輸入?yún)?shù)來區(qū)分這些方法,然后再調(diào)用時(shí),VM就會根據(jù)不同的參數(shù)樣式,來選擇合適的方法執(zhí)行。在使用重載要注意以下的幾點(diǎn):
          1、在使用重載時(shí)只能通過不同的參數(shù)樣式。例如,不同的參數(shù)類型,不同的參數(shù)個(gè)數(shù),不同的參數(shù)順序(當(dāng)然,同一方法內(nèi)的幾個(gè)參數(shù)類型必須不一樣,例如可以是fun(int,float),但是不能為fun(int,int));
          2、不能通過訪問權(quán)限、返回類型、拋出的異常進(jìn)行重載;
          3、方法的異常類型和數(shù)目不會對重載造成影響;
          4、對于繼承來說,如果某一方法在父類中是訪問權(quán)限是priavte,那么就不能在子類對其進(jìn)行重載,如果定義的話,也只是定義了一個(gè)新方法,而不會達(dá)到重載的效果。
          下面是對override和overload的測試程序,其中注釋中的內(nèi)容都是會產(chǎn)生編譯錯(cuò)誤的代碼,我們將注釋去掉,看看在編譯時(shí)會產(chǎn)生什么效果。
          //對overload測試的文件:OverloadTest.java
          publicnewOverrideTest1();
          try{
          test.fun();
          test.fun1();
          }catch(Exceptione){}
          }
          }
          classOverrideTest1extendsOverrideTest{
          //以下正常Override
          publicvoidfun()throwsTestException2{
          System.out.println("funinOverrideTest1");
          }
          //不能Override父類中的方法,因?yàn)樗x了不同的異常類型和
          //返回值。
          //publicintfun()throwsTestException1{
          //System.out.println("methodfuninTest");
          //return1;
          //}
          //不能Override父類中的方法,因?yàn)樗鼟伋隽吮雀割愔蟹欠ǚ秶?
          //更大的異常。
          //publicvoidfun()throwsException{
          //System.out.println("funinOverrideTest1");
          //}
          //這個(gè)方法并沒有Override父類中的fun1方法,因?yàn)檫@個(gè)方法在
          //父類是private類型,所以這里只是相當(dāng)于定義了一個(gè)新方法。
          publicvoidfun1(){
          System.out.println("methodfun1inTest");
          }
          }
          classTestExceptionextendsException{
          publicTestException(Stringmsg){
          super(msg);
          }
          }
          classTestException1extendsTestException{
          publicTestException1(Stringmsg){
          super(msg);
          }
          }
          classTestException2extendsTestException{
          publicTestException2(Stringmsg){
          super(msg);
          }
          } 

          參考資料:http://zhidao.baidu.com/question/1996221.html
           

          posted @ 2010-06-11 21:35 drecry 閱讀(453) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 当阳市| 漾濞| 永年县| 盐城市| 西丰县| 大邑县| 金溪县| 普洱| 托克托县| 永胜县| 涿鹿县| 临湘市| 清河县| 台湾省| 托克托县| 颍上县| 扶绥县| 汉阴县| 竹北市| 临洮县| 长子县| 鹿泉市| 都兰县| 改则县| 晴隆县| 老河口市| 连山| 哈密市| 泰和县| 阳泉市| 开江县| 九台市| 永川市| 寿阳县| 苍梧县| 黄骅市| 南通市| 隆回县| 平武县| 泸定县| 沙雅县|