寧毅網絡工作室

          寧毅網絡工作室提供專業的網站設計維護制作服務

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            18 隨筆 :: 93 文章 :: 28 評論 :: 0 Trackbacks

          測試環境為 jdk1.2.2 jswdk-1.0 winnt4.0中文版。

          1。java是大小寫敏感的,用過其他編程語言的人最容易犯這個錯誤,尤其是剛上手的時候。我剛開始調試jsp的時50%以上的編譯錯誤是都是因為這個。

          2。java的調用過程都是要加括號的,一開始比較容易忽視,如title=request.getParameter("title").trim();

          3。jsp中對應asp中的request.form()和request.querystring()的解決方法。
          jsp 中取得參數沒有form和queryString之分,都是通過request.getParameter("XXXX")來取得。雖然jsp也有 request.getQueryString()方法,但測試結果是 test.jsp?id=1&page=20 得到 id=1&page=20。
          如果url和form有相同的參數名稱呢?下面是一段測試代碼:
          <form method="POST" action="query.jsp?id=2">
          <input type="text" name="id" value="1" size="60">
          </form>
          name都是id,結果是url的參數優先得到,jsp的這種處理方式和asp相比我覺的各有所長。

          4。頭疼的漢字處理問題。
          在其他的文章里曾說到在中文NT環境下如下語句輸出會得到亂碼,
          <%="你好"%> 及 out.print("你好");等。解決方法是只要對字符串變量進行編碼就可以得到正確結果,如下代碼可以得到正確的輸出:
          <% String title="你好";
          byte[] tmpbyte=title.getBytes("ISO8859_1");
          title=new String(tmpbyte);
          out.print(title); %>
          或者<%=title%>

          關于sql語句漢字問題,例句為 select * from test where title='誰是傻瓜'
          在jdbc-odbc驅動下連db2,不管是原句還是對sql語句進行編碼后都死活通不過。
          換了ibm的jdbc直接驅動后,對sql語句編碼后程序可以通過。

          這個問題的產生大概是中文NT的原因,在其他環境下可能就沒漢字處理問題了,據說ibm的web sphere對中文支持的很好,這也給jsp的開發帶來一定的通用性問題。據說對字符串編碼是一種通用的解決方法,不過沒有這么多環境來測試。

          5。在asp中經常使用到字符串判斷語句如 if state="真是傻瓜" then.....
          在java中String變量不是一個簡單的變量而是一個類實例,不同的方法會得到不同的結果
          a.
          String str1="我是傻瓜";
          String str2="我是傻瓜"; (or String str2="我是"+"傻瓜"; )
          if (str1==str2)
          out.print("yes");
          else
          out.print("no");
          結果是"yes"。
          大概是編譯優化,str1,str2指向同一個類實例;

          b.
          String str1,str2,str3;
          str1="我是傻瓜";
          str2="我是";
          str3=str2+"傻瓜";
          if (str1==str3)
          out.print("yes");
          else
          out.print("no");
          結果是"no"。

          String str1=new String("我是傻瓜");
          String str2=new String("我是傻瓜");
          if (str1==str2)
          out.print("yes");
          else
          out.print("no");
          結果是"no"。

          String str1=new String("我是傻瓜");
          String str2=new String("我是傻瓜");
          if (str1.compareTo(str2)==0)
          out.print("yes");
          else
          out.print("no");
          結果是"yes"。

          所以在jsp中判斷字符串要使用compareTo方法,用慣傳統語言還真一下子適應不過來,熟悉java的朋友應該沒這個問題。

          6。如何判斷數據庫為空?
          result = stmt.executeQuery(sql);
          if (result.next())
          ......
          result執行后游標出于一個未明的狀態,不能進行狀態判斷,也不能取值,一定要next()一下才可以用。


          7。在jsp中實現分頁。
          page是關鍵字,不能當變量。
          conn.jsp
          <%
          String sDBDriver = "COM.ibm.db2.jdbc.app.DB2Driver";
          String sConnStr = "jdbc:db2:faq";
          Connection conn = null;
          Statement stmt = null;
          ResultSet rs=null;
          try {
          Class.forName(sDBDriver);
          }
          catch(java.lang.ClassNotFoundException e) {
          out.print("faq(): " + e.getMessage());
          }

          try{
          conn = DriverManager.getConnection(sConnStr,"wsdemo","wsdemo1");
          stmt = conn.createStatement();
          }catch(SQLException e){
          out.print(e.toString());
          }
          %>

          query.jsp

          <%@ page language="java" import="java.sql.*" %>
          <%@ page contentType="text/html; charset=gb2312" %>
          <%@ include file="conn.jsp" %>
          <%
          .......
          int pages=0;
          int pagesize=10;
          ResultSet result = null;
          ResultSet rcount = null;

          pages = new Integer(request.getParameter("pages")).intValue();

          if (pages>0)
          {

          String sql=" state='我不傻'";
          int count=0;
          try {
          rcount = stmt.executeQuery("SELECT count(id) as id from user where "+sql);

          catch(SQLException ex) {
          out.print("aq.executeQuery: " + ex.getMessage());
          }
          if(rcount.next())
          count = rcount.getInt("id");
          rcount.close();

          if (count>0)
          {
          sql="select * from user where "+sql;
          try {
          result = stmt.executeQuery(sql);
          }
          catch(SQLException ex) {
          out.print("aq.executeQuery: " + ex.getMessage());
          }

          int i;
          String name;
          // result.first();
          // result.absolute((pages-1)*pagesize);
          // 此方法jdbc2.0支持。編譯通過,但執行不過,不知是不是跟驅動有關,只好用下面的笨辦法。
          for(i=1;i<=(pages-1)*pagesize;i++)
          result.next();
          for(i=1;i<=pagesize;i++) {
          if (result.next()) {
          name=result.getString("name");
          out.print(name);
          }
          result.close();
          int n= (int)(count/pagesize);
          if (n*pagesize<count) n++;
          if (n>1)
          {
          for(i=1;i<=n;i++)
          out.print("<a href=query.jsp?pages="+i+">"+i+"&nbsp;</a>");
          }
          }
          }
          %>

          (轉載文章請保留出處:北天JAVA技術網(www.java114.com))
          posted on 2007-01-16 10:16 寧毅網絡工作室 閱讀(152) 評論(0)  編輯  收藏 所屬分類: Java技術備藏
          主站蜘蛛池模板: 潜江市| 林西县| 万全县| 扶沟县| 饶河县| 嘉黎县| 盘锦市| 武功县| 新营市| 渑池县| 女性| 老河口市| 江口县| 泸州市| 郸城县| 三明市| 乌兰察布市| 左云县| 黄大仙区| 陵川县| 炉霍县| 邵阳市| 饶河县| 宣汉县| 安达市| 泸定县| 灵石县| 吴川市| 汉阴县| 淄博市| 台湾省| 吉林省| 桐柏县| 阳朔县| 密山市| 怀来县| 天台县| 宜兴市| 桐城市| 新巴尔虎左旗| 黄冈市|