2005年8月12日
摘要: 今天看了一天原來他們寫的代碼,越看越郁悶,主要是沒有設計文檔,而且里面很多被舍棄的功能,但是代碼沒有去掉,而且也沒有寫注釋,不知道干什么用的,也許是我太菜了吧?簡單分析一下這個模塊的代碼吧模塊名稱叫“信息簡報 ”,功能包括五個部分:信息接受,信息發送,分類管理,組管理,權限配置。其中用戶部分會用到公共模塊,日志部分就是直接使用System.out.pring通過JBOSS輸出...
閱讀全文
2005年8月11日
摘要: 今天老大給了我一個任務,要我一個星期之內看懂一個模塊的代碼。打開第一個類就遇到了JDBC,數據庫還是Oracle,2個都不懂,只好先學習一下JDBC這個東西JDBCTM 是一種用于執行 SQL 語句的 JavaTM API(有意思的是,JDBC 本身是個商標名而不是一個縮寫字;然而,JDBC常被認為是代表 “Java ...
閱讀全文
2005年8月10日
從今天開始,我準備把GOF的23種設計模式重新學習一下,并且用Java語言全部描述一次。
Abstract Factory(抽象工廠) 對象創建型模式
提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。
2005年8月9日
今天把Structs和EJB稍微了解了一下。
Structs是apache 組織jakarta 項目的一個子項目,用以改善 web 系統的結構,是一個基于J2EE的Web形式MVC模式實現。Structs是由一組類、Servlet和Taglib組成。Structs有其自己的控制器(Controller),基本組件是ActionServlet中定義的Servlet,由ActionMapping定義的,ActionMapping類表示的是Action對象的名字和位置。當一個請求進入控制器時,它將請求的路徑映射到Action的位置,并且將請求傳送給Action。Structs另外一個重要部分是標簽(TagLib),主要由頁面制作人員使用。
EJB(Enterprise JavaBean ) 是設計成運行在服務器上,并由客戶機調用的非可視遠程對象。可通過多個非可視 JavaBean 構建 EJB。它們有一個部署描述符,其目的與 JavaBean 屬性相同:它是以后可由工具讀取的 bean 的描述。EJB 還獨立于平臺,一旦編寫好,還可以在任何支持 Java 的平臺(包括客戶機和服務器)上使用。

如果不使用EJB,在EJB服務層實現的業務核心將由普通JavaBeans實現,不能很好的保證負責MVC的JavaBeans和負責業務核心的JavaBeans清晰地分開。
采用EJB,Web完全只是一個MVC模式的實現,關鍵業務核心是在EJB的服務層實現,這樣做的優點是,Web只負責界面相關部分,因為,如果是一個智能客戶端,如Swing或J2ME,在不需要修改任何業務核心的情況下能夠方便地更換。同樣,提供Web Services功能,也只是在 Web層修改,不會涉及EJB方面的修改,同樣保證了系統的穩定性,保證了系統升級和未來的擴展性。
EJB容器(如JBoss)已經提供了對象池和緩存機制,所以,沒有事務機制的無狀態Session Bean的性能肯定要強于普通JavaBeans。EJB容器不但在單機中提供了對象池和緩存,而且可以跨服務器實現動態負載平衡,這些都無需開發者自己開發任何軟件代碼。
EJB提供的事務機制非常周全,但事務機制帶來的缺點是性能的降低,在一般企業應用或數據庫系統應用中,EJB不會對你構成很重的包袱。
通過一天的學習,雖然沒有寫出Structs和EJB的實現代碼,但是基本上對這兩個東西有了初步的了解
2005年8月8日
為了第一天的上班,提前一個小時起床,準備好了,順便吃了一個早餐(1年沒有吃過早餐了,感覺不錯)。左等右等終于等到XX路中巴,一群人擁過去,只上了2個人,剩下的都沒有上起,只能等下一輛,暈死,沒辦法打的吧

。
好不容易提前一分鐘趕到公司,~_~開發人員才來2個人(竊笑,我就喜歡這樣,原來我老遲到)。辦公室的人叫我等,我就等,誰叫我是新來的呢。不知道什么時候有個人搬著一臺不知道是什么年代的古董顯示器進了開發室,

不會就是我的電腦吧,雖然我不會JAVA,但是我搞開發也有2年了,蒼天啊

。
大概10點左右,被叫進了經理室,遞給我一份合同,說要簽2年的賣身契。第一反應就是這么久啊,我在原來的公司是一年一年的簽。經理稍微解釋了一下,想想也是,無所謂了,到時候想跑照樣跑。翻翻合同,一條看起來不起眼的條款讓我蒙了,星期六居然要上班,我差點就拒絕簽了,經理在一邊解釋說,那個不是上班,只是技術交流,有事情可以請假,

欲哭無淚啊。
出了經理室,就感覺有被賣身的感覺,總不是滋味。辦完相關手續,把我帶到一電腦旁邊,

15的顯示器,我差點就叫起來了,那人忙解釋一下說,這個只是暫時的,新顯示器下午就到,汗~~~~,瞧瞧配置先,815EP的板子,C1.1G的CPU,512M的內存,暈死,難道開發Java這么低的配置也成

?
下午配置了一下開發環境,看到同事都在用一個WT P的插件(一個創建、部署和調試 Geronimo 應用程序的很基本的開發環境),試試感覺還不錯,但是總是出現項目重新部署不上去的問題?問一同事也解決不了,看來還得用Lomboz了。剩下的時間看了一下JavaBean和Session編程
JavaBean其實就是一些類,把業務邏輯從JSP中分離出來。在JSP中使用一個標簽引用JavaBean,先通過<%@ page import="mypack.BookDB"%>導入JavaBean類,然后使用標簽引用(<jsp:useBean id="bookDB" scope="application" class="mypack.BookDB" />),這個東西就相當于BookDB bookDB = new BookDB,實例化一個類而已,在JSP可以直接使用這個類了(bookDB.Method();),后面的參數就更簡單了,scope是范圍,包括:page, request, session, application,默認屬性值是page。
Session相對來說要熟悉一些,是用來跟蹤用戶狀態的一個機制。在Servlet API中定義了javax.servlet.http.HttpSession接口。當一個Session開始時,Servlet容器將創建一個HttpSession對象。默認情況下,JSP網頁都是支持Session的,也可以通過顯示聲明支持Session:(<%@ page session="true"%>),最大的問題就是當客戶端禁止了Cookie就麻煩一些。需要重寫客戶請求的URL,把Session ID添加到URL信息中。HttpServletResponse接口提供了重寫URL的方法<a href="<%=response.encodeURL("next.jsp")%>">。Session的持久化我原來在.Net中沒有發現有這個功能(可能是我菜吧^_^)。需要配置FileStore、JDBCStore,現在暫時還用不上,以后在研究吧。
2005年8月7日
終于看到JSP了,進入實際應用階段,我原來以為JSP跟ASP或者ASP.NET差不多,今天了解了一下,感覺不是那么回事。JSP是Java Server Page的縮寫,是Servlet的擴展。書上解釋說:“在傳統的網頁HTML文件中加入Java程序片斷和JSP標簽,就構成了JSP網頁”

看起來很簡單,但是JSP語法都沒有看完就遇到問題了:
<% if(false){ %>
She is a girl
<% }else{ %>
He is a boy.
<% } %>
結果是He is a boy, 這里有點不能夠理解,不知道JSP容器是怎么解釋的,暫時把“He is a boy”當作一個字符串處理
JSP語法:
<%@ %>用來設置和整個JSP網頁相關的屬性,常用的由Page, include, taglib
<%! %>用于聲明JSP代表的Servlet類的成員變量和方法
<% %>用于直接嵌入任何有效的Java語言代碼
<%= %>用于顯示表達式的值,int或者float類型的值都自動轉換成字符串加以顯示
<%! int hitcount=1; %> 和<% int count=1; %>的區別?是類成員變量和局部變量的區別。在<%! %>聲明中的都是類成員變量。
隱含對象:
使用這些對象的引用變量時不需要做任何變量聲明
request javax.servlet.HttpServletRequest
reponse javax.servlet.HttpServletResponse
pageContext javax.servlet.jsp.PageCntext
application javax.servlet.ServletContext
out javax.servlet.jsp.JspWriter
config javax.ServletConfig
page java.lang.Object (相當于Java中的this關鍵字)
session javax.servlet.http.HttpSession
exception java.lang.Exception
JSP與Cookie:只要客戶端不禁止,使用很簡單
Cokie[] cookies = request.getCookies();
cookies[0].getName;
cookies[0].getValue();
cookies[0].setMaxAge(30);
cookies[0].getMaxAge();
response.addCookie(new Cookie("cookieName", "cookieValue"));
JSP轉發請求:
<jsp:forward page="重新定向的文件" />
如果在a.jsp中,a.jsp請求轉發給b.jsp, a.jsp所有的數據輸出都無效;此外a.jsp和a.jsp共享同一個HttpRequest對象,因此b.jsp可以通過request.getParameter("name")方法讀取請求參數
JSP異常處理:
JSP異常處理是針對每個頁面的,不知道能不能在Web.xml中配置,讓所有頁面的異常處理指向通一個頁面(應該有,只是我不知道而已^_^),每個頁面都去設置errorpage感覺很麻煩。
<%@ page errorPage="errorpage.jsp" %>
<%@ page isErrorPage="true" %>默認為true
在處理異常的網頁中可以直接訪問exception隱含對象:<%=exception.getMessage() %> <% exception.printStackTrace(new PrintWriter(out));%>在異常處理頁面中也是共享一個HttpRequest對象,應此也可以使用<%=request.getParameter("name");%>
今天就學這么一點點,玩會兒wow先^_^
昨天了解了一下Servlet技術,感覺就是一套服務器組件,跟ASP.Net的服務器控件類似,只要繼承HttpServlet抽象類就可以了。

Http的請求方式包括Delete,Get,Options,Post,Put和Trace,在HttpServlet類中分別提供了相應的方法,它們是doDelete(), doGet(),doOptions(),doPost(),doPut()和doTrace()。
Servlet容器是否在啟動時自動裝載Servlet,這是由在Web.xml中為Servlet設置的<load-on-startup>屬性決定的(慢慢感覺到了java的配置多起來了)。
在家休息了一個月,2年的.Net開發要告一段落了,重新找了一家開發Java的公司,在新公司面試的時候,借助這2年的開發經驗,瞎吹了一頓(我對JAVA一竅不通,沒有寫過一行JAVA代碼),總算通過了,3天以后上班。
今天早上一起來第一件事情就是上書店買Java書,到書店一看才傻眼了,昨天到網上查到的一些書,這里根本就沒有(暗自罵了幾句,我怎么就選擇這個鳥不拉屎的地方),好不容易找了一本《Tomcat與JavaWeb開發技術詳解》,而且是最后一本,老天總算給了點面子,剩下就隨便找了幾本垃圾,反正也只是做入門用。
不知道不覺就浪費了一個上午。回家先瀏覽了買回來的書,前面全是TMD的教你怎么安裝JDK,Tomcat,Eclipse。索性花一個下午把Java開發環境搭起來再說。一口氣把Jdk,Eclipse,Tomcat,MySql,Ant全部下載下來(想想還是VS2003方便),下載是小事,配置就費功夫了,剛開始配置Jdk,Tomcat,MySql還順利,Eclipse就麻煩了,還好可以編譯,但是不知道怎么寫Jsp,到網上一查才知道要下載一個Lomboz,按照版本下載了,折騰了一個多小時都沒有搞定,還好找到一個EclipseColor的插件,可以點亮JSP語法,將就用一下吧,那個鳥Lomboz等上班問問同事。
一切搞定,寫個HelloWorld先。
package mypack;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class HelloServlet extends HttpServlet // 第一步: 擴展 HttpServlet 抽象類。


{
//第二步:覆蓋doGet()方法
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException ,ServletException

{
//第三步:獲取HTTP 請求中的參數信息
String clientName=request.getParameter("clientName");
if(clientName!=null)
clientName=new String(clientName.getBytes("ISO-8859-1"),"GB2312");
else
clientName="我的朋友";
// 第四步:生成 HTTP 響應結果。

PrintWriter out;
String title="HelloServlet";
String heading1="This is output from HelloServlet by doGet:";
// set content type.
response.setContentType("text/html;charset=GB2312");
// write html page.
out = response.getWriter();
out.print("<HTML><HEAD><TITLE>"+title+"</TITLE>");
out.print("</HEAD><BODY>");
out.print(heading1);
out.println("<h1><P> "+clientName+" : 您好</h1>");
out.print("</BODY></HTML>");
//close out.
out.close();

}
} 編譯運行。。。,沒反應(習慣ASP.Net),Copy->配置->啟動TomCat,
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>mypack.HelloServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>


<servlet>
<servlet-name>CounterServlet</servlet-name>
<servlet-class>mypack.CounterServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>CounterServlet</servlet-name>
<url-pattern>/counter</url-pattern>
</servlet-mapping> 總算完了,問題又來了,“你好”變成了“??”,早就聽說Jsp的中文問題了,改成HelloWorld正常,翻了一下書,沒有找到解決辦法,算了,以后再解決^_^