jsp問題集

1. 問:在JAVA與JSP中要調用一個LINUX上的腳本程序,或WINDOWS上的腳本程序,該怎麼寫?
   答:System.getRuntime().exec("bash < aaa.sh");
  2. 問:java中用什麼表示雙引號
   答:"/""
  3. 問:如何在JSP程序裏另起一個線程?
   答:
   JSP本身就是獨立線程運行而不象CGI都是獨立進程.
   一般:
   Thread t = new Thread("你的對象//");
   t.start();就可以了.
   要求你這個對象要實現runnable接口或繼承thread.
  4. 問:jsp如何獲得客戶端的IP地址?
   答:
   request.getRemoteAddr()
   看看各個webserver的API文檔說明,一般都有自帶的,resin和tomcat都有
  5. 問:程序終止與輸出終止
   答:
   程序中止:return;
   輸出中止:out.close();這一句相當於ASP的response.end
  6. 問:jsp中如何得到上頁的URL?
   答:request.getHeader("referer");
  7. 問:提交網頁的網頁過期功能是怎麼做的?
   答:response.setHader("Expires","0");
  8. 問:在JSP網頁中如何知道自已打開的頁面的名稱
   答:
   request.getRequestURI() ;//文件名/r
   request.getRequestURL() ;//全部URL
  9. 問:提交表單後驗證沒有通過,返回提交頁面,如何使原提交頁面中的數據保留?
   答:javascript的go(-1)可以把上頁的表單內容重新顯示出來,但password域沒有
  10. 問:如何取得http的頭信息?
   答:request.getHader(headerName);
  11. 問:&&和&的區別?
   答:
   &&是短路的與操作,也就是當地一個條件是false的時候,第二個條件不用執行
   &相反,兩個條件總是執行。
  12. 問:將*以正弦曲線的一個週期顯示出來
   答:
   public void paint(Graphics g)
   {
   for(int i=0;i<200;i++)
   g.drawString("*",i,(int)(Math.sin(i)*20)+50);
   }
   }
  13. 問:浮點數相乘後結果不精確如100.0 * 0.6 結果等於 60.0004
   答:
   這不叫錯誤,float和double是這樣實現的.如果要精確計算,java提供了一個/r
   strictfp,它的計算遵循IEEE 754標準.而普通的float和double是由地平臺浮點格式或硬件提/r
   供的額外精度或表示範圍。
  14. 問:如何獲得當前用的cursors的位置?
   答:
   int row = rs.getRow()就是當前指針行數,還有
   isFrist();isBeforeFist();isLast();isAfterLast();可以測試是不是在方法名所說的位置
  15. 問:表單成功提交了,點後退顯示網頁過期
   答:
   在<head></head>裏面加以下代碼/r
   <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
   <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
   <META HTTP-EQUIV="Expires" CONTENT="0">
   或者
  在表單頁中加上
   <%
   response.setHeader("Pragma","no-cache");
   response.setHeader("Cache-Control","no-cache");
   response.setDateHeader("Expires",0);
   %>
  16. 問:接口的簡單理解/r
   答:接口爲了規範,比如我在接口中定義了一個方法:
   getData()
   這是用來從不同的數據庫中取數據的,就是JDBC的實現
   對於用戶,我不要知道每種數據庫是如何做的,但我知道如何它們要實現這個接口就一定有這個方法可以供我調/r
   用.這樣SUN就把這個接口給各個數據庫開發商,讓他們自己實現.
   但爲什麼不用繼承而用接口哩,因爲繼承只能從一個你類繼承,而接口可以實現多個,就是說我實現的子類有多/r
   個規定好的接口中的功能.
   這只是簡單的理解,等你深入理解抽象的時候就知道抽象到抽象類時爲什麼還要再抽象到接口.
  17. 問:怎樣編寫一個取消按鈕(怎樣返回上一個頁面,象工具欄的後退按鈕)?
   答:
   javascript把每次瀏覽過的location都壓到了一個棧中,這個棧就是
   history,然後你如果要回到第幾個頁面它就做幾次POP操作,把最後POP出來的那個LOCATION給你.
   這就是javascript在實現history.go(-x)的原理.
  18. 問:什麼是回調?
   答:
   簡單說,回調用不是讓你去監聽誰做完了什麼事,而是誰做完了什麼事就報告給你.
   這就是回調用的思想.例子太多了,AWT的事件,SWING事件模型都是這樣有.
   還有多線程中,如果要控制線程數,不能總是查詢每個線程是否結束,要在每個線程結束時讓線程自己告訴主線
   程我結束了,你可以開新的線程了.
  19. 問:簡要介紹一下compareTo方法
   答:
   compareTo方法是Comparable 接口必需實現的方法,只要實現Comparable 就可以用Arrays.srot()排序就象實
   現Runnable接口的run就能Thread()一樣.
  20. 問:如何可以從別的Web服務器檢索頁, 然後把檢索到的網頁的HTML代碼儲存在一個變量中返回過來
   答:這是一個簡單的WEB ROBOT實現,用URL類實現從網頁中抓內容,然後自己寫一個分析程序從中找出新的URL,不斷遞歸下去就行了.
  21. 問:applet中如何獲得鍵盤的輸入/r
   答:application的System.in是當前系統的標準輸入,applet因爲安全的原因不可能讀取當前系統(客戶端)的標準輸入,只能從它的ROOT組件的事件中,比如鍵盤事件中取得鍵值.
  22. 問:怎樣計算代碼執行所花費的時間?
   答:
   代碼開始取時間,結束後取時間,相減/r
   long t1 = System.currentTimeMillis();
   ///////////////// your code
   long t2 = System.currentTimeMillis() ;
   long time = t2-t1;
  23. 問:如何獲在程序中獲得一個文件的ContentType?
   答:
   URL u = new URL("file:///aaa.txt");
   URLConnection uc = u.openConnection();
   String s = uc.getContentType();
  24. 問:連接池的使用是建立很多連接池,還是一個連接池裏用多個連接?
   答:
   只有在對象源不同的情況下才會發生多個池化,如果你只連一結一個數據源,永遠不要用多個連結池.
   所以連結池的初始化一定要做成靜態的,而且應該在構造對象之前,也就是隻有在類LOAD的時候,別的時候不應該有任何生成新的連結池的時候。
  25. 問:JavaMail要怎麼安裝?
   答:下載兩個包,一個是javamail包,另一個是jaf包。下載完直接把這兩個包不解壓加到CLASSPATH。
  26. 問:怎樣把地址欄裏的地址鎖定?
   答:把你的服務器的可訪問目錄索引選項關閉就行了,任何服務器都有一個conf文件,裏面都有這個選項。
  27. 問:在JAVA中怎麼取得環境變量啊。比如: TEMP = C:/TEMP ?
   答:String sss = System.getProperty(key)。
  28. 問:怎樣實現四捨五入,保留小數點後兩位小數?
   答:
   import java.text.*;
   ...
   NumberFormat nf=NumberFormat.getNumberInstance();
   nf.setMaximumFractionDigits(2);
   nf.setMinimumFractionDigits(2);
   nf.format(numb);
  29. 問:Applet和form如何通信?
   答:
   取得的參數傳到param裏面/r
   <%
   String xxx = request.getParameter("xxx");
   %>
   <applet>
   <param value="<%=xxx%>">
   </applet>
  30. 問:java-plug-in是什麼?
   答:Java Runtime Environment的插件。用來運行java程序。不需要什麼特別的設置。等於你的機器裏面有了jvm。
  31. 問:WEB上面怎麼樣連接上一個EXCEL表格?
   答:
   定義頁面得contentType="application/vnd.ms-excel",讓頁面以excel得形式打開。
   同樣也可以以word得形式打開:application/msword。
  32. 問:怎樣才能避免textarea字數限制?
   答:是使用了FORM的默認方法的緣故,如果什麼也不寫默認是GET改用Post即可,在Form中定義mothod="post"。
  33. 問:爲什麼加了<%@page contentType="text/html;charset=gb2312" %>插入數據庫的中文,依然是亂碼?
   答:
   這要從環境看,能顯示說明你的JSP引擎沒有問題,但寫入數據庫時你的JDBC能不能處理中文,同
   一公司不同版本的JDBC都有支持中文和不支持中文的情況,RESIN自帶的MYSQL JDBC就不支持,MM
   的就支持,還有你的數據庫類型是否支持中文?CHAR的一般支持,但是否用binary存儲雙字節碼/r
  34. 問:對於JFrame,hide(),show()與setVisibel()有什麼區別嗎?
   答:
   setVisible()從Component繼承過來,而hide(),show()從Window裏面繼承過來。
   Makes the Window visible. If the Window and/or its owner are not yet displayable, both are made
   displayable. The Window will be validated prior to being made visible. If the Window is already
   visible, this will bring the Window to the front.
   區別在這。
  36. 問:sendRedirect爲什麼不可以轉到mms協議的地址的?response.sendRedirect("mms://missiah.adsldns.org:9394");
   答:java平臺目前實現的protocol中並沒有mms,你可以取系統屬性java.protocol.handler.pkgs看看它的值中有沒有 mms,所以如果要想重定向到mms://host這樣和URL,只有生成客戶端的javascript讓它來重定向/r
  37. 問:JTable中怎樣定義各個Columns和Width和怎樣設置表格的內容靠做靠右或居中?
   答:
   TableColumn tc = table.getColumn("Name");//取得列名爲“Name”的列Handle
   int currentWidth = tc.getPreferredWidth(); //取得該列當前的寬度
   tc.setPreferredWidth(200); //設置當前列寬/r
   tc.setMaxWidth(200); //設置該列最大寬度
   tc.setMinWidth(50); //設置該列最小寬度
  38. 問:批操作是否可用於select語句?
   答:批操作其實是指成批理更新的操作,絕對不可能用於select操作。
  39. 問:爲什麼jsp路徑太深文件名太長就無法讀取文件?
   答:path不能超過255長度,不然就找不到了.這是作業系統的事。
  40. 問:如何讓頁面不保留緩存?
   答:
   <%
   response.setHeader("Pragma","No-cache");
   response.setHeader("Cache-Control","no-cache");
   response.setDateHeader("Expires", 0);
   %>
  41. 問:我的applet code 中用到jbutton 時就出錯是否由於ie不支持swing package 請問應怎麼辦?
   答:JBUTTON是SWING基本包啊,只要把jdk/jre/lib/rt.jar放在classpath就行了.不要加載任何別的庫。
  42. 問:不知道java是否支持midi格式,如果支持,應該怎麼把wave格式轉換成midi格式?
   答:目前還不行,可以看一下JMF三個版中對MIDI的格式支持是read only,而WAVE是read/write,MIDI只能播放,不能生成。
  43. 問:在jsp裏面防止用戶直接輸入url進去頁面,應該怎麼做呢?
   答:
   一是從web服務器控制,對某一目錄的所有訪問要通過驗證.
   二是在要訪問的頁面中加入控制.這個一般用session,也可以用請求狀態碼實現
  44. 問:
   例如後臺有一計算應用程序(此程序運算起來很慢,可持續幾分鐘到幾小時,這不管,主要是能激活它),客戶機講任務提交後,服務器對任務進行檢測無誤後將向服務器後臺程序發送信息,並將其激活。要求如下:
   1)首先將後臺程序激活,讓它執行此任務(比如,前臺將計算的C代碼提交上後,後臺程序程序能馬上調用,並將其運行)
   2)要在前臺JSP頁面中顯示運行過程信息(由於運行時間長,希望讓客戶看到運行過程中產生的信息)如何完成?
   答:
   活是可以的,運行一個shell讓它去運行後臺就行,但不可能取出運行信息,因爲HTTP的超時限制不可能永遠等你後臺運行的,而且信息如果要動態實時推出來就得用SERVER PUSH技術。
  45. 問:數據庫是datetime 型 ,插入當前時間到數據庫?
   答:
   java.sql.Date sqlDate = new java.sql.Date();
   PreparedStatement pstmt = conn.prepareStatement("insert into foo(time) values(?)");
   pstmt.setDate(1,sqlDate);
   pstmt.executeUpdate();
  46. 問:怎樣去掉字符串前後的空格。
   答:String.trim()。
  47. 問:session怎樣存取int類型的變量?
   答:
   session.setAttribute("int", i+"");
   int i = Integer.parseInt(session.getAttribute("int"));
  48. 問:在javascript中如何使輸出的float類型的數據保留兩位小數。
   答:Math.round(aaaaa*100)/100。
  49. 問:在bean種如何調用session。
   答:
   你可把session對象作爲一個參數傳給bean
   在BEAN中定義HttpServletRequest request;HttpSession session;
   然後
   session = request.getSession(false);
   false爲如果session爲空,不建立新的session
   將session作爲參數傳入.其實只要將request傳入就可以
  50. 問:如何把txt或word文件按原格式顯示在jsp頁面或servlet上?
   答:
   其實一個非常簡單的解決方法就是在服務器的MIME中指點定TEXT和WORD的解釋方式,然後用JSP或SERVLET生成它就行了,客戶端就會自動調用相應程序打開你的文檔。
   如果是希望按原格式的顯示在頁面上,而不是調用其他程序打開那麼你可以試試用WEBDEV協議,可以說這是MS的一個亮點.它是在WEB方式下打開文檔,和共享一樣.完全符合的要求。
  51. 問:object的clone方法爲什麼不能直接調用?
   答:
   這個方法在object中是protected
   爲什麼要把這個方法定義爲protected,這是一個折中,它的目的是想知道你這個方法在Object裏只是一個標記,而不是一個實現,比如/r
   public class Object
   {
   .............
   protected Object clone()
   {}
   }
   所以直接繼承的clone()方法並不能做任何時,你要使用這個方法就要重載這個方法並放寬訪問權限爲public,或實現cloneable接口.
   但它沒法這樣告訴你它沒有真的實現,只好用protected 方法加以警示
  52. 問:一個頁面中如何刷新另外一個頁面?
   答:
   要求是這些面頁必須有關聯,一是它們都有一個共同的頂層幀,也就是說是一個幀內的分級頁面,當然可以是任意級,幀內再分幀也可以,另一個可能是當前窗口彈出的窗口,如果沒有聯繫,那就不可能用一個頁面刷新另一個頁面.
   幀內只要一級一級引用就行了.
   比如在左幀中一個頁面中寫
   top.right.location.reload();那麼名爲right的右幀中的頁面就會刷新.
   彈出的一樣,用open時的名稱刷新子窗口,子窗口用opener刷新主窗口
  53. 問:如何在jsp中怎麼樣向客戶端寫cookies?
   答:
   Cookie coo = new Cookie(name, value);
   HttpServletResponse.addCookie(name);
  54. 問:爲什麼jTextField1.setText("aaabbb");jTextField2.setText("AAABBB"); 得到的字體寬度不一樣?
   答:就是說如果不是指定爲等寬字體,每個字體的寬度都是不一樣的.因此JAVA中用FontMetrics 類來取字符寬度。
  55. 問:String kk=application/octet-stream; name="G:/SMBCrack.exe";如何得到SMBCrack.exe?
   答:
   這應該是解析上傳時候的二進制流得到的
   這一行裏面格式是固定的,取到name="後面的字符串,然後把";去掉。
   然後取最後一個/後面的所有字符組成一個新字符串就行了。
  56. 問:如何傳值並不刷新頁面?
   答:
   彈出一個頁面進行值的選擇或者輸入,ok後使用將值傳給原窗口,使用javascript關閉打開的窗口即可:
   window.close();opener.focus();
  57. 問:有一個字符串:“EF0C114EA4”,如何變爲a[0] = 0xEF a[1] = 0x0C a[2] = 0x11 a[3] = 0x4E a[4] = 0xA4?
   答:
   String str="EF0C114EA4F";
   out.print(str+"<br>");
   int l=str.length()/2+str.length()%2,j=0,k=0;
   String[] a=new String[l];
   for(int i=0;i<l;i++){
   if(str.length()-j==1)
   k=str.length();
   else
   k=j+2;
   a[i]="0x"+str.substring(j,k);
   out.print("a["+Integer.toString(i)+"]="+a[i]+"<br>");
   j+=2;
   }
  58. 問:怎樣將一個int轉換成一個四字節的byte數組?
   答:
   int x = 1234567;
   byte[] b = new byte[4];
   for(int i=0;i<b.length;i++)
   {
   b[i] = (x >>( i*8)) & 0xFF;
   }
  59. 問:indexOf()的使用需要注意什麼?
   答:參數是指從第幾位(1,2,3,...)開始搜索,而返回值是指搜索到的位置(0,1,2,3.......)注意是從零算起的。
  60. 問:在Java應用程序中如何動態的添加一個按鈕?
   答:
   這裏涉及一個組件重繪的問題,組件要先於panel被顯示之處存在,如果一panel已經顯示了,那麼加在上面你能看到嗎?但如果在同一個panel上, 先有button A,假如按下它加了button B,這時你如果使整個panel重給,那麼A本身要重繪,它的事件監聽就沒有了,當然也就加不成B 了,所以如果要先有另一個panel,當按A時把B加在這個panel上並重繪這個paenl,其實更好的方法是先把B加在panel中,同一個也行.把它setVisiable(flase),按A時設爲true。
  61. 問:book mybook=new book(bookid);book是servlet,出錯。
   答:
   book是servlet,能book mybook=new book(bookid);
   說明自己實現了servlet容器?不然,servlet能讓你自己去調用?
   servlet如果調用其實和EJB連1%的區別都沒有,它們都是自己繼承或實現一些接口,在這些父類或接口中實現瞭如果和容器/"打交道"的方法,然後容器調用這些方法來管理它,讓它生成實例,池化,鈍化,銷燬,再生等.所以這樣寫是錯誤的。
  62. 問:給定一個字符串5*(5+9)/7怎樣計算出結果?
   答:
   可有兩種方法
   1。用堆棧完成
   2。最簡單的方法,不用編程,如果有任何一個數據庫的化,
   用select (5*(5+9)/7) from oneTable
  63. 問:如何實現遞交表單內容的加密解密?
   答:
   如果你用IE目前只能用SSL協議,這一層不要你考慮,否則只你用你自己的工具加密傳輸,接收後再解密友,至於如何加解,如果要和公認的系統結合,就用通用的MD5,RAS等公開算法,如果你只是自己傳自己解,你隨便按你的想法把數據加上一些東西,取回來按規則減掉這些東西,我敢保證除你自己沒有任何人能知道解密方法.
  64. 問:爲什麼Integer.parseInt("+1");會拋出NumberFormatException的異常?
   答:因爲"+"運行算在JAVA中被重載.系統無法確定你用的是算術加還是字符+。
   這一點可以在javascript中更好地理解:
   <form name="t"><input name=s value=1234></form>
   var a = document.t.s.value+1;
   這時a = 12345,因爲document.t.s.value作爲字符串.
   但var a = document.t.s.value-1;
   a 就是1233,因爲系統知道-運算肯定是算術運行.所以把document.t.s.value
   轉換成數字.
  65. 問:hashCode() 有什麼用爲什麼有時候需要覆蓋Object裏的hashcode()方法?
   答:這就是這個對象的身份證啊,要不如何區分哪個對象。
  66. 問:怎樣在tomcat中實現一個定時執行的東東?
   答:
   在應用程序啓動時自動運行。servlet2.3中定義了ServletListener,監聽Servlet Context的啓動或則關閉(可在配置文件中配置),啓動時觸發一個守護程序的運行(可以實現java.util.Timer或則javax.swing.Timer).
  67. 問:程序可以輸出自己嗎?
   答:孔德悖論這個非常有名的法則.就是說任何程序都不可能輸出自己.
  68. 問:能夠把字符轉化成ASCII碼?比如將 A 轉化成 65?
   答:
   int a='A';
   out.println(a);
  69. 問:如何區分輸入的文字中的全角與半角?
   答:由於不能分辨出全角和半角字符的值有什麼規律,只好把全角符號牧舉出來了.
  70. 問:用戶註冊後的自動發信程序該怎麼做?
   答:
   這種發信程序不考慮性能,因爲不可能1秒就有一個人註冊,我們說的考慮性能的發信程序是指上百萬封信在隊列裏要不停發送的那種,象你這個隨便怎麼寫一個程序都行,沒有必要用JAVAMAIL.只要指定一個發信的服務器然後用cocket連它的25口就行了.
   自己用SOCKET連SMTP的25口發一封信就好象兩個鄰居之間送一樣東西,直接遞過去得了,用JAVAMAIL,消息機制就是你把這個東西從郵局寄給你的鄰居了.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章