當前位置:開發者網絡 >> 技術教程 >> JSP教程 >> Java技巧及代碼 >> 內容
精彩推薦
分類最新教程
分類熱點教程
    
OSS報表系統實訓筆記
作者:未知
日期:2005-04-30
人氣:
投稿:(轉貼)
來源:未知
字體:
收藏:加入瀏覽器收藏
以下正文:

   OSS報表系統 實訓筆記







                  實訓公司:中科天地 (王海格,老師超好)







                                    Edited by Hen Egg ,Michelangelo







2005-2-21







8:00







JasperReport 開支

面向OO 應用服務器

Java 開源數據庫

J2EE 需求分析


 


 



成績:

課堂表現

項目


 


 



項目:

l         Java平台

(1)       (編程語言)開發環境(編譯器)

(2)       部署環境(應用服務器)(JDK提供軟件運行服務器及基本運行條件,在此基礎上的開發需要配置) 目的是重用 (相關工具類)

(3)      運行環境(操作系統)







--JVM虛擬機是操作系統,即運行環境

--Java包 文件性

--垃圾收集 內存管理

--虛擬cpu (優勢)

--線程


 


 



(1)+(2)+(3) 統一環境 簡單開發








 


 



l         Java語言

1. OO(最重要的特徵)——很大的系統







2.  可移植性JVM (並不重要)

3. 分佈式 JVM+AppServer ——跨平台的系統







充分利用網絡資源 跨地域跨國界







4. 安全性







Unix:安全性強類型

JVM內置強安全性 >Unix

關鍵業務

1.  人命

醫療 檢查公安 重型工業 航空

2.  錢

銀行


 


 



小結:

JVM是操作系統

Java是面向對象,分佈式,安全的語言


 


 



PS:以上紅字粗體部分為java關鍵技術


 


 



l         Java虛擬機

1.垃圾收集

2.分佈式 支持各種協議

3.多線程 線程管理

4.安全性


 


 



概念

模擬了一台計算機


 


 



功能

1.垃圾回收:

(在內存中)new的對象被裝載到對像堆中





A = new Air;

new 出一個對像

調用構造函數,分配在對像堆中

返回一個引用

引用計數器++

當計數器減為0,該變量變成垃圾,從名單裡除去。

垃圾收集作用:內存洩漏,空指針

垃圾收集機制:

後台精靈線程:當CPU出現閒置,調用該線程(優先級低) 要求CPU很快 有閒置的時候(用Java 先CPU再內存再次網卡)


 


 



2.提供運行時環境

操作系統的功能,負責調入代碼,監督代碼運行,幫助程序做輸入輸出,給程序提供一系列的支持

提供 CPU 寄存器 網絡讀寫 文件系統 安全性



Class Loader 加載

Byte Code Verifier文件格式 語法 數組越界

校驗4遍

Interpreter: 中間代碼

JIT 即時編譯 (快)(編譯成本地代碼)


 


 



安裝jdk

配置環境變量

JAVA_HOME c:\j2sdk

Path ;%JAVA_HOME%\bin

CLASSPATH .;%JAVA_HOME%\lib

(ps:dos窗口不能自動刷新,改變環境變量後記得重新開)

14:00







類:

自定義

抽像


 


 



包:

package

把功能相近的類組合在一起

包是相對路徑,相當於windows裡的文件夾

import一個包 就引入了一個命名空間

import不等於include

沒寫包的話,系統默認一個包


 


 



Java代碼三部分

1)        package com.project.src

2)        import java.io.*;

3)        類

一個文件裡可以有多個類,但是有且只有一個public類


 


 



eg1

1. static void main(String []args)

Main method is not public


 


 



2. public void main(String []args)

Exception in thread "main" java.lang.NoSuchMethodError: main

main是整個程序的入口,不能用new出來 由於是static方法所以在載入內存時便直接執行 以此作為其他程序的入口 但main不是關鍵字


 


 



3. public static main(String []args)

TestHelloWorld.java:4: invalid method declaration; return type required

        public static main(String[] args)

java規定必須有範圍類型,沒有返回值必須定義為void。但是構造函數不允許有返回類型。


 


 



4. public static void main(String []args) == static public void main(String []args)

訪問控制符和修飾符位置任意。但習慣把訪問控制符放前面


 


 



5.但是返回類型 不能放在上面兩者前面

TestHelloWorld.java:4: <identifier> expected

        void static public  main(String[] args)

             ^

TestHelloWorld.java:8: '(' expected         //返回值必須貼緊方法名

}

^

2 errors

main不是關鍵字,但是自己不要用它。

6. String[] args

從arg[0]開始


 


 



註釋:

調程序用

//

/*           */

javadoc註釋

/**

*/

用javadoc變成文檔

javadoc HelloWorld.java –d doc


 


 



Java關鍵字&標識符&保留字

標識符 開頭:字母(_, $)

編碼規範:

1)        有意義的單詞組成,第一個單詞第一個字母小寫,其他單詞第一個字母大寫

2)        變量名和方法名同等處理。

3)        常量由有意義的單詞組成,所有單詞全大寫,單詞之間用下劃線分開。

4)        類名第一個字母大寫


 


 



Java數據類型

1.  基本數據類型(不是對像)

8種:

int, long, short, byte, float, double, char, bool.

2.  引用類型

對像只能通過引用訪問

實際上是安全的指針

數組是引用類型(因為他在C語言裡是指針類型)

默認:

Char ‘\u0000’

bool false

引用 null

數組 null


 


 



表達式和流程控制

不要用++ --,容易引起誤讀 除了在循環裡面

=與==: ==只能用於基本類型,不要用於引用類型。equals

短路運算符: if (lasting!=null)&&,||

把概率最高的判斷放在前面,節省程序執行的時間


 


 



類型轉換

高位轉低位,必須進行強制類型轉化 ,short與char的轉換總要


 


 



傳參和傳值

基本類型傳值

引用類型傳引用

傳的是變量的副本


 


 



控制流程,循環

最好不要用switch (破壞封裝,消耗性能,破壞流程)

分支盡量用if else

循環盡量用for

while(true)在服務器中,做死循環用

別用do-while


 


 



練習1

強制類型轉換


 


 



練習2

傳參


 


 




 


 



2005-2-22







8:00







l         Java OO

最早的面向對像Smalltalk, 後來的C++, Java, Phyon, .NET

Smalltalk純的 Java不純(基本類型等)

Java是對面向對象的一個實現


 


 



對像   -> 數據 <-     操作


 


 



對像之間的關係 –> 消息


 


 



OO: 按符合人的思維習慣的邏輯來分析設計,形成了一套模式,即面向對像體系。




 


 



注意:

1. 不要去繼承有代碼的類。有代碼的類請用對象的組合.

2. 繼承抽像基類或接口(n個)。接口設計完,不能減少和修改,只能增加.

3. 多重繼承本身沒錯,必不可少,但要限制多重或單繼承,破壞封裝性.


 


 



多態:

技術實現:

1.  編譯時:SRC 檢查形式類型(聲明)

2.  運行時:JVM 檢查實際類型


 


 



重載:

(編譯時)

處理相同的方法名,不同的參數列表

在編譯器裡用方法簽名區別。(method signature,由方法名+參數列表組成)

不要用運算符重載


 


 




 


 



14:00







類(實用類):

1.  類頭

只有public 和 默認的,沒有私有類

2.  屬性

static 只保留一份拷貝。與類代碼保存在一起

靜態屬性的構造方法: static {}塊。

non-static

3.  方法

4.  構造方法(不是類的基本結構)

5.  static塊


 


 



l         類的定義

[權限][修飾] class 類名 [extends 父類名][implements 接口列表]

{

       類體;

}


 


 



權限: 有 public —— 公有類

          無 public —— 同包類

修飾: abstract 抽像類,只能被繼承(如果一個類裡面有一個抽像方法,則這個類必須是抽像類。反之,抽像類不一定包含抽像方法)不能實例化

       final    終極類,完美類,不能被繼承。只能實例化


 


 



ps:

1:一般靜態變量被定義成常量

2:用靜態方法不能訪問實例變量,static

3:native 在java中調用本地c代碼

4:構著方法:選擇native(高級)

5:接口作為引用類型來使用,任何實現該接口的實例都可以存在該接口類型的變量中.


 


 



數據成員:

[權限][修飾] 類型 變量名[= 初值];

修飾: static 有 —— 類變量(類名點取)

       static 無 —— 實例變量 (對像名點取)

       final 用於修飾常量

                     static final int N=5; (90%以上用到static,就加final把它變成常量。光static破壞封裝性)


 


 



方法成員:

[權限][修飾] 返回值類型 方法名(行參列表) (傳值不傳參)

{

方法體;

}


 


 



修飾: static  (靜態方法不能訪問實例對像)

          final  (不允許重載) (用不到)

       abstract (該類必須聲明為抽像類)

       native 本地方法。可以調用本地代碼,比如調用C代碼。


 


 



成員權限

public > protected > (default) > private

default 同包類

protected 同包+子類


 


 



接口裡的方法默認為: public abstract


 


 



構造方法:(僅能初始化非靜態屬性,靜態方法不能操作非靜態屬性,反之可以)

方法名=類名

一般不是public訪問權限

不能有任何修飾

無返回值類型

如果不提供構造方法,則系統提供一個無參的構造方法。但是存在任何自己寫的構造方法,缺省的構造方法立即失效。

類繼承的時候,不繼承構造方法。

初始化父類super()。 如果父類是抽像基類,就不用加了。


 


 



super()

this()


 


 



接口定義

[權限] interface 接口名 [extends 接口列表]

{

       接口體;

}

可以繼承多個接口。稱為接口的拼裝

接口一般聲明為public

接口作為引用類型來使用。通過這些變量,可以訪問所有實現該接口的方法。


 


 



練習:

1.mod02/exercise3

類的公有方法被稱為類的接口。

寫一個Account類 放在包banking中

並用TestBanking測試


 


 



2.在banking中添加類Customer.

3.修改TestBanking。用Customer操作Account。


 


 



2005-2-23







8:00







1.  需求分析(top n)

概念

業務

業務流程

2.  用例圖(修正)

例:銀行的賬戶Account和客戶Customer關係

1)        客戶有一個或多個賬戶

2)        賬戶與一個客戶關聯(例外:聯名賬戶)

3)        客戶私有、控制賬戶


 


 



需求分析

總體設計

詳細設計


 


 



例:銀行和客戶、賬號的關係

銀行有若干個客戶

客戶可以選擇多家銀行(跨邊界)

系統中只能有一家銀行(系統邊界)

銀行應該對客戶信息保全

銀行擁有裁決權

銀行類的內部創建帳戶(銀行類完全創建控制帳戶)


 


 



要求:

創建客戶

用戶提交:姓、名、最初額度、身份證號碼、六位密碼

創建帳戶

提交:

身份證號碼、初始餘額


 


 



業務:

身份證號碼

帳戶號碼

密碼

業務選擇(參數):存取款 查餘額


 


 



開會標準

概要設計

1.  需求會(10∼15分鐘)

分頭寫草圖

2.  開會合併草圖

修改草圖

3.  提交修改草圖

4.  合併修改草圖

5.  畫類圖:每個類兩個人

6.  組裝至一台機器,編譯運行


 


 



10:43——17:30







banking項目


 


 



2005-2-24







8:00








 


 



項目總評

細節問題:

1.只能有一個Bank,設計方法:

Sington設計模式:

構造方法私有,則不能從外界創建他

利用該類的靜態常量來保存。

static final Bank bookIntance = new Bank();

Bank類被加載到內存裡

new出一個Bank實例,並存在靜態區

private Bank()

{

       customers = new Customer[MAX];

       customerNumber=0;

}


 


 



private static final Bank bankInstance = new Bank();

public static Bank getBankInstance() {

       return bankInstance;

}


 


 



或:

private static final Bank bankInstance = null;

public static Bank getBankInstance() {

       if(bankInstance = null)

              bankInstance=new Bank();

       return bankInstance;

}


 


 



在Test.java中

Bank aBank= Bank.getBankInstance();


 


 



3.  數組

引用數組是指針的指針,所以要判空

Vector, List, arrayList (只能存一種類型的對象),也要判空


 


 



4.  密碼管理方法不能用getPassword()。要用Verify()。


 


 



上課內容:


 


 



異常

java中的異常

程序中60%代碼用於處理異常

任何異常都被包裝成異常對像

有異常時候,就拋出異常對象,給JVM。JVM去查調用棧

產生異常的代碼不處理異常

好處







1)        用對像處理異常







2)        利用虛擬機作異常對象的傳遞







3)        正常代碼和處理異常代碼完全分開








 


 



try

{

unsafe;

} catch (異常類 e)

{

異常處理;

}


 


 



方法聲明為throws,該方法實用時,必須放在try,catch結構中

public void f(int score) throws MyException

{

       if(score<0||score>100)

              throw new MyExceptino(“”);

}

繼承類的時候,不能拋出超出父類的異常。


 


 



tips:

接口是用來統領類,分類類的

類是用來實現接口的,實例化接口的一個工具


 


 



I/O 流

輸入流,輸出流 是控制同一個流

字符型,字節型


 


 



類庫裡凡是有Stream都是字節流,有Reader就是字符流

InputStreamReader把字節流轉換為字符流

//把System.in轉化為一個帶緩衝的字符流

BufferedReader in=new BufferedReader(new InputStreamReader(System.in))

in.readline()


 


 



網絡

添加

Client端,Server端,協議解釋器

Socket連接

協議自己定

協議的解析器


 


 



new ServerSocket


 


 



accept()


 


 



new Socket


 


 



實例:

Server端

1.new一個ServerSocket

try{

 s=new ServerSocket(5432);

}catch (IOException e){}

2.建一個死循環

while(true)

{

try{

Socket s1=s.accept();

}catch(IOException e){}

}

3.用產生的普通Socket通訊

OutputStream s1out=s1.getOutputStream();

DataOutputStream dos=new DataOutputStream(s1out);


 


 



dos.writeUTF(input);

dos.close();

s1.close();


 


 



Client端

1.  建一個普通Socket

Socket s1= new Socket(“127.0.0.1”, 5432)

2.用Socket通訊

InputStream is = s1.getInputStream();

DataInputStream dis = new DataInputStream(is);

System.out.println(dis.readUTF());


 


 



dis.close();

s1.close();


 


 



作業:

1.  用例和流程

2.  設計類庫,Server結構


 


 



2005-2-25







8:00








 


 



多線程

業務需求 並發訪問

技術需求 多進程、多線程

I/O流阻塞當前進程


 


 



技術

模型一

1.  創建線程的線程

2.  線程中跑的代碼是哪一個對象的代碼


 


 



定義一個實現Runnable接口的類,實現他的run()方法,然後將這個類的實例作為Thread構造方法的參數。創建Thread類的實例。


 


 



在服務器裡

new Thread(Object );        //Object工具類,存所有參數。(包含業務代碼)

.start.


 


 



構造這個類

class BusinessClass implements Runnable

{

       public void run()

       {

              代碼; //調用其他對像完成業務和交互。

       }

}

見exercise/mod15/exercise1


 


 



內部類



外->內代碼(功能)

內->外部非公有

需要實用內部類


 


 



小結:

1.    new Thread( 類 )

2.    定義這個類, implements Runnable


 


 



C/S Bank項目

11:00 ~ 2005-2-26 17:40








 


 



2005-3-7







8:00







複習:

面向對像:清晰,封裝,抽像(針對接口編程),復用(io類,集合類)


 


 



C/S -> B/S

區別:

C/S是基於操作系統的(JVM)和基本類庫(JDK)的開發模式。

B/S 是基於已有“容器”的開發模式。


 


 



B/S優點:屏蔽底層的東西

1.  給商業系統的開發帶來方便,重用基礎代碼和服務(事務安全性)

2.  可以使用經證明有效(率)的軟件架構(j2ee核心模式 mvc)

3.  商業的技術支持(第三方)


 


 



C/S優點:

1.  完全控制Client, Server端的結構,使用自定義的通訊/業務協議

2.  可以精確定義底層服務,減少冗余和錯誤

3.  所有的開發代碼都是透明的,不存在黑箱


 


 



用途

B/S 用於比較大型的,面向最終用戶的商業系統(財務、人事、物流、電子商務、工作流)

C/S 用於各種軟件系統(用於二次開發),或軟件產品;特殊專用的商業系統(銀行,國防部)


 


 



C/S 是B/S的基礎。前者用的技術後者都能用到,反之不成立。


 


 



B/S幾種流行的架構

都是一種開發模式,實現技術變化中

1.  J2EE (開發模式 不是開發技術)

2.  .NET

3.  PHP

4.  CGI(perl, C)


 


 




 


 




 


 




 


 




 


 




 


 



J2EE開發模式結構:

系統功能

客戶端

Web層

控制層

業務層

數據操作層

容器

瀏覽器

Web服務器,JSP/Servlet容器

JSP/Servlet容器,EJB容器

EJB容器,Servlet容器

EJB容器, Servlet容器

技術

HTML, CSS, XML, JavaScript, Applet

HTTP, JSP, Servlet, HTML

JSP/Servlet,EJB,JavaBean

EJB,JavaBean,Servlet

EJB(Entity),DAO, JDO, R/O Mapping

輔助技術

美工,Flash

資源文件(國際化),MVC

資源文件(國際化),MVC。

針對容器本身的配置文件,JNDI

JMS,JTA


 


 



Tips:

JNDI:Java的目錄服務(Java Naming and Directory Interface)

JMS:Java消息服務

JTA:Java事務服務

EJB強侵入型容器,不推薦使用。







EJB基於的兩個技術:RMI和序列化








 


 



重要級:

要學的,重要的:HTML, XML格式,HTTP, JSP,Servlet,JavaBean

要熟的:HTML,JavaScript, DAO,MVC (這兩個是兩種架構)

看一下:EJB,JNDI,JMS,JTA


 


 



10:00








 


 



HTML/JSP

HTML表單

JSP 計算->服務器

瘦客戶端

Client                                     Server端

瀏覽器Brower  ----------------à                  JSP

                                             | Compile

                                          Servlet  --------------------------à後台調用

                                             | Run

                                           HTML

過程

1)        發請求HTTP協議

2)        生成兩個對像request, response

3)        編譯servlet

4)        顯示部分硬編碼

5)        返回給客戶


 


 




 


 



HTML:

XML

<table>

<Form> 表單

1)      收集用戶輸入

2)      通過HTTP協議,提交參數到制定的URL(簡化了從客戶端傳到服務器端的過程,但是服務器端傳回來的功能就大大減弱了)


 


 



JSP表現:

返回:

1)      處理結果(Response)

2)      HTML標籤(用來做界面)

3)      動作:結果 -> HTML格式

4)      返回給客戶


 


 



TIPS:

服務器端畫界面

畫的界面通過response對像返回


 


 



eg.

//03.html

<form action=”03.jsp”>

<Input type=”text” name=”myname”><br>    //文本框控件

<select name=”interest”>              //下拉菜單控件

              <option value=”football”>football</option>

       </select>

<Input type=”submit” value=”提交”>     //提交按鈕

<Input type=”reset” value=”重置”>       //重置按鈕,自動給所有值賦為默認值,避免空指針錯誤

</form>


 


 



//03.jsp

<%

String name= request.getParameter(“myname”);

String interest= request.getParameter(“interest”);

out.println(“Your name is “+ name);

out.println(“<br>Your interest is: “ + inerest); //println的回車對源文件回車,對HTML的顯示不起作用,所以要加回車標籤<br>

%>


 


 




 


 




 


 




 


 




 


 



14:00







JSP語法

1.  腳本元素(代碼)

1)      註釋 <%--      --%>   (只在本代碼中存在)

2)      表達式<%=       %> 

3)      聲明<%!          %>  (只在本頁起作用)

4)      代碼段<%         %>

2.  頁面指令<%@name 屬性列表      %>

1)      page指令 <%@page Attribute_List %>

<%@page language=”scriptingLanguage” import=”” contentType=”text/html;charset=GBK”  %>

2)      jsp:include指令 <jsp:include page=”URLSpec” />

3)      jsp:forward指令 <jsp:forward page=”URLSpec” /> (只能轉到本機上某一其他頁面)

4)      jsp:param指令 不能單獨使用 <jsp:param name=”name” value=”value” />

3.  內置對像

使用out對像輸出數據

request對像和用戶輸入信息

response對像向客戶端發送信息

使用session對像在不同頁面共享數據(使用Cookies或重寫URL)


 


 



啟動Tomcat

1.       Startup

2.       bin下service install 控制面板-》服務-》Apache 啟動


 


 



配置

在conf文件夾裡把server.xml裡的connector裡的端口號改成別的

tome-users.xml 可以改密碼,加用戶


 


 



練習JSP

webapps\test

webapps\test\WEB-INF 是放應用程序的配置文件和類、庫文件

webapps\test\WEB-INF\classes\

webapps\test\WEB-INF\lib\

WEB-INF\web.xml


 


 



在Tomcat Manager裡面部署Deploy


 


 



練習:

提交: 1.jsp

<html>

<body>

<form action="echo.jsp" method="post">

<p>內容

<p><textarea name="content" rows="20" col="40"></textarea>


 


 




 


 




 


 



<p><input type="submit" value="submit">

</form>

</body>

</html>


 


 




 


 



返回: echo.jsp

<%@page  contentType="text/html;charset=GBK"  %>


 


 



<%

request.setCharacterEncoding("GBK");

String content=request.getParameter("content");

content=content.replaceAll("\n","<br>");

out.println(content);

%>


 


 



2005-3-8







8:00








 


 



複習:

JSP語法

HTML表單


 


 






 


 



TIPS

HTTP協議有兩個方法:

POST: 放在BODY內

GET: 放在URL頭部。 URL?attribute=value

<form method=”POST”>

凡是表單提交數據,都用POST


 


 



練習1:

密碼登陸框

tips:

判斷是否空字符串要用.equals(“”)

文件名.jsp小寫


 


 



練習2:

簡單驗證在客戶端進行,使用Jscript.

JS標籤

Script在客戶端運行。簡單的驗證挪到客戶端進行

<Script Language=”JavaScript”>

       function mycheck() {

              if(document.myform.myname.value==””){   //document是瀏覽器內置對像

                     alert(“請填寫姓名!”);

                     return;

       }

       if((document.myform.password1.value!=document.myform.password2.value)||){

              alert

              return;

       }

       document.myform.submit();

}

</Script>


 


 



提交表單

<form name=”myform” action=”simple.jsp” method=”post”>

       <input type=”button” value=”提交” onclick=”mycheck()”>


 


 




 


 



session內置對像保存用戶狀態

//session-1.jsp

<%

//初始化

if(session.getAttribute(“flag”) == null) {

       session.setAttribute(“flag”,”ok”);

       session.setAttribute(“shop”,””);

       session.setAttribute(“price”,””);

}

session.setAttribute(“shop”,session.getAttribute(“shop”)+”主板”);

session.setAttribute(“price”,session.getAttribute(“price”)+”100”);


 


 



out.println(session.getAttribute(“shop”)+”<br>”);

out.println(session.getAttribute(“price”)+”<br>”);

%>

窗口關掉,只要沒離開這個網站,狀態依然保留。


 


 



JavaBean








 


 



輕量級的組件


 


 



組件技術

JavaBean概述

可以被Applet、Servlet、JSP等Java程序調用

特點

1)          獨立性

2)          可重用性

3)          在可視化開發工具中使用

4)          保存狀態

JavaBean屬性

1)        Simple屬性

get/set 都有:讀寫屬性,有get:只讀屬性

2)        Indexed屬性

可加索引的屬性

3)        Bound屬性

4)        Constrained屬性


 


 



bean放在WEB-INF/classess下

在JSP中調用JavaBean

<jsp:useBean id=”bean名字” scope=”page|request|session|application” class=”bean對應的類名”/>

//id是應用變量 scope是bean作用的範圍。page該頁,request該請求,session該會話,application服務器不關機,則永遠有效

<jsp:setProperty name=”checking” property=”balance” value=”0.0” />

<jsp:getProperty …>


 


 



eg.//bean.jsp


 


 



<jsp:useBean id=”first” scope=”page” class=”bean.sampleBean” />

<body>

       調用jsp:setProperty之前的值:<jsp:getProperty name=”first” property=”str” />

       <p>

       <jsp:setProperty name=”first” property=”str” value=”change value” />

       調用jsp:setProperty之後的值:<jsp:getProperty name=”first” property=”str” />

</body>

</html>


 


 



//sampleBean.java


 


 



package bean;

public class sampleBean

{

private String str=”first value”;

public String getStr() {

              return str;

       }

       public void setStr(String value) {

              str=value;

       }

}

tips

寫JavaBean的注意事項

必須寫set/get方法

必須package.不能放在默認包裡


 


 



14:00








 


 



Tips:

JavaBean的scope。 session最長用。同一個客戶的多個請求用同一個Bean

get/set方法使用條件:無參的。(標籤使用法)

Bean作為一個普通的java類。可以直接用他的方法。


 


 



練習3:

1.  HTML頁面。下拉表單

2.  JSP。submit/item。

3.  JavaBean。用戶購物清單


 


 




 


 




 


 




 


 




 


 




 


 




 


 




 


 




 


 




 


 



2005-3-9







8:00








 


 



JDBC

JDBC是連接數據庫的一種協議。在這個系統架構裡相當於HTTP。

功能:J2EE連接到外部資源

現在可以用XML訪問數據庫

協議:規定了統一的數據庫訪問接口,由各個廠商實現。

類:

1.  DriverManager

getConnection

接口:

2.  Connection(數據庫廠商寫的)

3.  Statement (執行SQL語句)


 


 



使用注意:

不要讓JDBC破壞程序原有結構。R/O Mapping

把數據庫的作用降低到只有數據持久化。


 


 



語法:

JDBC API

1.  DriverManager 管理JDBC(不是JDBC協議裡的)將driver加載進內存

2.  Connection由 drivermanager 返回一實例

3.  Statement向數據庫發送SQL查詢和取得一組結果的工具,也由數據庫廠商提供

4.  ResultSet定義訪問執行Statement產生的數據表方法

5.  PreparedStatement編譯好的SQL語句


 


 



eg.連接mysql數據庫

import java.sql.*;


 


 



public class JdbcMySQL{

       public static void main(String args[]) {

              String serverName=”localhost”;

try{

                     Class.forName(“com.mysql.jdbc.Driver”);    //先把路徑配到CLASSPATH裡

                     String url=”jdbc:mysql://”+serverName”+”:3306/test”;  //每個數據庫不一樣的

Connection conn=DriverManager.getConnection(url,”root", "root");

Statement stmt=conn.createStatement();

ResultSet rs=stmt.executeQuery(“select * from student”);

while(re.next()){

       System.out.print("StudentNo:"+rs.getInt(1));

System.out.print(“\tStudmentName:”+rs.getString(2));

}

}catch(Exception e) {}


 


 



連接字符串每個數據庫都不一樣。


 


 



練習:

投票系統


 


 



//VoteConn.java

package vote;

import java.sql.*;


 


 



public class VoteConn {

String sDBDriver=”sun.jdbc.odbc.JdbcOdbcDriver”;

String sConnStr=”jdbc:odbc:vote”;

Connection connect=null;

ResultSet rs=null;


 


 




 


 



public VoteConn(){

try{

       Class.forName(sDBDriver);

}

catch(java.lang.Exception e){}

}


 


 



public ResultSet executeQuery(String sql) {

       try {

       connect=DriverManager.getConnection(sConnStr);

       Statement stmt=connect.


 


 



public int executeUpdate(String sql) {

       int result=0;

try{

connect=Driver


 


 




 


 



//index.jsp

<%@page contentType="text/html;charset=GBK" %>

<%@page import="java.sql.*" %>

<jsp:useBean id="connDbBean" scope="page" class="vote.VoteConn" />

<%

       ReasultSet rs=connDbBean.executeQuery("select * from vote");

%>

<html>

<body>

<center>

<h2><font color=#0000ff>請你投票</font></h2>

<table border bgcolor=#00ffff>

<form action="vote.jsp" method="post">

<% while(rs.next()) {%>

<TR><TD><input type="radio" name="type"

value =<%=rs.getString("id")%>><%=rs.getString("note")%></TD></TR>

<%}

rs.close();

%>

<TR align="center"><TD><Input type="submit" value="投票"></TD></TR>

</form>


 


 



<TR><TD><A href="details.jsp">查看投票</TD></TR>

<table>

</center>

</body>

</html>

//style.css


 


 



//vote.jsp

<%@page contentType="text/html;charset=GBK" %>

<%@page import="java.sql.*" %>


 


 



<jsp:useBean id="connDbBean" scope="page" class="vote.VoteConn" />


 


 



<%

String rb=request.getParameter("type");

if(rb!=null&& rb!=""){

       String sql="Update vote Set c_num=c_num+1 where id="+rb;

       connDbBean.executeUpdate(sql);

}

%>

<jsp:forward page="detail.jsp" />


 


 



//admin.jsp

<%

connDbBeanexecute

<%=tempRs.getString(“note”)%>


 


 



<div align=”center”><a href=”delvote.jsp?id=<%=tempRs.getInt(“id”)%>”>刪除</a></div>


 


 



//delvote.jsp

<%

String d_id=request.getParameter(“id”);

if(d_id!=null

       connDbBean.execute


 


 



//addvote.jsp

<jsp:useBean scope=”page” class>

String nn=request.getParameter(“note”);

if(nn!=null


 


 



connDbBean.executeQuery(“select max(id) As maxid from vote”);

tmpRs.next();

int max_id=tmpRs.get Int(“maxid”)+1;

tmpRs.close();


 


 



String sql=”insert into vote value(“+max_id+”,’”;

sql+=nn+”’,0”;

System.out.println(sql);

conDbBean.executeUpdate(sql);

}

%>

<jsp:forward page=”admin.jsp”>


 


 



2005-3-10







8:00








 


 



Servlet

常用API:http.servlet

特點

1.  結構很嚴格

2.  代碼框架已經寫好

3.  窗口給Sevlet運行提供context

4.  僅用於處理http請求


 


 



initial方法:第一次調到內存時,訪問一次。

destroy方法:被調出內存時,訪問一次。

service方法:主方法,參數(request,response)

doget(),dopost():我們要寫的方法。


 


 



eg1.

//TestServlet 放在classes下面


 


 



import javax.servlet.*;

import javax.servlet.http.*;


 


 



public class TestServlet extends HttpServlet

{

       public void doGet(HttpServlet Request req, HttpServletResponse res) throws ServletException{

              res.setContentType(“text/html;charset=GBK”);

              req.setChanracterEncoding(“GBK”);

              PrintWriter cut=res.getWriter();

              out.println();

              out.close();

       }

}


 


 



//.jsp

<form action=”/myServlet/TestServ”>


 


 



路徑要在配置文件裡配://web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>


 


 



<!DOCTYPE web-app

    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

    "http://java.sun.com/dtd/web-app_2_3.dtd">

<!-- JSPC servlet mappings start -->             //配置servlet

<web-app>

       <display-name>first</display-name>

       <servlet>

              <servlet-name>aaaa</servlet-name>

              <servlet-class>TestServlet</servlet-class> 

//起始地址為WEB-INFO/classes,包名.類名

       </servlet>

       <servlet-mapping>

              <servlet-name>aaaa</servlet-name>

              <url-pattern>/myServlet/TestServ</url-pattern>

//            <url-pattern>/myServlet/*.do</url-pattern>  //可以把很多種請求映射到一個Servlet

//            <url-pattern>/myServlet/*.*</url-pattern>  //一組一組的mapping

       <servlet-mapping>

<!-- JSPC servlet mappings end -->


 


 



</web-app>


 


 



TIPS:

寫Servlet不是主要的。而配置文件是主要的。

以配置文件(程序結構和框架)為中心,以JSP/Servlet, HTML, JavaBean, EJB為輔


 


 



eg2.從servlet轉到jsp

//jsp轉servlet forward

request.setAttribute(“applet”,”servlet”); //相當於jsp裡的param標籤







getSevletConfig().getServletContext().getRequestDispatcher(“/hello.jsp”).forward(request.response);








 


 



在servlet裡面使用JavaBean。new一個。

//servlet和JavaBean都是內置多線程。最好不用靜態屬性。


 


 



TIPS:

Servlet配置

1.  servlet-api.jar

javac –classpath %classpath%;…..

2.  web.xml


 


 




 


 



14:00







MVC




 


 



一個Controller帶了一組Servlet,一個config

Controller分三部分

1.  控制器

2.  幹活的

3.  配置文件


 


 



Struts是一個MVC的框架

好處

1.  成熟

2.  用的多


 


 



特點:

1.  物理:Struts是MVC基於Java的一個框架(一個類庫Java和標籤庫JSP)

2.  功能:輔助實現MVC


 


 



struts框架

控制程序流程的類

實現和執行程序業務邏輯的類

自定義的標記使創建和驗證HTML表單更加容易


 


 



*.tld 標籤庫文件

*.war web application 包


 


 



類庫的安裝:只需解壓縮到一個路徑,然後配置環境變量


 


 




 


 





struts難點

1.  config.xml

2.  標籤庫

3.  體現MVC


 


 



Struts的組件

ActionServlet 控制器

ActionClass包含事務邏輯

ActionForm顯示模塊數據

ActionMapping 幫助控制器將請求映射到操作

ActionForward 用來指示操作轉移的 對像

ActionError 用來存儲和回收錯誤

Struts標記庫 可以減輕開發顯示層次的工作


 


 



struts配置文件:struts-config.xml


 


 



自己寫的部分Action裡的perform()


 


 



小結:

在MVC中,

Struts主要給了C的框架。M自己寫。V用標籤庫自己寫。

提供兩個功能。一個C。一個C背後的系統設計。

Controller寫好了

Action的框架寫好了,只要填perform()

扭轉。反向扭轉用ActionForward。

提供一個對用戶輸入數據的緩存部分ActionForm。

幫助流程設計。一個struts-config.xml。另一個是把流程抽像到對像放在內存裡面。

標籤庫中會用到幾個。


 


 



2005-3-11







8:00








 


 



Model部分設計:

Façade

值對像


 


 



eg. struts-blank

index.jsp做客戶代理


 


 



        <action

            path="/Welcome"

            forward="/pages/Welcome.jsp"/>    //調用了一個默認的action


 


 



1.  寫aciton

2.  在config.xml裡面的actionMapping改成我們的類

3.  寫個.jsp


 


 



2005-3-12







8:00








 


 



使用struts-console查錯

使用ant自動建構

兩部分:property target


 


 



14:00







../ 上一級目錄

./ 當前目錄

/ 當前盤符的根目錄

轉向:1 頁面中最好都使用xxxx.do來把控制權交給action

    2 真正的轉向由control來做 path=”/xxx/xxx.jsp” 第一個xxx為web-inf下的一目錄名


 


 



JSP的scope對應servlet裡的:(scope指生命週期和可見性)

page       局部變量







request     request







session     session







application  servletContext








 


 




 


 



值對像(用於由action中傳出數據)

MODEL中:facade

練習

struts+bean+jdbc+ant


 


 




 


 



2005-3-14







8:00







小結

1.request.setAttribute(“name”, myBean)

2.值對像 注意scope

3.MODEL中用facade


 


 



final項目

報表:

1.  struts

2.  JasperReport API

3.  IReport


 


 






 


 



14:00








 


 



final項目OSS報表

1.  需求:

a)         管理報表定義和實例

b)        用戶查看和輸出

2.  工具

a)         struts,ant,IDE,mySQL,JasperReport,JSP/Servlet,JavaBean,iReport,tomcat

3.  流程


 


 



合作

1.         共享資源專人負責

a)         struts

b)        ant, mySQL, tomcat

c)        JasperReport(iReport)

2.         需求分析:

a)         會:草案

b)        分:用例圖(流程)

c)        會:合併用例圖。初步系統設計

d)        分:修正

e)         會:最終版本的系統設計

3.         設計數據結構

a)         類,配置文件

b)        數據庫表

4.  詳細設計

a)         分工:接口(協議)

b)        分:詳細設計


 


 


相關文章: