第三階段
流行MVC架構和Java對象持久化技術。包括Struts、Spring、Hibernate。
要求:
MVC-------理解MVC設計模式、處理過程。(其實jsp+servlet+javaBean就是一個最基本的MVC框架)
Struts-------理解Struts實現MVC的機制、工作流程。掌握配置Struts應用、(Struts-Config.xml,ActionAction、ActionForm)的運用,Struts應用的國際化(感覺就是標簽加配置文件,property那個文件)、Validator驗證框架(可以聯系下JS)、Struts標簽庫。
Spring-------掌握控制反轉(IoC),也就是DI,然后是面向方面編程(AOP),其他的晃一眼。。。
Hibernate--------理解ORM,掌握映射對象標識符、映射關系(一對多、多對多、一對一)、映射類型、檢索策略、檢索方式、數據庫事務與并發、管理Hibernate的緩存。 (可以和EJB里面的EntityBean對起來看)
學習過程:先學習Struts,再學習Hibernate,最后學Spring,再最后把幾個框架結合在一起,注意XML的配置。。。還有注意要積累對一些常見的異常的處理方法。總的來說,我覺得框架就是會使用就行了,平時多去想想它帶來的好處,也就是為啥子要用它們,也就是它們的一些思想,比如說spring的DI,使用了框架后的松耦合等等。
有時間的話,看一下ajax,JSF,webwork,有用的東西。對了,還有CVS等一些版本控制工具。(這些都是霸霸說的^_^)
posted @
2007-01-31 00:28 xrzp 閱讀(636) |
評論 (1) |
編輯 收藏
第二階段:
JAVA網絡編程(Socket)、HTML、XML、JSP、JavaBean、Servlet(后面3個是重點)。
要求:
Socket--------掌握java.io包中的套接口類和服務器套接口類的使用。
HTML--------了解HTML語言的語法、各種標簽。
XML--------掌握XML語言的語法,其他的了解下。
JSP-------掌握JSP2.0語法、五大元素、內置對象、EL、JSTL1.1、JSP自定標簽。
JavaBean-------理解JavaBean的特點和事件模型。
Servlet---------掌握HTTP協議、Servlet工作過程、Servlet會話跟蹤、Servlet過濾器、Serlvet事件偵聽器、配置web.xml。
PS:-------學習過程中學會使用Tomcat、JBoss服務器,學習使用myeclipse、dreamweaver、junit開發工具。
另外,關注一下EJB3.0。
posted @
2007-01-31 00:15 xrzp 閱讀(565) |
評論 (0) |
編輯 收藏
自己看了幾個月JAVA的體會:框架的東西隨時會變,而基礎是不變的;所以基礎很重要。
第一階段:
JAVA語言基礎知識。包括異常、IO流、多線程、集合類。常見的幾個包、幾個接口。
要求:
異常------掌握try-catch-finally的使用
IO流------掌握字節流、字符流和對象序列化的處理。熟練使用各種輸入、輸出流類(InputStream、OutputStream、FileInputStream、FileOutputStream、DataInputStream、DataOutputStream、BufferedInputStream、BufferedOutputStream、Reader、Writer、InputStreamReader、OutputStreamWriter、BufferReader、BufferedWriter、ObjectInputStream、ObjectOutputStream)。
多線程-------掌握多線程實現的兩種實現方法,分別是繼承Thread類與實現Runnable接口。理解線程間的同步與互斥。
集合類-------掌握Set、Collection、Map、List、Iterator、Enumeration接口的使用,掌握HashSet、ArrayList、Vector、HashMap、HashTable類的使用。
常用的包:java.lang,java.util,java.io,java.net,java.awt,javax.swing
另外-------理解Unicode、GB2132、GBK、UTF-8、ISO8859編碼方式。以及怎么處理亂碼的方法。
了解javase1.5新增的內容:自動裝箱/拆箱,泛型之類的。
posted @
2007-01-31 00:05 xrzp 閱讀(446) |
評論 (0) |
編輯 收藏
近日在論壇上看到有人在問星期算法,特別整理了一下,這些算法都是從網上搜索而來。希望對大家有所幫助。
一:常用公式
W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D
Y是年份數,D是這一天在這一年中的累積天數,也就是這一天在這一年中是第幾天。
二:蔡勒(Zeller)公式
w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
公式中的符號含義如下,w:星期;c:世紀;y:年(兩位數); m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月來計算,比如2003年1月1日要看作2002年的13月1日來計算);d:日;[ ]代表取整,即只要整數部分。
相比于通用通用計算公式而言,蔡勒(Zeller)公式大大降低了計算的復雜度。
三:對蔡勒(Zeller)公式的改進
作者:馮思琮
相比于另外一個通用通用計算公式而言,蔡勒(Zeller)公式大大降低了計算的復雜度。不過,筆者給出的通用計算公式似乎更加簡潔(包括運算過程)。現將公式列于其下:
W=[y/4]+r (y/7)-2r(c/4)+m’+d
公式中的符號含義如下,r ( )代表取余,即只要余數部分;m’是m的修正數,現給出1至12月的修正數1’至12’如下:(1’,10’)=6;(2’,3’,11’)=2;(4’,7’)=5;5’=0;6’=3;8’=1;(9’,12’)=4(注意:在筆者給出的公式中,y為潤年時1’=5;2’=1)。其他符號與蔡勒(Zeller)公式中的含義相同。
四:基姆拉爾森計算公式
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
在公式中d表示日期中的日數,m表示月份數,y表示年數。
注意:在公式中有個與其他公式不同的地方:
把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10則換算成:2003-13-10來代入公式計算。
posted @
2007-01-16 23:07 xrzp 閱讀(1923) |
評論 (3) |
編輯 收藏
先來個小總結:
yield()使當前線程暫停。但設置了setPriority(Thread.MAX_PRIORITY);時,yield()不咋管用了。
一般只需要重寫run()方法的話,實現runnalbe接口比較方便。
如果在進程類里面需要訪問同一個變量的話,就實現接口。如果用繼承類的話,同一個變量就有幾份的拷貝。但是內部類繼承類的結和繼承接口的效果一樣。
啟動一個線程
MyThread mt=new MyThread();
new Thread(mt).start();
好多東西都有時間片。時間片是個不確定的東西。
當調用wait(),notify()方法時,應該保證他們是同一個對象sy也要同一個對象。synchronized 中 才能有wait(),notify()方法。
synchronized(Object obj)與synchronized(this)的區別?!(誰能告訴我!!!!!)
下面是生產者與消費者的例子,為了方便,幾個類直接寫在一起了。
//new 生產者,消費者,隊列。并起用生產者,消費者的線程
public class Test {
?public static void main(String[] args) {
??Queue q = new Queue();
??Producer p = new Producer(q);
??Consumer c = new Consumer(q);
??p.start();
??c.start();
?}
}
//生產者,每生產好一個東西后,就往隊列中放一個
class Producer extends Thread {
?Queue q;
?Producer(Queue q) {
??this.q = q;
?}
?public void run() {
??for (int i = 0; i < 10; i++) {
???q.setValue(i);
???System.out.println("Producer put:" + i);
??}
?}
}
//消費者,每當隊列中有東西通知時,就從隊列去拿
class Consumer extends Thread {
?Queue q;
?Consumer(Queue q) {
??this.q = q;
?}
?public void run() {
??while (true) {
???System.out.println("Consumer get:" + q.getValue());
??}
?}
}
//隊列
class Queue {
?int value;
?boolean flag = false;
?//生產者往這放它所生產的東西
?public synchronized void setValue(int i) {
??//當生產好一個往隊列中放了后,放置一個標志。發個通知,告訴說生產好了,并等待消費者來拿
??if (!flag) {
???value = i;
???flag = true;
???notify();
??}
??try {
???wait();
??} catch (InterruptedException e) {
???e.printStackTrace();
??}
?}
?//消費者從這獲取東西
?public synchronized int getValue() {
??//消費這先判斷隊列是否有東西了,有的話,就讓其他線程等待,自己取拿,拿好后設置一個標志,發個通告告訴其他線程,我拿好了
??if (!flag) {
???try {
????wait();
???} catch (InterruptedException e) {
????e.printStackTrace();
???}
??}
??flag = false;
??notify();
??return value;
?}
}
posted @
2007-01-15 00:27 xrzp 閱讀(851) |
評論 (0) |
編輯 收藏
1.
集合框架分為Collection和Map。Collection包括set和List。
2.
Collection:集合層次中的根接口,JDK沒有提供這個接口直接的實現類。
Set:不能包含重復的元素。SortedSet是一個按照升序排列元素的Set。
List:是一個有序的集合,可以包含重復的元素。提供了按索引訪問的方式。
Map:包含了key-value對。Map不能包含重復的key。SortedMap是一個按照升序排列key的Map。
3.
凡是繼承了collection的接口的,都有iterator的方法。
4.
對于沒有get的集合類,可以用爹帶器。而且爹帶器是通用的。
5.
collections是類,都是靜態的。里面有幾個方法是拿來排序的。(如sort方法)。compared是個比較器。
collection是接口。
6.
Stack里面的pop和push有點像get和set。
Queue和Stack差不多,但是是FIFO。
7.
因為hashset計算出對應的函數值,以這個值作為該結點存儲在散列表中的地址,所以對查找的效率非常高。
實現set接口的能不能重復。
hashset通過散列碼來存儲,而散列碼的獲得靠hashcode來得到。hashcode根據對象的內存的地址來得到散列碼。
8.
hashmap靠put填元素,靠get取元素。HashMap對key進行散列。
三個方法keySet()、values()、entrySet()。
9.
在List的開始處增加元素,或者在List中進行插入和刪除操作,應該使用LinkedList。如果單單是為了查詢,就用ArrayList。因為ArrayList底層采用數組完成,而LinkedList則是以一般的雙向鏈表(double-linked list)完成,其內每個對象除了數據本身外,還有兩個 引用,分別指向前一個元素和后一個元素。
10.
HashSet是基于Hash算法實現的,其性能通常都優于TreeSet。通常都應該使用HashSet,在需要排序的功能時,我們才使用TreeSet。
11.
和Set類似,HashMap的速度通常都比TreeMap快,只有在需要排序的功能的時候,才使用TreeMap。
posted @
2007-01-14 00:40 xrzp 閱讀(356) |
評論 (0) |
編輯 收藏
運行的時候,要先運行server,再運行client。
服務器 :
import?java.io.DataInputStream;
import?java.io.IOException;
import?java.io.InputStream;
import?java.net.*;

public?class?Server?{


????public?static?void?main(String[]?args)?throws?Exception?,?IOException{
????????System.out.println("----Server?start-----");
????????ServerSocket?server=new?ServerSocket(1234);
????????Socket?socket=server.accept();
????????InputStream?is=socket.getInputStream();
????????DataInputStream?dis=new?DataInputStream(is);
????????System.out.println(dis.readUTF());
????????
????????dis.close();
????????is.close();
????}
}

客戶端:
import?java.io.DataOutputStream;
import?java.io.IOException;
import?java.io.OutputStream;
import?java.net.*;

public?class?Client?{


????public?static?void?main(String[]?args)?throws?Exception,?IOException?{
????????System.out.println("----client?is?running-----");
????????Socket?socket=new?Socket("192.168.1.3",1234);
????????OutputStream?os=socket.getOutputStream();
????????DataOutputStream?dos=new?DataOutputStream(os);
????????dos.writeUTF("哈哈");
????????
????????dos.close();
????????os.close();
????}
????
}

posted @
2007-01-14 00:23 xrzp 閱讀(1714) |
評論 (2) |
編輯 收藏
JDBC是一個應用程序編程接口API,它描述了標準的JAVA庫如何使用結構化查詢語言去連接數據源。
我的一個簡單模板:(此處用的是mssql數據庫)
import?java.sql.Connection;
import?java.sql.DriverManager;
import?java.sql.ResultSet;
import?java.sql.SQLException;
import?java.sql.Statement;


public?class?JdbcTest?{
????

????public?void?getConnection()?throws?SQLException,?ClassNotFoundException{
????????
????????Connection?conn=null;
????????Statement?stmt=null;
????????ResultSet?rs=null;
????????
????????String?url?="jdbc:microsoft:sqlserver://localhost:1433:DatabaseName=pubs"?;
????????String?user="sa";
????????String?psw=null;
????????String?sql="select?*?from?authors";
????????
????????Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
????????conn=DriverManager.getConnection(url,user,psw);
????????stmt=conn.createStatement();
????????rs=stmt.executeQuery(sql);
????????

????????if?(rs.next()){
????????????System.out.println("connection?is?ok!");
????????}

????????else{
????????????System.out.println("connection?is?fail!");
????????}
????????
????????rs.close();
????????stmt.close();
????????conn.close();
????}
????

????public?static?void?main(String[]?args)?throws?Exception?{
????????JdbcTest?test=new?JdbcTest();
????????test.getConnection();
????}
}PS: 因為偷懶,所以直接對有異常的地方采用的是拋出異常,并沒捕獲。
三大數據庫的驅動和URL:
MYSQL:
driver是?org.gjt.mm.mysql.driver
?url是?jdbc:mysql://ip:port:databasename
ORACLE
driver是?oracle.jdbc.driver.oracledriver
?url是?jdbc:oracle:thin@ip:port:sid
MSSQL
driver是?com.microsoft.jdbc.sqlserver.SQLServerDriver
?url是?jdbc:microsoft:sqlserver://ip:port
posted @
2007-01-12 22:11 xrzp 閱讀(538) |
評論 (0) |
編輯 收藏
Java Bean 是可復用的組件,對Java Bean并沒有嚴格的規范,理論上講,任何一個Java類都可以是一個Bean。但通常情況下,由于Java Bean是被容器所創建(如Tomcat)的,所以Java Bean應具有一個無參的構造器,另外,通常Java Bean還要實現Serializable接口用于實現Bean的持久性。Java Bean實際上相當于微軟COM模型中的本地進程內COM組件,它是不能被跨進程訪問的。Enterprise Java Bean 相當于DCOM,即分布式組件。它是基于Java的遠程方法調用(RMI)技術的,所以EJB可以被遠程訪問(跨進程、跨計算機)。但EJB必須被布署在諸如Webspere、WebLogic這樣的容器中,EJB客戶從不直接訪問真正的EJB組件,而是通過其容器訪問。EJB容器是EJB組件的代理,EJB組件由容器所創建和管理。客戶通過容器來訪問真正的EJB組件。
3與2的區別:3沒有實體Bean(底層用的hibernate),也沒有HOME工廠(用的DI機制了,貌似spring就跟它混的)。
用EJB的原因:1:負載均衡 2:對象池 3:單線程
posted @
2007-01-10 00:00 xrzp 閱讀(554) |
評論 (0) |
編輯 收藏
很多時候會遇到這樣的情況:數據庫里面的日期是date型的,而我們從jsp頁面獲取的日期是String型的,2者之間會有一個轉換的問題。轉換的方法如下(2種):
1。
2。
????????Date?date=new?Date();
????????SimpleDateFormat?sdf?=new?SimpleDateFormat("yy-MM-dd");

????????try?{
????????????sdf.parse(date);

????????}?catch?(ParseException?e)?{
????????????e.printStackTrace();
????????}????????????PS:
1。建議在數據庫里面將日期也設成String(varchar2)型的,然后在jsp里面有關日期的地方,用js來操作,這樣會避免一定的麻煩。
2。一般來說,經過上面的處理后,日期在jsp頁面的顯示格式是yy-MM-dd 00:00:00。你覺得不好看的話,如果用的是ssh框架,那么可以在相應的hbm.xml中將相應的 <property name="xxxx" type="time">中的type改為type="date"。那么顯示的日期格式就只有年月日了。
posted @
2007-01-05 00:44 xrzp 閱讀(678) |
評論 (3) |
編輯 收藏