隨筆-42  評(píng)論-42  文章-0  trackbacks-0

          我的評(píng)論

          因?yàn)橛辛?tomcat 所以 eclipse 知道了 localhost 可以用。
          如果在安裝 eclipse 時(shí)沒(méi)有裝 tomcat ,可以再 project 里面直接引用 tomcat ,就是加入 tomcat 的包。不然就會(huì)發(fā)現(xiàn) servlet 這類文件全部紅了。
          re: 生日菜譜 BlueSunshine 2009-09-15 13:27  
          呵呵,得吃一天
          回復(fù)一下
          re: 生成 Excel文件 BlueSunshine 2008-08-04 22:24  
          做了個(gè)練習(xí):

           1 package all;
           2 
           3 import java.io.FileOutputStream;
           4 
           5 import org.apache.poi.hssf.usermodel.HSSFFont;
           6 import org.apache.poi.hssf.usermodel.HSSFRichTextString;
           7 import org.apache.poi.hssf.usermodel.HSSFRow;
           8 import org.apache.poi.hssf.usermodel.HSSFSheet;
           9 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
          10 
          11 public class CreateExcel {
          12     public static void main(String[] args) {
          13         try {
          14             HSSFWorkbook workbook = new HSSFWorkbook();
          15             HSSFSheet sheet = workbook.createSheet("mySheet1");
          16 
          17             HSSFRow row0 = sheet.createRow(0);
          18             HSSFRichTextString arg0 = new HSSFRichTextString("number");
          19             HSSFFont font = workbook.createFont();
          20             font.setColor(HSSFFont.COLOR_RED);
          21             // bold : 粗體
          22             font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
          23             // 字號(hào)
          24             font.setFontHeightInPoints((short18);
          25             arg0.applyFont(font);
          26 
          27             row0.createCell((short0).setCellValue(arg0);
          28             row0.createCell((short1).setCellValue("name");
          29             row0.createCell((short2).setCellValue("content");
          30 
          31             HSSFRow row1 = sheet.createRow(1);
          32             row1.createCell((short0).setCellValue("1");
          33             row1.createCell((short1).setCellValue("one");
          34             row1.createCell((short2).setCellValue("This is one.");
          35 
          36             HSSFRow row2 = sheet.createRow(2);
          37             row2.createCell((short0).setCellValue("2");
          38             row2.createCell((short1).setCellValue("two");
          39             row2.createCell((short2).setCellValue("This 是 two.");
          40 
          41             HSSFRow row3 = sheet.createRow(3);
          42             row3.createCell((short0).setCellValue("3");
          43             row3.createCell((short1).setCellValue("哈哈");
          44             row3.createCell((short2).setCellValue("哈哈是pig。");
          45 
          46             FileOutputStream fileOutputStream = new FileOutputStream("E:\\myExcel1.xls");
          47             workbook.write(fileOutputStream);
          48             fileOutputStream.flush();
          49             fileOutputStream.close();
          50             System.out.println("ok");
          51         } catch (Exception e) {
          52             System.out.println("no create" + e);
          53         }
          54     }
          55 }
          56 

          HSSFCell 的 sellCellValue(Stirng value) 方法不提倡使用,所以根據(jù) API 改用sellCellValue(HSSFRiceTextString value)方法。第二個(gè)方法具體用法見(jiàn)上例18-27行。

          建出的Excel文件:


            如果要?jiǎng)?chuàng)建的Excel文檔已存在,那么將修改當(dāng)前的Excel文檔。
          re: 學(xué)習(xí)集合與泛型 BlueSunshine 2008-07-10 21:50  
          五 泛型

          1,泛型中的‘萬(wàn)用字符’:

          <T extends  Comparable> :表示T是實(shí)現(xiàn)了Comparable的類型(在‘泛型’中extends表示extends或者implement)

          <? extends T> :表示必須是T或者T的父型

          ArrayList<? extends Animal> :以實(shí)現(xiàn)或繼承Animal的類型為元素類型的ArrayList

          2,相同功能的另一種語(yǔ)法:

          public <T extends Animal> void takeThing(ArrayList<T> list);

          等同于:public void takeThing(ArrayList<? extends Animal> list);
          re: 學(xué)習(xí)集合與泛型 BlueSunshine 2008-07-10 12:07  
          四 使用TreeSet

            防止重復(fù)又保持有序,可以用TreeSet。

          例3-關(guān)于TreeSet 的例子,通過(guò)實(shí)現(xiàn)Comparator來(lái)達(dá)到排序。

          package collection;
           
          2 
           
          3 import java.util.Comparator;
           
          4 import java.util.TreeSet;
           
          5 
           
          6 public class TestTree {
           
          7     public static void main(String[] args) {
           
          8         new TestTree().go();
           
          9     }
          10 
          11     private void go() {
          12         Book b1 = new Book("How Cats Work");
          13         Book b2 = new Book("Remix you body");
          14         Book b3 = new Book("Finding Emo");
          15 
          16         SetComparator sc = new SetComparator();
          17         TreeSet<Book> tree = new TreeSet<Book>(sc);
          18 
          19         tree.add(b1);
          20         tree.add(b2);
          21         tree.add(b3);
          22         tree.add(b3);
          23         System.out.println(tree);
          24     }
          25 
          26     class SetComparator implements Comparator<Book> {
          27
           
          28
                   @Override
          29         public int
           compare(Book o1, Book o2) {
          30             return
           o1.title.compareTo(o2.title);
          31
                   }
          32
           
          33     }
          34 }
          35 
          36 
          37 package collection;
          38 
          39 public class Book {
          40     String title;
          41 
          42     public Book(String t) {
          43         title = t;
          44     }
          45 
          46 
          47     @Override
          48     public String toString() {
          49         return title;
          50     }
          51     
          52 }
          53 

            
          例4-關(guān)于TreeSet的第2個(gè)例子,通過(guò)實(shí)現(xiàn)Comparable來(lái)達(dá)到排序

           1 package collection;
           2 
           3 import java.util.TreeSet;
           4 
           5 public class TestTree {
           6     public static void main(String[] args) {
           7         new TestTree().go();
           8     }
           9 
          10     private void go() {
          11         Book b1 = new Book("How Cats Work");
          12         Book b2 = new Book("Remix you body");
          13         Book b3 = new Book("Finding Emo");
          14 
          15         TreeSet<Book> tree = new TreeSet<Book>();
          16 
          17         tree.add(b1);
          18         tree.add(b2);
          19         tree.add(b3);
          20         tree.add(b3);
          21         System.out.println(tree);
          22     }
          23 
          24 }
          25 
          26 package collection;
          27 
          28 
          29 public class Book implements Comparable<Book> {
          30     String title;
          31 
          32     public Book(String t) {
          33         title = t;
          34     }
          35 
          36     @Override
          37     public int compareTo(Book o) {
          38         return title.compareTo(o.title);
          39     }
          40 
          41     @Override
          42     public String toString() {
          43         return title;
          44     }
          45 
          46 }



            TreeSet的排序功能也是通過(guò)實(shí)現(xiàn)Comparator或Comparable來(lái)完成的。要么是TreeSet集合中的元素實(shí)現(xiàn)了Comparable,要么是用重載的Comparator作為參數(shù)來(lái)創(chuàng)建TreeSet。


          re: 建 English 項(xiàng)目遇到的問(wèn)題 BlueSunshine 2008-06-26 22:36  
          基本功能補(bǔ)充:

          1 單詞表的分頁(yè);
          2 insert / update 后的定位;
          3 index 頁(yè)的動(dòng)態(tài)截選(最后做)
          re: 學(xué)習(xí)JSP(二)--JSP BlueSunshine 2008-06-25 18:16  
          二 JSP的內(nèi)建對(duì)象

          ① out - javax.servlet.jsp.jspWriter
             out對(duì)象用于把結(jié)果輸出到網(wǎng)頁(yè)上。

          方法:
          1. void clear() ;
             清除輸出緩沖區(qū)的內(nèi)容,但是不輸出到客戶端。

          2. void clearBuffer() ;
             清除輸出緩沖區(qū)的內(nèi)容,并輸出到客戶端。

          3. void close() ;
             關(guān)閉輸出流,清除所有內(nèi)容。

          4. void flush() ;
             輸出緩沖區(qū)里面的數(shù)據(jù)。

          5. int getBufferSize() ;
             獲取以kb為單位的目前緩沖區(qū)大小。

          6. int getRemaining() ;
             獲取以kb為單位的緩沖區(qū)中未被占用的空間大小。

          7. boolean isAutoFlush() ;
             是否自動(dòng)刷新緩沖區(qū)。

          8. void newLine() ;
             輸出一個(gè)換行字符。

          9. void print( boolean b ) ;
             void print( char c ) ;
             void print( char[] s ) ;
             void print( double d ) ;
             void print( float f ) ;
             void print( int i ) ;
             void print( long l ) ;
             void print( Object obj ) ;
             void print( String s ) ;
             將指定類型的數(shù)據(jù)輸出到Http流,不換行。

          10. void println( boolean b ) ;
              void println( char c ) ;
              void println( char[] s ) ;
              void println( double d ) ;
              void println( float f ) ;
              void println( int i ) ;
              void println( long l ) ;
              void println( Object obj ) ;
              void println( String s ) ;
              將指定類型的數(shù)據(jù)輸出到Http流,并輸出一個(gè)換行符。
             
          11. Appendable append( char c ) ;
              Appendable append( CharSequence cxq, int start, int end ) ;
              Appendable append( CharSequence cxq ) ;
              將一個(gè)字符或者實(shí)現(xiàn)了CharSequence接口的對(duì)象添加到輸出流的后面。

          成員:
          int DEFAULT_BUFFER = 0    - 缺省緩沖區(qū)大小
          int NO_BUFFER = -1        - writer是否處于緩沖輸出狀態(tài)
          int UNBOUNDED_BUFFER = -2 - 是否限制緩沖區(qū)大小


          ② request - javax.servlet.http.HttpServletRequest
             request對(duì)象包含所有請(qǐng)求的信息,如請(qǐng)求的來(lái)源、標(biāo)頭、cookies和請(qǐng)求相關(guān)的參數(shù)值等。

          方法:
          1. Object getAttribute( String name ) ;
             返回由name指定的屬性值,該屬性不存在時(shí)返回null。

          2. Enumeration getAttributeNames() ;
             返回request對(duì)象的所有屬性名稱的集合。

          3. String getAuthType() ;
             返回用來(lái)保護(hù)servlet的認(rèn)證方法的名稱,未受保護(hù)時(shí)返回null。

          4. String getCharacterEncoding() ;
             返回請(qǐng)求中的字符編碼方法,可以在response對(duì)象中設(shè)置。

          5. int getContentLength() ;
             返回請(qǐng)求的BODY的長(zhǎng)度,不能確定長(zhǎng)度時(shí)返回-1。可以在response中設(shè)置。

          6. String getContentType() ;
             返回在response中定義的內(nèi)容類型。

          7. String getContentPath() ;
             返回請(qǐng)求的路徑。

          8. Cookie[] getCookies() ;
             返回客戶端所有的Cookie的數(shù)組。

          9. Enumeration getHeaderNames() ;
             返回所有HTTP頭的名稱的集合。

          10. Enumeration getHeaders( String name ) ;
              返回指定HTTP頭的所有值的集合。

          11. String getHeader( String name ) ;
              返回指定名稱的HTTP頭的信息。

          12. long getDateHeader( String name ) ;
              返回指定名稱的Data類型的HTTP頭的信息。

          13. int getIntHeader( String name ) ;
              返回指定名稱的Int類型的HTTP頭的信息。

          14. ServletInputStream getInputStream() ;
              返回請(qǐng)求的輸入流。

          15. Locale getLocale() ;
              返回當(dāng)前頁(yè)的Locale對(duì)象,可以在response中設(shè)定。

          16. Enumeration getLocales() ;
              返回請(qǐng)求中所有的Locale對(duì)象的集合。

          17. String getLocalName() ;
              獲取響應(yīng)請(qǐng)求的服務(wù)器端主機(jī)名。

          18. String getLocalAddr() ;
              獲取響應(yīng)請(qǐng)求的服務(wù)器端地址。

          19. int getLocalPort() ;
              獲取響應(yīng)請(qǐng)求的服務(wù)器端端口

          20. String getMethod() ;
              獲取客戶端向服務(wù)器端發(fā)送請(qǐng)求的方法(GET、POST)。

          21. String getParameter( String name ) ;
              獲取客戶端發(fā)送給服務(wù)器端的參數(shù)值。

          22. Map getParameterMap() ;
              該方法返回包含請(qǐng)求中所有參數(shù)的一個(gè)Map對(duì)象。

          23. Enumeration getParameterNames() ;
              返回請(qǐng)求中所有參數(shù)的集合。

          24. String[] getParameterValues( String name ) ;
              獲得請(qǐng)求中指定參數(shù)的所有值。

          25. String getQueryString() ;
              返回get方法傳遞的參數(shù)字符串,該方法不分解出單獨(dú)的參數(shù)。

          26. String getPathInfo() ;
              取出請(qǐng)求中處于ServletPath和QueryString之間的額外信息。

          27. String getPathTranslated() ;
              返回用getPathInfo()方法取得的路徑信息的實(shí)際路徑。

          28. String getProtocol() ;
              返回請(qǐng)求使用的協(xié)議。可以是HTTP1.1或者HTTP1.0。

          29. BufferedReader getReader() ;
              返回請(qǐng)求的輸入流對(duì)應(yīng)的Reader對(duì)象,該方法和getInputStream()方法在一個(gè)頁(yè)面中只能調(diào)用一個(gè)。

          30. String getRemoteAddr() ;
              獲取發(fā)出請(qǐng)求的客戶端IP地址。

          31. String getRemoteHost() ;
              獲取發(fā)出請(qǐng)求的客戶端主機(jī)名

          32. String getRemoteUser() ;
              返回經(jīng)過(guò)客戶端驗(yàn)證的用戶名,未經(jīng)驗(yàn)證返回null。

          33. int getRemotePort() ;
              返回發(fā)出請(qǐng)求的客戶端主機(jī)端口。

          34. String getRealPath( String path ) ;
              返回給定虛擬路徑的物理路徑。

          35. RequestDispatcher getRequestDispatcher( String path ) ;
              按給定的路徑生成資源轉(zhuǎn)向處理適配器對(duì)象。

          36. String getRequestedSessionId() ;
              返回請(qǐng)求的session的標(biāo)識(shí)。

          37. String RequestURI() ;
              返回發(fā)出請(qǐng)求的客戶端地址,但是不包括請(qǐng)求的參數(shù)字符串。

          38. StringBuffer getRequestURI() ;
              返回響應(yīng)請(qǐng)求的服務(wù)器端地址

          39. String getScheme() ;
              獲取協(xié)議名稱,缺省值為HTTP協(xié)議。

          40. String getServerName() ;
              返回響應(yīng)請(qǐng)求的服務(wù)器名稱。

          41. String getServletPath() ;
              獲取客戶端所請(qǐng)求的腳本文件的文件路徑。

          42. int getServerPort() ;
              獲取響應(yīng)請(qǐng)求的服務(wù)器端主機(jī)端口號(hào)。

          43. void removeAttribute( String name ) ;
              在屬性列表中刪除指定名稱的屬性。

          44. void setAttribute( String name, Object value ) ;
              在屬性列表中添加/刪除指定的屬性。

          45. void setCharacterEncoding( String name ) ;
              設(shè)置請(qǐng)求的字符編碼格式。

          46. HttpSession getSession() ;
              HttpSession getSession( boolean create ) ;
              獲取session,如果create為true,在無(wú)session的情況下創(chuàng)建一個(gè)。
             
          47. boolean isRequestedSessionIdFromCookie() ;
              檢查請(qǐng)求的會(huì)話ID是否為通過(guò)Cookie傳入。

          48. boolean isRequestedSessionIdFromURL() ;
              檢查請(qǐng)求的會(huì)話ID是否為通過(guò)URL傳入。

          49. boolean isRequestedSessionIdValid() ;
              檢查請(qǐng)求的會(huì)話ID是否仍然有效。

          50. boolean isSecure() ;
              檢查請(qǐng)求是否使用安全鏈接,如果HTTPS等。

          51. boolean isUserInRole( String role ) ;
              檢查已經(jīng)通過(guò)驗(yàn)證的用戶是否在是role所指定的角色。

          52. Principal getUserPrincipal() ;
              返回包含用戶登陸名的一個(gè)java.security.Principal對(duì)象。

          成員:
          String BASIC_AUTH = "BASIC"             -
          String CLIENT_CERT_AUTH = "CLIENT_CERT" -
          String DIGEST_AUTH = "DIGEST"           -
          String FORM_AUTH = "FORM"               -


          ③ response - javax.servlet.http.HttpServletResponse
             response對(duì)象主要將JSP容器處理后的結(jié)果傳回到客戶端。

          方法:
          1. void addCookie( Cookie cookie ) ;
             添加一個(gè)Cookie對(duì)象,保存客戶端信息。

          2. void addDateHeader( String name, long value ) ;
             添加一個(gè)日期類型的HTTP頭信息,覆蓋同名的HTTP頭信息。

          3. void addHeader( String name, String value ) ;
             添加一個(gè)HTTP頭,覆蓋同名的舊HTTP頭。

          4. void addIntHeader( String name, int value ) ;
             添加一個(gè)整型的HTTP頭,覆蓋同名的舊HTTP頭。

          5. boolean containsHeader( String name ) ;
             判斷指定的HTTP頭是否存在。

          6. String encodeRedirectURL( String url ) ;
             對(duì)sendRedirect()方法使用的URL進(jìn)行編碼。

          7. String encodeURL( String url ) ;
             將URL予以編碼,回傳包含session ID的URL。
            
          8. void flushBuffer() ;
             強(qiáng)制把當(dāng)前緩沖區(qū)的內(nèi)容發(fā)送到客戶端。

          9. int getBufferSize() ;
             取得以kb為單位的緩沖區(qū)大小。

          10. String getCharacterEncoding() ;
              獲取響應(yīng)的字符編碼格式。

          11. String getContentType() ;
              獲取響應(yīng)的類型。

          12. Locale getLocale() ;
              獲取響應(yīng)的Locale對(duì)象。

          13. ServletOutputStream getOutputStream() ;
              返回客戶端的輸出流對(duì)象。

          14. PrintWriter getWriter() ;
              獲取輸出流對(duì)應(yīng)的writer對(duì)象。

          15. boolean isCommitted() ;
              判斷服務(wù)器端是否已經(jīng)將數(shù)據(jù)輸出到客戶端。

          16. void reset() ;
              清空buffer中的所有內(nèi)容。

          17. void resetBuffer() ;
              情況buffer中所有的內(nèi)容,但是保留HTTP頭和狀態(tài)信息。

          18. void sendError( int xc, String msg ) ;
              void sendError( int xc ) ;
              發(fā)送錯(cuò)誤,包括狀態(tài)碼和錯(cuò)誤信息。

          19. void sendRedirect( String locationg ) ;
              把響應(yīng)發(fā)送到另外一個(gè)位置進(jìn)行處理。

          20. void setBufferSize( int size ) ;
              設(shè)置以kb為單位的緩沖區(qū)大小。

          21. void setCharacterEncoding( String charset ) ;
              設(shè)置響應(yīng)使用的字符編碼格式。

          22. void setContentLength( int length ) ;
              設(shè)置響應(yīng)的BODY長(zhǎng)度。

          23. void setContentType( String type ) ;
              設(shè)置響應(yīng)的類型。

          24. void setDateHeader( String name, long value ) ;
              設(shè)置指定名稱的Data類型的HTTP頭的值。

          25. void setHeader( String name, String value ) ;
              設(shè)置指定名稱的HTTP頭的值。

          26. void setIntHeader( String name, int value ) ;
              設(shè)置指定名稱的int類型的HTTP頭的值。

          27. void setStatus( int xc ) ;
              設(shè)置響應(yīng)狀態(tài)碼,新值會(huì)覆蓋當(dāng)前值。

          成員(HTTP狀態(tài)碼):
          int SC_CONTINUE = 100                      int SC_SWITCHING_PROTOCOLS = 101
          int SC_OK = 200                            int SC_NON_AUTHORITATIVE_INFORMATION = 203
          int SC_ACCEPTED = 202                      int SC_CREATED = 201
          int SC_NO_CONTENT = 204                    int SC_RESET_CONTENT = 205
          int SC_PARTIAL_CONTENT = 206               int SC_MULTIPLE_CHOICES = 300
          int SC_MOVED_PERMANENTLY = 301             int SC_MOVED_TEMPORARILY = 302
          int SC_FOUND = 302                         int SC_SEE_OTHER = 303
          int SC_NOT_MODIFIED = 304                  int SC_USE_PROXY = 305
          int SC_TEMPORARY_REDIRECT = 307            int SC_BAD_REQUEST = 400
          int SC_UNAUTHORIZED = 401                  int SC_PAYMENT_REQUIRED = 402
          int SC_FORBIDDEN = 403                     int SC_NOT_FOUND = 404
          int SC_METHOD_NOT_ALLOWED = 405            int SC_NOT_ACCEPTABLE = 406
          int SC_PROXY_AUTHENTICATION_REQUIRED = 407 int SC_REQUEST_TIMEOUT = 408
          int SC_CONFLICT = 409                      int SC_GONE = 410
          int SC_LENGTH_REQUIRED = 411               int SC_PRECONDITION_FAILED = 412
          int SC_REQUEST_ENTITY_TOO_LARGE = 413      int SC_REQUEST_URI_TOO_LONG = 414
          int SC_UNSUPPORTED_MEDIA_TYPE = 415        int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416
          int SC_EXPECTATION_FAILED = 417            int SC_INTERNAL_SERVER_ERROR = 500
          int SC_NOT_IMPLEMENTED = 501               int SC_BAD_GATEWAY = 502
          int SC_SERVICE_UNAVAILABLE = 503           int SC_GATEWAY_TIMEOUT = 504
          int SC_HTTP_VERSION_NOT_SUPPORTED = 505


          ④ session - javax.servlet.http.HttpSession
             session對(duì)象表示目前個(gè)別用戶的會(huì)話狀態(tài),用來(lái)識(shí)別每個(gè)用戶。

          方法:
          1. Object getAttribute( String name ) ;
             獲取與指定名字相關(guān)聯(lián)的session屬性值。

          2. Enumeration getAttributeNames() ;
             取得session內(nèi)所有屬性的集合。

          3. long getCreationTime() ;
             返回session的創(chuàng)建時(shí)間,最小單位千分之一秒。

          4. String getId() ;
             取得session標(biāo)識(shí)。

          5. long getLastAccessedTime() ;
             返回與當(dāng)前session相關(guān)的客戶端最后一次訪問(wèn)的時(shí)間,由1970-01-01算起,單位毫秒。

          6. int getMaxInactiveInterval( int interval ) ;
             返回總時(shí)間,以秒為單位,表示session的有效時(shí)間(session不活動(dòng)時(shí)間)。-1為永不過(guò)期。

          7. ServletContext getServletContext() ;
             返回一個(gè)該JSP頁(yè)面對(duì)應(yīng)的ServletContext對(duì)象實(shí)例。

          8. HttpSessionContext getSessionContext() ;
            

          9. Object getValue( String name ) ;
             取得指定名稱的session變量值,不推薦使用。

          10. String[] getValueNames() ;
              取得所有session變量的名稱的集合,不推薦使用。

          11. void invalidate() ;
              銷毀這個(gè)session對(duì)象。

          12. boolean isNew() ;
              判斷一個(gè)session是否由服務(wù)器產(chǎn)生,但是客戶端并沒(méi)有使用。

          13. void pubValue( String name, Object value ) ;
              添加一個(gè)session變量,不推薦使用。

          14. void removeValue( String name ) ;
              移除一個(gè)session變量的值,不推薦使用。

          15. void setAttribute( String name, String value ) ;
              設(shè)置指定名稱的session屬性值。

          16. void setMaxInactiveInterval( int interval ) ;
              設(shè)置session的有效期。

          17. void removeAttribute( String name ) ;
              移除指定名稱的session屬性。


          ⑤ pageContext - javax.servlet.jsp.PageContext
             pageContext對(duì)象存儲(chǔ)本JSP頁(yè)面相關(guān)信息,如屬性、內(nèi)建對(duì)象等。

          方法:
          1. void setAttribute( String name, Object value, int scope ) ;
             void setAttribute( String name, Object value ) ;
             在指定的共享范圍內(nèi)設(shè)置屬性。

          2. Object getAttribute( String name, int scope ) ;
             Object getAttribute( String name ) ;
             取得指定共享范圍內(nèi)以name為名字的屬性值。

          3. Object findAttribute( String name ) ;
             按頁(yè)面、請(qǐng)求、會(huì)話和應(yīng)用程序共享范圍搜索已命名的屬性。

          4. void removeAttribute( String name, int scope ) ;
             void removeAttribute( String name ) ;
             移除指定名稱和共享范圍的屬性。

          5. void forward( String url ) ;
             將頁(yè)面導(dǎo)航到指定的URL。

          6. Enumeration getAttributeNamesScope( int scope ) ;
             取得指定共享范圍內(nèi)的所有屬性名稱的集合。

          7. int getAttributeScope( String name ) ;
             取得指定屬性的共享范圍。

          8. ErrorData getErrorDate() ;
             取得頁(yè)面的errorData對(duì)象。

          9. Exception getException() ;
             取得頁(yè)面的exception對(duì)象。

          10. ExpressionEvaluator getExpressionEvaluator() ;
              取得頁(yè)面的expressionEvaluator對(duì)象。

          11. JspWriter getOut() ;
              取得頁(yè)面的out對(duì)象。

          12. Object getPage() ;
              取得頁(yè)面的page對(duì)象。

          13. ServletRequest getRequest() ;
              取得頁(yè)面的request對(duì)象。

          14. ServletResponse getResponse() ;
              取得頁(yè)面的response對(duì)象。

          15. ServletConfig getConfig() ;
              取得頁(yè)面的config對(duì)象。

          16. ServletContext getServletContext() ;
              取得頁(yè)面的servletContext對(duì)象。

          17. HttpSession getSession() ;
              取得頁(yè)面的session對(duì)象。

          18. VariableResolver getVariableResolver() ;
              取得頁(yè)面的variableResolver對(duì)象。

          19. void include( String url, boolean flush ) ;
              void include( String url ) ;
              包含其他的資源,并指定是否自動(dòng)刷新。

          20. void release() ;
              重置pageContext內(nèi)部狀態(tài),釋放所有內(nèi)部引用。

          21. void initialize( Servlet servlet, ServletRequest request, ServletResponse response,
                               String errorPageURL, boolean needSession, int bufferSize, boolean autoFlush ) ;
              初始化未經(jīng)初始化的pageContext對(duì)象。

          22. BodyContext pushBody() ;
              BodyContext pushBody( Writer writer ) ;
              保存當(dāng)前的out對(duì)象,并更新pageContext中page范圍內(nèi)的out對(duì)象。

          23. JspWrite popBody() ;
              取出由pushBody()方法保存的out對(duì)象。

          24. void handlePageException( Exception e ) ;
              void handlePageException( Thrwoable t ) ;
             

          成員:
          int PAGE_SCOPE = 1        - 頁(yè)面共享范圍
          int REQUEST_SCOPE = 2     - 請(qǐng)求共享范圍
          int SESSION_SCOPE = 3     - 會(huì)話共享范圍
          int APPLICATION_SCOPE = 4 - 應(yīng)用程序共享范圍
          String PAGE = "javax.servlet.jsp.jspPage"
          String PAGECONTEXT = "javax.servlet.jsp.jspPageContext"
          String REQUEST = "javax.servlet.jsp.jspRequest"
          String RESPONSE = "javax.servlet.jsp.jspResponse"
          String CONFIG = "javax.servlet.jsp.jspConfig"
          String SESSION = "javax.servlet.jsp.jspSession"
          String OUT = "javax.servlet.jsp.jspOut"
          String APPLICATION = "javax.servlet.jsp.jspApplication"
          String EXCEPTION = "javax.servlet.jsp.jspException"


          ⑥ application - javax.servlet.ServletContext
             application主要功用在于取得或更改Servlet的設(shè)定。

          方法:
          1. Object getAttribute( String name ) ;
             返回由name指定的application屬性。

          2. Enumeration getAttributes() ;
             返回所有的application屬性。

          3. ServletContext getContext( String uripath ) ;
             取得當(dāng)前應(yīng)用的ServletContext對(duì)象。

          4. String getInitParameter( String name ) ;
             返回由name指定的application屬性的初始值。

          5. Enumeration getInitParameters() ;
             返回所有的application屬性的初始值的集合。

          6. int getMajorVersion() ;
             返回servlet容器支持的Servlet API的版本號(hào)。

          7. String getMimeType( String file ) ;
             返回指定文件的類型,未知類型返回null。一般為"text/html"和"image/gif"。

          8. int getMinorVersion() ;
             返回servlet容器支持的Servlet API的副版本號(hào)。

          9. String getRealPath( String path ) ;
             返回給定虛擬路徑所對(duì)應(yīng)物理路徑。

          10. RequestDispatcher getNamedDispatcher( String name ) ;
              為指定名字的Servlet對(duì)象返回一個(gè)RequestDispatcher對(duì)象的實(shí)例。

          11. RequestDispatcher getRequestDispatcher( String path ) ;
              返回一個(gè)RequestDispatcher對(duì)象的實(shí)例。

          12. URL getResource( String path ) ;
              返回指定的資源路徑對(duì)應(yīng)的一個(gè)URL對(duì)象實(shí)例,參數(shù)要以"/"開(kāi)頭。

          13. InputStream getResourceAsStream( String path ) ;
              返回一個(gè)由path指定位置的資源的InputStream對(duì)象實(shí)例。

          14. Set getResourcePaths( String path ) ;
              返回存儲(chǔ)在web-app中所有資源路徑的集合。

          15. String getServerInfo() ;
              取得應(yīng)用服務(wù)器版本信息。

          16. Servlet getServlet( String name ) ;
              在ServletContext中檢索指定名稱的servlet。

          17. Enumeration getServlets() ;
              返回ServletContext中所有servlet的集合。

          18. String getServletContextName() ;
              返回本web應(yīng)用的名稱。

          19. Enumeration getServletContextNames() ;
              返回ServletContext中所有servlet的名稱集合。

          20. void log( Exception ex, String msg ) ;
              void log( String msg, Throwable t ) ;
              void log( String msg ) ;
              把指定的信息寫入servlet log文件。

          21. void removeAttribute( String name ) ;
              移除指定名稱的application屬性。

          22. void setAttribute( String name, Object value ) ;
              設(shè)定指定的application屬性的值。


          ⑦ config - javax.servlet.ServletConfig
             config對(duì)象用來(lái)存放Servlet初始的數(shù)據(jù)結(jié)構(gòu)。

          方法:
          1. String getInitParameter( String name ) ;
             返回名稱為name的促使參數(shù)的值。

          2. Enumeration getInitParameters() ;
             返回這個(gè)JSP所有的促使參數(shù)的名稱集合。

          3. ServletContext getContext() ;
             返回執(zhí)行者的servlet上下文。

          4. String getServletName() ;
             返回servlet的名稱。


          ⑧ exception - java.lang.Throwable
             錯(cuò)誤對(duì)象,只有在JSP頁(yè)面的page指令中指定isErrorPage="true"后,才可以在本頁(yè)面使用exception對(duì)象。

          方法:
          1. Throwable fillInStackTrace() ;
             將當(dāng)前stack信息記錄到exception對(duì)象中。

          2. String getLocalizedMessage() ;
             取得本地語(yǔ)系的錯(cuò)誤提示信息。

          3. String getMessage()
             取得錯(cuò)誤提示信息。

          4. StackTrackElement[] getStackTrace() ;
             返回對(duì)象中記錄的call stack track信息。

          5. Throwable initCause( Throwable cause ) ;
             將另外一個(gè)異常對(duì)象嵌套進(jìn)當(dāng)前異常對(duì)象中。
            
          6. Throwable getCause() ;
             取出嵌套在當(dāng)前異常對(duì)象中的異常。

          7. void printStackTrace() ;
             void printStackTrace( printStream s ) ;
             void printStackTrace( printWriter s ) ;
             打印出Throwable及其call stack trace信息。

          8. void setStackTrace( StackTraceElement[] stackTrace )
             設(shè)置對(duì)象的call stack trace信息。


          ⑨ page - javax.servlet.jsp.HttpJspPage
             page對(duì)象代表JSP對(duì)象本身,或者說(shuō)代表編譯后的servlet對(duì)象,
             可以用( (javax.servlet.jsp.HttpJspPage)page )來(lái)取用它的方法和屬性。


          re: 學(xué)習(xí) JSP--Servlet BlueSunshine 2008-06-25 14:51  

          六 Http的一個(gè)會(huì)話對(duì)象Session

          public class SomeServlet extends HttpServlet {
              @Override
              
          protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                  HttpSession session 
          = req.getSession();
                  session.setAttribute(
          "name""chh");
              }

          }
          re: 學(xué)習(xí) JSP--Servlet BlueSunshine 2008-06-25 14:45  
          五 Servlet的service方法

            service()可以涵蓋doGet()和doPost()。

          public class SomeServlet extends HttpServlet {
              @Override
              
          protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                  PrintWriter out 
          = resp.getWriter();
              }

          }

           
          這樣寫,就可以不用再寫doGet()和doPost(),因?yàn)閟ervice()可以處理get請(qǐng)求和post請(qǐng)求。
          re: 學(xué)習(xí) JSP--基礎(chǔ)篇 BlueSunshine 2008-06-25 12:51  

          四 處理表單數(shù)據(jù)

            Java Servlet的好處之一,只需要簡(jiǎn)單地調(diào)用一下HttpServletRequest的getParameter方法、在調(diào)用參數(shù)中提供表單變量的名字(大小寫敏感)即可,而且GET請(qǐng)求和POST請(qǐng)求的處理方法完全相同。

             getParameter方法的返回值是一個(gè)字符串,它是參數(shù)中指定的變量名字第一次出現(xiàn)所對(duì)應(yīng)的值經(jīng)反編碼得到得字符串(可以直接使用)。如果指定的表單變量存在,但沒(méi)有值,getParameter返回空字符串;如果指定的表單變量不存在,則返回null。如果表單變量可能對(duì)應(yīng)多個(gè)值,可以用getParameterValues來(lái)取代getParameter。getParameterValues能夠返回一個(gè)字符串?dāng)?shù)組。

             最后,雖然在實(shí)際應(yīng)用中Servlet很可能只會(huì)用到那些已知名字的表單變量,但在調(diào)試環(huán)境中,獲得完整的表單變量名字列表往往是很有用的,利用getParamerterNames方法可以方便地實(shí)現(xiàn)這一點(diǎn)。getParamerterNames返回的是一個(gè)Enumeration,其中的每一項(xiàng)都可以轉(zhuǎn)換為調(diào)用getParameter的字符串。

          re: 學(xué)習(xí) JSP BlueSunshine 2008-06-24 17:33  
          二 支持Servlet的Web服務(wù)器--tomcat

          三 一個(gè)簡(jiǎn)單Servlet的基本結(jié)構(gòu)

          package servlet;

          import
           java.io.IOException;
          import
           java.io.PrintWriter;

          import
           javax.servlet.http.HttpServlet;
          import
           javax.servlet.http.HttpServletRequest;
          import
           javax.servlet.http.HttpServletResponse;

          public class SomeServlet extends HttpServlet 
          {
              
          public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException 
          {
                  PrintWriter out 
          =
           resp.getWriter();
              }

          }


             如果某個(gè)類要成為Servlet,則它應(yīng)該從HttpServlet 繼承,根據(jù)數(shù)據(jù)是通過(guò)GET還是POST發(fā)送,覆蓋doGet、doPost方法之一或全部。doGet和doPost方法都有兩個(gè)參數(shù),分別為HttpServletRequest 類型和HttpServletResponse 類型。HttpServletRequest提供訪問(wèn)有關(guān)請(qǐng)求的信息的方法,例如表單數(shù)據(jù)、HTTP請(qǐng)求頭等等。HttpServletResponse除了提供用于指定HTTP應(yīng)答狀態(tài)(200,404等)、應(yīng)答頭(Content-Type,Set-Cookie等)的方法之外,最重要的是它提供了一個(gè)用于向客戶端發(fā)送數(shù)據(jù)的PrintWriter 。對(duì)于簡(jiǎn)單的Servlet來(lái)說(shuō),它的大部分工作是通過(guò)println語(yǔ)句生成向客戶端發(fā)送的頁(yè)面。

             注意doGet和doPost拋出兩個(gè)異常,因此你必須在聲明中包含它們。另外,你還必須導(dǎo)入java.io包(要用到PrintWriter等類)、javax.servlet包(要用到HttpServlet等類)以及javax.servlet.http包(要用到HttpServletRequest類和HttpServletResponse類)。

              最后,doGet和doPost這兩個(gè)方法是由service方法調(diào)用的,有時(shí)你可能需要直接覆蓋service方法,比如Servlet要處理GET和POST兩種請(qǐng)求時(shí)。

          @BeforeClass/@AfterClass 與 @Before/@After 的區(qū)別

          @BeforeClass/@AfterClass

          只運(yùn)行一次;
          方法名不限制;
          public static;

          @Before/@After

          在每個(gè)測(cè)試方法前(后)都會(huì)運(yùn)行一次;
          方法名不限制;
          public 非static。

          CGI

          CGI 意思為 Common Gateway Interface(公共網(wǎng)關(guān)接口), 一種基于瀏覽器的輸入、在Web服務(wù)器上運(yùn)行的程序方法. CGI腳本 使你的瀏覽器與用戶能交互,為了在數(shù)據(jù)庫(kù)中尋找一個(gè)名詞, 提供你寫入的評(píng)論,或者從一個(gè)表單中選擇幾個(gè)條目并且能得到一個(gè)明確的回答. 如果你曾經(jīng)遇到過(guò)在web上填表或進(jìn)行搜索, 你就是用的CGI腳本. 你那時(shí)也許沒(méi)有意識(shí)到,因?yàn)榇蟛糠止ぷ魇窃诜?wù)器上運(yùn)行的,你看到的只是結(jié)果.

          CGI腳本簡(jiǎn)單地講是個(gè)運(yùn)行在Web服務(wù)器上的程序, 有瀏覽器的輸入觸發(fā). 這個(gè)腳本通常象服務(wù)器和系統(tǒng)中其他程序如數(shù)據(jù)庫(kù)的橋梁。

          re: 面試題 BlueSunshine 2008-06-18 22:27  
          1 替換
          2 編碼轉(zhuǎn)換
          3 一個(gè)RuntimeException例子
          re: 面試題 BlueSunshine 2008-06-18 13:16  
          Servlet
           
            Servlet是使用Java Servlet 應(yīng)用程序設(shè)計(jì)接口(API)及相關(guān)類和方法的 Java 程序。除了 Java Servlet API,Servlet 還可以使用用以擴(kuò)展和添加到 API 的 Java 類軟件包。Servlet 在啟用 Java 的 Web 服務(wù)器上或應(yīng)用服務(wù)器上運(yùn)行并擴(kuò)展了該服務(wù)器的能力。Java servlet對(duì)于Web服務(wù)器就好象Java applet對(duì)于Web瀏覽器。Servlet裝入Web服務(wù)器并在Web服務(wù)器內(nèi)執(zhí)行,而applet裝入Web瀏覽器并在Web瀏覽器內(nèi)執(zhí)行。Java Servlet API 定義了一個(gè)servlet 和Java使能的服務(wù)器之間的一個(gè)標(biāo)準(zhǔn)接口,這使得Servlets具有跨服務(wù)器平臺(tái)的特性。
            Servlet 通過(guò)創(chuàng)建一個(gè)框架來(lái)擴(kuò)展服務(wù)器的能力,以提供在 Web 上進(jìn)行請(qǐng)求和響應(yīng)服務(wù)。當(dāng)客戶機(jī)發(fā)送請(qǐng)求至服務(wù)器時(shí),服務(wù)器可以將請(qǐng)求信息發(fā)送給 Servlet,并讓 Servlet 建立起服務(wù)器返回給客戶機(jī)的響應(yīng)。 當(dāng)啟動(dòng) Web 服務(wù)器或客戶機(jī)第一次請(qǐng)求服務(wù)時(shí),可以自動(dòng)裝入 Servlet。裝入后, Servlet 繼續(xù)運(yùn)行直到其它客戶機(jī)發(fā)出請(qǐng)求。Servlet 的功能涉及范圍很廣。例如,Servlet 可完成如下功能:

           

          (1) 創(chuàng)建并返回一個(gè)包含基于客戶請(qǐng)求性質(zhì)的動(dòng)態(tài)內(nèi)容的完整的 HTML頁(yè)面。

          (2) 創(chuàng)建可嵌入到現(xiàn)有 HTML 頁(yè)面中的一部分 HTML 頁(yè)面(HTML 片段)。

          (3) 與其它服務(wù)器資源(包括數(shù)據(jù)庫(kù)和基于 Java 的應(yīng)用程序)進(jìn)行通信。

          (4) 用多個(gè)客戶機(jī)處理連接,接收多個(gè)客戶機(jī)的輸入,并將結(jié)果廣播到多個(gè)客戶機(jī)上。例如,Servlet 可
          以是多參與者的游戲服務(wù)器。

          (5) 當(dāng)允許在單連接方式下傳送數(shù)據(jù)的情況下,在瀏覽器上打開(kāi)服務(wù)器至applet的新連接,并將該連
          接保持在打開(kāi)狀態(tài)。當(dāng)允許客戶機(jī)和服務(wù)器簡(jiǎn)單、高效地執(zhí)行會(huì)話的情況下,applet也可以啟動(dòng)客戶瀏覽器和服務(wù)器之間的連接。可以通過(guò)定制協(xié)議或標(biāo)準(zhǔn)(如 IIOP)進(jìn)行通信。

          (6) 對(duì)特殊的處理采用 MIME 類型過(guò)濾數(shù)據(jù),例如圖像轉(zhuǎn)換和服務(wù)器端包括(SSI)。

          (7) 將定制的處理提供給所有服務(wù)器的標(biāo)準(zhǔn)例行程序。例如,Servlet 可以修改如何認(rèn)證用戶。

          Servlet 的生命周期

            Servlet 的生命周期始于將它裝入 Web 服務(wù)器的內(nèi)存時(shí),并在終止或重新裝入 Servlet 時(shí)結(jié)束。

          (1) 初始化
          在下列時(shí)刻裝入 Servlet:
          =如果已配置自動(dòng)裝入選項(xiàng),則在啟動(dòng)服務(wù)器時(shí)自動(dòng)裝入
          =在服務(wù)器啟動(dòng)后,客戶機(jī)首次向 Servlet 發(fā)出請(qǐng)求時(shí)
          =重新裝入 Servlet 時(shí)
          裝入 Servlet 后,服務(wù)器創(chuàng)建一個(gè) Servlet 實(shí)例并且調(diào)用 Servlet 的 init() 方法。在初始化階段,Servlet 初始化參數(shù)被傳遞給 Servlet 配置對(duì)象。

          (2) 請(qǐng)求處理
          對(duì)于到達(dá)服務(wù)器的客戶機(jī)請(qǐng)求,服務(wù)器創(chuàng)建特定于請(qǐng)求的一個(gè)"請(qǐng)求"對(duì)象和一個(gè)"響應(yīng)"對(duì)象。服務(wù)器調(diào)用 Servlet 的 service() 方法,該方法用于傳遞"請(qǐng)求"和"響應(yīng)"對(duì)象。service() 方法從"請(qǐng)求"對(duì)象獲得請(qǐng)求信息、處理該請(qǐng)求并用"響應(yīng)"對(duì)象的方法以將響應(yīng)傳回客戶機(jī)。service() 方法可以調(diào)用其它方法來(lái)處理請(qǐng)求,例如 doGet()、doPost() 或其它的方法。

          (3) 終止
          當(dāng)服務(wù)器不再需要 Servlet, 或重新裝入 Servlet 的新實(shí)例時(shí),服務(wù)器會(huì)調(diào)用 Servlet 的 destroy() 方法。

          re: 面試題 BlueSunshine 2008-06-18 13:06  
          JVM
           
          Java Virtual Machine(Java虛擬機(jī)),它是一個(gè)虛構(gòu)出來(lái)的計(jì)算機(jī),是通過(guò)在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來(lái)實(shí)現(xiàn)的。Java虛擬機(jī)有自己完善的硬件架構(gòu),如處理器、堆棧、寄存器等,還具有相應(yīng)的指令系統(tǒng)。JVM屏蔽了與具體操作系統(tǒng)平臺(tái)相關(guān)的信息,使得Java程序只需生成在Java虛擬機(jī)上運(yùn)行的目標(biāo)代碼(字節(jié)碼),就可以在多種平臺(tái)上不加修改地運(yùn)行。Java虛擬機(jī)在執(zhí)行字節(jié)碼時(shí),實(shí)際上最終還是把字節(jié)碼解釋成具體平臺(tái)上的機(jī)器指令執(zhí)行。
          re: 面試題 BlueSunshine 2008-06-18 12:51  
          session 與cookie 的區(qū)別
           
            Session是由應(yīng)用服務(wù)器維持的一個(gè)服務(wù)器端的存儲(chǔ)空間,Cookie是客戶端的存儲(chǔ)空間,由瀏覽器來(lái)維持。用戶在連接服務(wù)器時(shí),會(huì)由服務(wù)器生成一個(gè)唯一的SessionID,用該SessionID 為標(biāo)識(shí)符來(lái)存取服務(wù)器端的Session存儲(chǔ)空間。而SessionID這一數(shù)據(jù)則是保存到客戶端,用Cookie保存的,用戶提交頁(yè)面時(shí),會(huì)將這一 SessionID提交到服務(wù)器端,來(lái)存取Session數(shù)據(jù)。
           
            
            服務(wù)器也可以通過(guò)URL重寫的方式來(lái)傳遞SessionID的值,因此不是完全依賴Cookie。如果客戶端Cookie禁用,則服務(wù)器可以自動(dòng)通過(guò)重寫URL的方式來(lái)保存Session的值,并且這個(gè)過(guò)程對(duì)程序員透明。可以試一下,即使不寫Cookie,在使用request.getCookies();取出的Cookie數(shù)組的長(zhǎng)度也是1,而這個(gè)Cookie的名字就是JSESSIONID,還有一個(gè)很長(zhǎng)的二進(jìn)制的字符串,是SessionID的值。

          re: 面試題 BlueSunshine 2008-06-18 12:41  
          HashMap和Hashtable的區(qū)別
           
            Hashtable繼承自Dictionary類(Dictionary類也實(shí)現(xiàn)了Map 接口),而HashMap是Java1.2引進(jìn)的Map interface的一個(gè)實(shí)現(xiàn)類。他們都實(shí)現(xiàn)了Map接口。Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會(huì)有很大的差異。

            區(qū)別1:HashMap允許將null作為一個(gè)entry(名值對(duì))的key或者value,由于非線程安全,效率上可能高于Hashtable,而Hashtable不允許。HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因?yàn)閏ontains方法容易讓人引起誤解。

            區(qū)別2:Hashtable的方法是Synchronize的,而HashMap不是,在多個(gè)線程訪問(wèn)Hashtable時(shí),不需要自己為它的方法實(shí)現(xiàn)同步,而HashMap 就必須為之提供外同步。
          re: 面試題 BlueSunshine 2008-06-18 12:26  
          final, finally, finalize的區(qū)別

          final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
          finally是異常處理語(yǔ)句結(jié)構(gòu)(可選的)的一部分,表示總是執(zhí)行。try{}catch(){}finally{}
          finalize是Object類的一個(gè)方法,在垃圾收集器執(zhí)行的時(shí)候會(huì)調(diào)用被回收對(duì)象的此方法,可以覆蓋此方法提供垃圾收集時(shí)的其他資源回收,例如關(guān)閉文件等。
          re: 面試題 BlueSunshine 2008-06-18 12:23  
          collection 與 collections 的區(qū)別

           Collection是集合的接口(不包括 map), set 和 list 這兩個(gè)接口繼承了 collection 接口;
          Collections是針對(duì)集合類的一個(gè)幫助類,他提供一系列靜態(tài)方法實(shí)現(xiàn)對(duì)各種集合的搜索、排序、線程安全化等操作。
          JDK (Java Development Kit) -java開(kāi)發(fā)環(huán)境
          JDK 是整個(gè)Java的核心,包括了Java運(yùn)行環(huán)境(Java Runtime Envirnment),一堆Java工具和Java基礎(chǔ)的類庫(kù)(rt.jar)。不論什么Java應(yīng)用服務(wù)器實(shí)質(zhì)都是內(nèi)置了某個(gè)版本的JDK。因此掌握 JDK是學(xué)好Java的第一步。最主流的JDK是Sun公司發(fā)布的JDK,除了Sun之外,還有很多公司和組織都開(kāi)發(fā)了自己的JDK,例如IBM公司開(kāi)發(fā)的JDK,BEA公司的Jrocket,還有GNU組織開(kāi)發(fā)的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)運(yùn)行效率要比Sun JDK包含的JVM高出許多。而專門運(yùn)行在x86平臺(tái)的Jrocket在服務(wù)端運(yùn)行效率也要比Sun JDK好很多。但不管怎么說(shuō),我們還是需要先把Sun JDK掌握好。
          UML 與 Rose

          UML : 學(xué)習(xí)用書中的圖示
           標(biāo)準(zhǔn)建模語(yǔ)言UML的重要內(nèi)容可以由下列五類圖(共9種圖形)來(lái)定義:用例圖,靜態(tài)圖 (Static diagram),行為圖(Behavior diagram),交互圖(Interactive diagram),實(shí)現(xiàn)圖 ( Implementation diagram )。

          Rose : 用來(lái)作UML 的工具
          Portal (特點(diǎn):?jiǎn)吸c(diǎn)登錄,網(wǎng)頁(yè)集成)
          英文字面是“入口”,國(guó)內(nèi)有叫“門戶”技術(shù)的,Portal是一個(gè)基于web的應(yīng)用程序,它主要提供個(gè)性化、單點(diǎn)登錄、不同來(lái)源的內(nèi)容整合以及存放信息系統(tǒng)的表示層。
          Portal有什么標(biāo)準(zhǔn)?
          為規(guī)范Portal,SUN于2003年底制定了JSR168,它定義了Portlet標(biāo)準(zhǔn),并給出了一個(gè)實(shí)現(xiàn)接口。
          什么是Portlet?
          Portlet是基于java技術(shù)的web組件,它由Portlet容器管理、并處理請(qǐng)求,并動(dòng)態(tài)生成輸出內(nèi)容。Portlet是基于java的web組 件,由Portlet容器管理,并由容器處理請(qǐng)求,生產(chǎn)動(dòng)態(tài)內(nèi)容。Portals使用Portlets作為可插拔用戶接口組件,提供信息系統(tǒng)的表示層。作 為利用servlets進(jìn)行web應(yīng)用編程的下一步,Portlets實(shí)現(xiàn)了web應(yīng)用的模塊化和用戶中心化。Portlet規(guī)范,即jsr(java specification request)168,是為了實(shí)現(xiàn)portal和Portlet的互操作。它定義了Portlet和Portlet容器之間的和約,讓Portlet實(shí) 現(xiàn)個(gè)性化、表示和安全的api集。規(guī)范還定義了怎樣在Portlets應(yīng)用中打包Portlets。
          Portal有什么特色?
          低成本的集成技術(shù)。如果你的網(wǎng)站或企業(yè)已經(jīng)有了很多信息系統(tǒng),Portal可以很容易的將這些系統(tǒng)集成起來(lái),并以統(tǒng)一的方式提供給用戶,統(tǒng)一可以有流程的 統(tǒng)一,如:登陸、定制、瀏覽;界面的統(tǒng)一,如:顯示風(fēng)格登高度的模塊化。通過(guò)Portal技術(shù)提供的plugin技術(shù),可以根據(jù)企業(yè),網(wǎng)友的需求編制標(biāo)準(zhǔn) 的模塊,并嵌入Portal系統(tǒng),供企業(yè)、網(wǎng)友使用。高度的擴(kuò)展性,已經(jīng)有了很多產(chǎn)品和標(biāo)準(zhǔn)來(lái)制定Portal,作為這些產(chǎn)品和標(biāo)準(zhǔn),如:jsr- 168,通過(guò)Portlet的概念來(lái)對(duì)Portal的功能進(jìn)行擴(kuò)展。
          Portal有什么用?
          個(gè)人認(rèn)為從兩個(gè)方面。一是針對(duì)跟人(網(wǎng)友)的應(yīng)用。由于Portal的特色,企業(yè)和網(wǎng)站可以很容易的將自己的服務(wù)進(jìn)行標(biāo)準(zhǔn)封裝,插入Portal系統(tǒng),提 供跟用戶使用。現(xiàn)在很多門戶網(wǎng)站和專業(yè)網(wǎng)站有很多服務(wù),但是很多服務(wù)用戶根本就沒(méi)有使用過(guò)、發(fā)現(xiàn)過(guò),通過(guò)Portal的形式給用戶一個(gè)集中體驗(yàn)的場(chǎng)所。二 是針對(duì)企業(yè),企業(yè)可以將現(xiàn)有的信息系統(tǒng),資源通過(guò)Portal來(lái)進(jìn)行封裝,提供給用戶使用。比如:有些公司有報(bào)銷系統(tǒng),考核系統(tǒng),會(huì)議系統(tǒng),但這些系統(tǒng)都 是彼此分離的,使用和界面并不統(tǒng)一,通過(guò)Portal可以很容易地將這些系統(tǒng)提供的服務(wù)封裝并呈給用戶使用。
          http://hi.baidu.com/wikiweb/blog/item/82edd01329deec035aaf53b1.html
          CMS

          CMS是Content Management System 的簡(jiǎn)寫
          簡(jiǎn)單的說(shuō):CMS是一個(gè)內(nèi)容管理系統(tǒng)

          一個(gè)內(nèi)容管理系統(tǒng)是把一個(gè)網(wǎng)站的內(nèi)容(文字,圖片,等等)與網(wǎng)站的組件分離開(kāi)來(lái),可以將各個(gè)頁(yè)面連接到一起,可以控制頁(yè)面的顯示。通過(guò)這個(gè)系統(tǒng),可以方便的管理,發(fā)布,維護(hù)網(wǎng)站的內(nèi)容,而不再需要硬性的寫HTML代碼或手工建立每一個(gè)頁(yè)面。

          內(nèi)容管理系統(tǒng)被分離成以下幾個(gè)層面:各個(gè)層面優(yōu)先考慮的需求不同

          1,后臺(tái)業(yè)務(wù)子系統(tǒng)管理(管理優(yōu)先:內(nèi)容管理):新聞錄入系統(tǒng),BBS論壇子系統(tǒng),全文檢索子系統(tǒng)等,針對(duì)不同系統(tǒng)的方便管理者的內(nèi)容錄入:所見(jiàn)即所得的編輯管理界面等,清晰的業(yè)務(wù)邏輯:各種子系統(tǒng)的權(quán)限控制機(jī)制等;

          2,Portal系統(tǒng)(表現(xiàn)優(yōu)先:模板管理):大部分最終的輸出頁(yè)面:網(wǎng)站首頁(yè),子頻道/專題頁(yè),新聞詳情頁(yè)一般就是各種后臺(tái)子系統(tǒng)模塊的各種組合,這種發(fā)布組合邏輯是非常豐富的,Portal系統(tǒng)就是負(fù)責(zé)以上這些后臺(tái)子系統(tǒng)的組合表現(xiàn)管理;

          3,前臺(tái)發(fā)布(效率優(yōu)先:發(fā)布管理):面向最終用戶的緩存發(fā)布,和搜索引擎spider的URL設(shè)計(jì)等……

          ORM



               對(duì)象關(guān)系映射Object Relational Mapping,簡(jiǎn)稱ORM)是一種為了解決面向?qū)ο?/a>與關(guān)系數(shù)據(jù)庫(kù)存在的互不匹配的現(xiàn)象的技術(shù)。 簡(jiǎn)單的說(shuō),ORM是通過(guò)使用描述對(duì)象和數(shù)據(jù)庫(kù)之間映射的元數(shù)據(jù),將java程序中的對(duì)象自動(dòng)持久化到關(guān)系數(shù)據(jù)庫(kù)中。本質(zhì)上就是將數(shù)據(jù)從一種形式轉(zhuǎn)換到另外一種形式。 這也同時(shí)暗示者額外的執(zhí)行開(kāi)銷;然而,如果ORM作為一種中間件實(shí)現(xiàn),則會(huì)有很多機(jī)會(huì)做優(yōu)化,而這些在手寫的持久層并不存在。 更重要的是用于控制轉(zhuǎn)換的元數(shù)據(jù)需要提供和管理;但是同樣,這些花費(fèi)要比維護(hù)手寫的方案要少;而且就算是遵守ODMG規(guī)范的對(duì)象數(shù)據(jù)庫(kù)依然需要級(jí)別的元數(shù)據(jù)。


                對(duì)象-關(guān)系映射Object/Relation Mapping,簡(jiǎn)稱ORM),是隨著面向?qū)ο蟮?/span>軟件開(kāi)發(fā)方法發(fā)展而產(chǎn)生的。面向?qū)ο蟮拈_(kāi)發(fā)方法是當(dāng)今企業(yè)級(jí)應(yīng)用開(kāi)發(fā)環(huán)境中的主流開(kāi)發(fā)方法,關(guān)系數(shù)據(jù)庫(kù)是企業(yè)級(jí)應(yīng)用環(huán)境中永久存放數(shù)據(jù)的主流數(shù)據(jù)存儲(chǔ)系統(tǒng)。對(duì)象和關(guān)系數(shù)據(jù)是業(yè)務(wù)實(shí)體的兩種表現(xiàn)形式,業(yè)務(wù)實(shí)體在內(nèi)存中表現(xiàn)為對(duì)象,在數(shù)據(jù)庫(kù)中表現(xiàn)為關(guān)系數(shù)據(jù)。內(nèi)存中的對(duì)象之間存在關(guān)聯(lián)和繼承關(guān)系,而在數(shù)據(jù)庫(kù)中,關(guān)系數(shù)據(jù)無(wú)法直接表達(dá)多對(duì)多關(guān)聯(lián)和繼承關(guān)系。因此,對(duì)象-關(guān)系映射(ORM)系統(tǒng)一般以中間件的形式存在,主要實(shí)現(xiàn)程序?qū)ο蟮疥P(guān)系數(shù)據(jù)庫(kù)數(shù)據(jù)的映射。


                面向?qū)ο笫菑?/span>軟件工程基本原則(如耦合、聚合、封裝)的基礎(chǔ)上發(fā)展起來(lái)的,而關(guān)系數(shù)據(jù)庫(kù)則是從數(shù)學(xué)理論發(fā)展而來(lái)的,兩套理論存在顯著的區(qū)別。為了解決這個(gè)不匹配的現(xiàn)象,對(duì)象關(guān)系映射技術(shù)應(yīng)運(yùn)而生。


                讓我們從O/R開(kāi)始。字母O起源于"對(duì)象"(Object),而R則來(lái)自于"關(guān)系"(Relational)。幾乎所有的程序里面,都存在對(duì)象和關(guān)系數(shù)據(jù)庫(kù)。在業(yè)務(wù)邏輯層和用戶界面層中,我們是面向?qū)ο蟮摹.?dāng)對(duì)象信息發(fā)生變化的時(shí)候,我們需要把對(duì)象的信息保存在關(guān)系數(shù)據(jù)庫(kù)中。




          目前流行的 ORM 產(chǎn)品


                目前眾多廠商和開(kāi)源社區(qū)都提供了持久層框架的實(shí)現(xiàn),常見(jiàn)的有:


                Apache OJB (http://db.apache.org/ojb/)

                Cayenne (http://objectstyle.org/cayenne/)

                Jaxor (http://jaxor.sourceforge.net) 

                Hibernate (http://www.hibernate.org) 被JBoss收購(gòu)

                iBatis (http://www.ibatis.com) Apache的

                jRelationalFramework (http://ijf.sourceforge.net)

                mirage (http://itor.cq2.org/en/oss/mirage/toon)

                SMYLE (http://www.drjava.de/smyle)

                TopLink (http://otn.
          oracle.com/products/ias/toplink/index.html)


                其中 TopLink 是 Oracle 的商業(yè)產(chǎn)品,其他均為開(kāi)源項(xiàng)目。






          http://www.itisedu.com/phrase/200604231312115.html
          re: 隨時(shí)想到的問(wèn)題 BlueSunshine 2008-06-11 18:13  
          什么是J2EE?什么是EJB?



          1 什么是J2EE?它和普通的Java有什么不同?

          答:J2EE全稱為Java2 Platform, Enterprise Edition。

          “J2EE平臺(tái)本質(zhì)上是一個(gè)分布式的服務(wù)器應(yīng)用程序設(shè)計(jì)環(huán)境——一個(gè)Java環(huán)境,它提供了:

          ·宿主應(yīng)用的一個(gè)運(yùn)行基礎(chǔ)框架環(huán)境。

          ·一套用來(lái)創(chuàng)建應(yīng)用的Java擴(kuò)展API。”(引自《J2EE服務(wù)器端高級(jí)編程》)



          J2EE的核心規(guī)范是 Enterprise Java Beans(EJBs)。EJB依照特性的不同,目前共分為三種,分別是Session Bean(遠(yuǎn)程調(diào)用)、Entity Bean(實(shí)體Bean,可看作Hibernate),以及 Message Driven Bean(消息驅(qū)動(dòng)Bean,接收消息再進(jìn)一步干活的) 。其中 Session Bean 與Entity Bean 算是EJB的始祖,這兩種EJB規(guī)格在EJB 1.x版本推出時(shí)就已經(jīng)存在,而Message Driven Bean則是出現(xiàn)在EJB 2.0的規(guī)格之中。



          http://zhidao.baidu.com/question/2424990.html?fr=qrl



          re: 建 English 項(xiàng)目遇到的問(wèn)題 BlueSunshine 2008-06-10 14:57  
          11 表"word"引入 sequence   
            表"word" 的"wordId" 列是自動(dòng)生成的,要用 sequence 。  
            在"word" 表對(duì)應(yīng)的 java 文件中,加入:
          @GeneratedValue(strategy = GenerationType.SEQUENCE)


          -------------下面是結(jié)果


          @Id
              @Column(name 
          = "WORD_ID", nullable = false, precision = 10, scale = 0)
              @GeneratedValue(strategy 
          = GenerationType.SEQUENCE)
              
          public int getWordId() {
                  
          return this.wordId;
              }
          這樣就可以了
          re: 建 English 項(xiàng)目遇到的問(wèn)題 BlueSunshine 2008-06-10 14:32  
          10 兩表關(guān)連
            第一次用兩到表的關(guān)連,在"word"表里有"userId"這一列,而這列來(lái)自表"user"。用 Hibernate 生成的兩個(gè)表對(duì)應(yīng)文件和之前的不同,可能在取值的時(shí)候方便一些,還沒(méi)用到,只是想法。

            期待中......
          re: 建 English 項(xiàng)目遇到的問(wèn)題 BlueSunshine 2008-06-10 10:23  
          8 “登錄失敗”的問(wèn)題

          topLogin.jsp:(template 里的 "top" 部分)
          <%@page import="com.english.user.EnglishUser;"%>
          <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

          <%
              EnglishUser englishUser 
          = (EnglishUser) session.getAttribute("englishUser");
              
          String englishUserId = "游客";
              
          if (englishUser != null)
                  englishUserId 
          = englishUser.getUserid();
          %>
          <table background="img/beijing_flower.jpg" width="1024" height="228">
              
          <tr>
                  
          <td>Welcome to 'Sunshine zone'!登錄身份:<%=englishUserId%></td>
              
          </tr>
              
          <c:if test="${sessionScope.englishUser!=null}">
                  
          <tr>
                      
          <td><href="logout.do">logout</a></td>
                  
          </tr>
              
          </c:if>
          </table>

          在“登錄失敗”后 "logout" 對(duì)應(yīng)的 <td> 出現(xiàn)在頁(yè)面上,問(wèn)題出在:
          雖然 session 為 null ,但是 request 里面有 englishUser ,所以在同名的情況出錯(cuò)。(為框架沖突)
          解決方法:
          <c:if test="${sessionScope.englishUser!=null}">
          給出范圍,只找session 類型的 englishUser
          re: 建 English 項(xiàng)目遇到的問(wèn)題 BlueSunshine 2008-06-10 09:24  
          7 完成了UserController, UserDAO, UserService 及對(duì)應(yīng)的靜態(tài)頁(yè)

          EnglishUserController:
          package com.english.controller;

          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpSession;

          import org.springframework.beans.factory.annotation.Autowired;
          import org.springframework.stereotype.Controller;
          import org.springframework.web.bind.annotation.RequestMapping;

          import com.english.user.EnglishUser;
          import com.english.user.EnglishUserService;
          import com.english.user.LoginException;

          @Controller
          public class EnglishUserController {
              
          //自動(dòng)寫入
              @Autowired
              
          private EnglishUserService englishUserService;

              @RequestMapping(
          "/register.do")
              
          public String addEnglishUser(HttpServletRequest req, EnglishUser englishUser) {
                  englishUserService.addEnglishUser(englishUser);
                  req.getSession().setAttribute(
          "englishUser", englishUser);
                  
          return "index";

              }


              @RequestMapping(
          "/login.do")
              
          public String loginEnglishUser(HttpSession session, EnglishUser englishUser) {
                  
          try {
                      EnglishUser englishUserTest 
          = englishUserService.vefifyEnglishUser(englishUser);
                      session.setAttribute(
          "englishUser", englishUserTest);
                      
          return "index";
                  }
           catch (LoginException e) {
                      
          return "loginFail";
                  }

              }


              @RequestMapping(
          "/logout.do")
              
          public String logout(HttpSession session) {
                  
          //session.removeAttribute("englishUser");之前寫的是這句,下面的是自己新想出來(lái)的
                  session.setAttribute("englishUser"null);
                  
          return "index";
              }


              
          public EnglishUserService getEnglishUserService() {
                  
          return englishUserService;
              }


              
          public void setEnglishUserService(EnglishUserService englishUserService) {
                  
          this.englishUserService = englishUserService;
              }

          }


          錯(cuò)誤之一,沒(méi)在
          "private EnglishUserService englishUserService"前面加標(biāo)注:
           @autowired
          re: 隨時(shí)想到的問(wèn)題 BlueSunshine 2008-06-06 22:48  
          理解error和exception之間的區(qū)別

          exception 就是:“在程序執(zhí)行中所發(fā)生的中斷了正常指令流的事件(An exception is an event that occurs during the execution of a program that disrupts the normal flow of instructions.)”
          error就是:“效果或情況背離了可接受的一般法則(The act or an instance of deviating from an accepted code of behavior.)

          Error表示系統(tǒng)級(jí)的錯(cuò)誤和程序不必處理的異常,
          Exception表示需要捕捉或者需要程序進(jìn)行處理的異常。

           

          簡(jiǎn)要的敘述errorexception

          ErrorException都繼承自Throwable,他們下列不同處:

          Exceptions

          1.可以是 可被控制(checked) 不可控制的(unchecked)

          2.表示一個(gè)由程序員導(dǎo)致的錯(cuò)誤

          3.應(yīng)該在應(yīng)用程序級(jí)被處理

          Errors

          1.總是 不可控制的(unchecked)

          2.經(jīng)常用來(lái)用于表示系統(tǒng)錯(cuò)誤或低層資源的錯(cuò)誤

          3.如何可能的話,應(yīng)該在系統(tǒng)級(jí)被捕捉

          re: 建 English 項(xiàng)目遇到的問(wèn)題 BlueSunshine 2008-06-04 10:24  
          6 Spring 與 Hibernate 的集成

          在 beans.xml 加入: 
          <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
                  
          <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
                  
          <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
                  
          <property name="username" value="yiqi" />
                  
          <property name="password" value="haha" />
              
          </bean>
              
              
          <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
                  
          <property name="dataSource" ref="myDataSource"></property>
                  
          <property name="hibernateProperties">
                      
          <props>
                          
          <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
                          
          <prop key="hbm2ddl.auto">create</prop>
                          
          <prop key="current_session_context_class">thread</prop>
                      
          </props>
                  
          </property>
                  
          <property name="annotatedClasses">
                      
          <list>
                          
          <value>com.english.user.EnglishUser</value>
                          
          <value>com.english.word.EnglishWord</value>
                      
          </list>
                  
          </property>
              
          </bean>
              
          <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
                  
          <property name="dataSource" ref="myDataSource"></property>
                  
          <property name="sessionFactory" ref="sessionFactory"></property>
              
          </bean>
              
          <tx:annotation-driven/>
              
          <context:component-scan base-package="com.english.controller"></context:component-scan>


          行啊,文筆見(jiàn)長(zhǎng)啊!
          怪不得這幾天下班回家就吵吵著吃晚飯,吃完了就在電腦前面發(fā)呆,瞅都不瞅我一眼,原來(lái)是等著盼著見(jiàn)C呀!
          c再好,能有我穩(wěn)定?!天天雷打不動(dòng)地伺候你老人家一日三餐(休息日減半)啊!
          re: [轉(zhuǎn)]開(kāi)心星座 BlueSunshine 2007-08-08 14:45  
          好有意思,尤其是看到處女座的,(我老公的星座)笑得不行了!轉(zhuǎn)來(lái)了給愛(ài)上blogjava 的老公看看~~
          主站蜘蛛池模板: 肇源县| 古丈县| 凤阳县| 台北市| 平度市| 泗阳县| 鄯善县| 吕梁市| 旺苍县| 长海县| 邢台县| 苏尼特右旗| 曲麻莱县| 瓦房店市| 含山县| 梅州市| 沧源| 当雄县| 石屏县| 于田县| 内乡县| 宁海县| 赤城县| 剑川县| 郁南县| 黄山市| 泊头市| 荣成市| 和田县| 沙河市| 哈巴河县| 志丹县| 瓦房店市| 台前县| 财经| 松江区| 望城县| 瑞丽市| 富顺县| 翁牛特旗| 蒙阴县|