本文僅為新手想學習javaWeb的提供一些參考,有不足或錯誤之處可以修改或添加,另希望以后學習者可以同樣將自己的心得發來和大家分享。。。謝謝
1 前台:html,css,javascript 這是最基本的三種技術html是網頁上的基本標簽格式,css則是指層疊樣式表 (Cascading Style Sheets)用來修飾html的相當於一件衣服,javascript則是瀏覽器的腳本語言用來控制靜態頁面的動態效果。同時javascript還有一個輕量級的類庫jquery,
而我們常說的Ajax則是七種技術的綜合體用來實現網頁的部分刷新,即實現我們常說的異步交換。
2 后台:我們需要服務器幫我們處理數據,由於服務器別人已經寫好了,所以我們只需要遵守相應的規范就能讓服務器幫我們工作了,而實現這座橋梁的規范就是Servlet,我們通過Servlet就能將數據發送或展現給用戶了,但是由於Servlet寫界面太麻煩了,於是sun推出了JSP,你可以在它上面直接寫html和CSS,然后由服務器翻譯為相應的Servlet再由服務器執行將數據發送給瀏覽器從而實現了動態網頁的效果。。於是我們就引出了一些問題,就是有時我們需要保存客戶的數據怎么辦呢?這就產生了專門保存數據的數據庫。但數據庫也有很多啊!難道我們要學習每個數據庫么?答案當然是否定的了,於是我們只要遵守相應的規范就行了,於是就有了大家常寫的模板jdbc了。然后我們再說說JSP頁面吧我們有時寫JSP頁面時也有可能需要一些的邏輯啊!我們怎么辦呢?以前是直接在上面寫java腳本就解決了即<%%>的形式但是后來人們發現這樣程序寫大了后維護起來相當不方便,於是產生了EL表達式替代它,但EL只是獲取數據啊!涉及邏輯它又熄火了啊,這時就引出了自定義標簽來解決它了。
至於框架技術暫且不談本人也只是算了解。不談了,以后再說吧
相關些許概念(此刻恰巧忙碌着論文,復制粘貼一下 ,方便以后復習查看吧)
JSP(全稱JavaServer Pages)和Servlet技術一樣,JSP也是SUN公司(現已被Oracle公司收購)倡導、很多公司參與共同建立的一種動態網頁技術標准,也是sun定義的一種開發動態web資源的技術,屬於JavaEE技術之一。JSP實際上就是Servlet,它們在一起又稱JSP/Servlet規范。JSP:HTML+Java。JSP技術是以Java語言作為腳本語言的,JSP網頁為整個服務器端的Java庫單元提供了一個接口來服務於HTTP的應用程序。它是在傳統的網頁HTML文件(*.htm,*.html)中加入Java程序段(Scriptlet)和JSP標簽(Tag),從而形成JSP文件(*.jsp)。用JSP開發的Web應用是跨平台的,既能在Linux中運行,也能在其他操作系統中運行。
JSP與Serverlet一樣,是在服務器端執行的。通常返回給客戶端的就是一個HTML文本,因此客戶端只要有瀏覽器就能瀏覽。WEB服務器在遇到訪問JSP網頁的請求時,首先執行其中的程序段,然后將執行結果連同JSP文件中的HTML代碼一起返回給客戶端。插入的Java程序段可以操作數據庫、重新定向網頁等,以實現建立動態網頁所需要的功能。
JSP由HTML代碼和嵌入其中的Java代碼組成。服務器在頁面被客戶端請求后對這些Java代碼進行處理,然后將生成的HTML頁面返回給客戶端的瀏覽器。Java Servlet是JSP的基礎,大型Web應用程序的開發需要Java Servlet和JSP配合完成。JSP具備了Java技術簡單實用、完全面向對象、具有平台無關性、安全可靠、主要面向Internet等特點。
Servlet技術簡介:
在網上瀏覽網頁是需要一個Web服務器,瀏覽網頁的過程就是瀏覽器通過HTTP與Web服務器交互的過程。過去大多是靜態網頁,因此只須把資源放在web服務器即可。隨着應用的開發,客戶與服務器需要動態的交互,為了實現這一目標,就需要開發一個遵循HTTP的服務應用軟件,用來處理各種請求。Servlet是一個基於Java技術的Web組件,運行在服務器端,用戶利用Servlet可以很輕松地擴展Web服務器的功能,使其滿足特定的應用需要。Servlet由Servlet容器(Servlet引擎),是Servlet的運行環境,為發送的請求和響應提供網絡服務。例如,Tomcat就是一個常用的Servlet容器。接收客戶端並作出響應的步驟如下:
1.客戶端訪問Web服務器,發送HTTP請求
2.Web服務器接收到請求后,傳遞給Servlet容器
3.Servlet容器加載Servlet,產生Servlet實例,並向其傳遞表示請求和響應的對象
4.Servlet得到客戶端的請求信息,並進行相應的處理
5.Servlet實例把處理結果發送回客戶端,容器負責確保響應正確送出,同時將控制返回給Web服務器
1.5.2 JavaScript技術
JavaScript是基於對象和事件驅動的客戶端腳本語言。有如下特點:
- 交互性
- 安全性(不可以直接訪問本地硬盤)
- 跨平台性(只要是可以解析js的瀏覽器都可以執行,和平台無關)
1、JavaScript和Java不同! ①所屬:NetScape和Sun ②基於對象和面向對象 ③JS可以直接解析執行,Java需先編譯在運行 ④JavaScript是一種弱類型的語言,Java是強類型的語言。
2、JavaScript的實現包括以下3個部分:
1)核心(ECMAScript):描述了JS的語法和基本對象。
2)文檔對象模型 ☆(DOM):處理網頁內容的方法和接口
3)瀏覽器對象模型(BOM):與瀏覽器交互的方法和接口
JavaScript和Java無關,JavaScript 是屬於網絡的腳本語言!那么為什么名字如此相似?這是典型的市場營銷方面的成功,它的推廣成功,也是借了Java的東風。當微軟開始意識到JavaScript在Web開發人員中流行起來時,微軟還是一貫風格,建立了自己的腳本語言,JScript。
JavaScript可以使網頁更具交互性,給用戶提供更令人興奮的體驗,當用戶在頁面間導航時向他們提供反饋。例如他可以設置鼠標懸停效果,在客戶端驗證表單,創建定制的HTML頁面,顯示警告框,設置cookie等等。
JavaScript是一種基於對象和事件驅動並具有相對安全性的客戶端腳本語言。同時也是一種廣泛用於客戶端Web開發的腳本語言,常用來給HTML網頁添加動態功能,比如響應用戶的各種操作。它最初由網景公司(Netscape)的Brendan Eich設計,是一種動態、弱類型、基於原型的語言,內置支持類。
1.5.3 SQL介紹
MySQL是一種開放源代碼的關系型數據庫管理系統(RDBMS),MySQL數據庫系統使用最常用的數據庫管理語言--結構化查詢語言(SQL)進行數據庫管理。 由於MySQL是開放源代碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。MySQL因為其速度、可靠性和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下,MySQL是管理內容最好的選擇。
MySQL關系型數據庫於1998年1月發行第一個版本。是一個小型關系型數據庫管理系統,開發者是瑞典MYSQLAB公司,該公司在08年被Sun收購,Sun又在09年被Oracle收購。它是一種關系數據庫管理系統,關聯數據庫將數據保存在不同的表中,而不是將所有數據放在一個大的倉庫里,這樣就提高了速度和靈活性。它使用系統核心提供的多線程機制提供完全的多線程運行模式,提供了面向C、C++、Eiffel、Java、Perl、PHP、Python以及Tcl等編程語言的編程接口(APIs),支持多種字段類型並且提供了完整的操作符支持查詢中的SELECT和WHERE操作。
1.5.3 jdbc介紹
JDBC(Java Data Base Connectivity,java數據庫連接),由一些接口和類構成的API。是J2SE的一部分,由java.sql,javax.sql包組成。JDBC是一種用於執行SQL的JAVA API,它是一組訪問數據庫的API集合,通過加載數據庫廠商所提供的驅動程序,可以與數據庫建立連接。這樣,用戶就不用為訪問不同的數據庫而編寫不同的程序了,只需要用JDBC API編寫一個程序即可,而且JDBC技術對開發者屏蔽了一些細節,這樣程序員就不需要它關心它的底層的實現技術。另外,與java一樣,jdbc對數據庫的訪問也具有平台無關性。
JDBC訪問數據庫的步驟如下:
1):注冊並加載驅動程序。驅動程序是數據廠商提供的一個對外接口,用來分辨所訪問的是哪種數據庫。Class.forName(“com.mysql.jdbc.Driver”);//加載驅動程序
2)創建連接。數據庫連接是使用DriverManager對象的靜態方法getConnection()建立的
String username="root";
String password="123456";
Connection conn = null;
conn = DriverManager.getConnection(url,username,password);//建立連接
3)創建SQL語句對象,用來執行sql語句,當建立連接以后,便可以由Statement對象將SQL語句發送給DBMS.對於select語句,可使用executeQuery(),對於創建或修改表的語句,使用executeUpdate()
Statement stmt = null;
ResultSet rs = null;
stmt = conn.createStatement();//創建執行sql語句,
stmt.execute("insert into Employee values(1,'hubin','22')");
rs =stmt.executeQuery("select * from Employee");
4)顯示結果。當執行查詢語句時,SQL語句的執行結果存儲在ResultSet對象中,可以使用GETXXXX方法來檢索數據
while(rs.next()){
System.out.println(rs.getInt(1)+" "+ rs.getString(2)+" " +rs.getInt(3));//處理執行結果
}
5)關閉連接。數據庫連接需要消耗系統資源,一旦不需要使用時,就應該釋放出來。這是程序員必須養成的良好習慣。在關閉連接時,正確的順序是:Result、Statement、Connection;為了確保所有連接能夠關閉,應該把關閉語句寫在finally塊中,這樣不管操作數據庫過程中是否發生異常,都能夠把資源釋放出來。連接其他數據庫步驟均相同,只需要更改驅動程序即可。
if(rs!=null) rs.close();
if(stmt!=null) stmt.close();
if(conn !=null) conn.close();
1.5.3 數據源和連接池介紹
發1)DataSource用來取代DriverManager來獲取Connection
2)通過Datasource獲得Connection速度很快
3)通過Datasource獲得的Connection都是已經被包裹過的(不是驅動原來的連接),它的close方法已經被修改
4)一般的DataSource內部會用一個連接池來緩存Connection,這樣可以大幅度提高數據庫的訪問速度
5)連接池可以理解成一個能夠存放Connection的Connection
6)我們的程序只和DataSource打交道,不會直接訪問連接池
DBUtils框架簡介:
commons-dbutils-1.4.jar是Apache組織提供的一個開源JDBC工具類庫,它是對JDBC的簡單封裝,學習成本極低,並且使用dbutils能極大簡化jdbc編碼的工作量,同時也不會影響程序的性能。提供如關閉連接、裝載JDBC驅動程序等常規工作的工具類,里面的方法都是靜態的類
QueryRunner:itcast-tools-1.4/cn/itcast/jdbc/TxQueryRunner該類簡化了SQL查詢,他與ResultSetHandler組合在一起使用可以完成大部分的數據庫操作,能夠大大減少編碼量。兩個構造方法:@1.默認的構造方法@2.需要一個javax.sql.DataSource來做參數的構造方法
主要方法:
public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException:執行一個查詢操作,在這個查詢中,對象數組中的每個元素值被用來作為查詢語句的置換參數。該方法會自行處理 PreparedStatement 和 ResultSet 的創建和關閉。
public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException: 幾乎與第一種方法一樣;唯一的不同在於它不將數據庫連接提供給方法,並且它是從提供給構造方法的數據源(DataSource) 或使用的setDataSource 方法中重新獲得 Connection。
public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException : 執行一個不需要置換參數的查詢操作。
public int update(Connection conn, String sql, Object[] params) throws SQLException:用來執行一個更新(插入、更新或刪除)操作。
public int update(Connection conn, String sql) throws SQLException:用來執行一個不需要置換參數的更新操作。
1.5.4 動態代理
pers.hoobey.estore.factory/OrderServiceFactory.java&ProductServiceFactory.java
在程序運行時,運用反射機制動態創建而成,主要有一個Proxy類和一個InvocationHandler接口,動態代理角色:@1.抽象了主體角色@2.真實主題角色(實現了抽象主題接口)@3.動態代理主題角色(實現了InvocationHandler接口,並實現invoke方法)
public Object invoke(Object proxy, Method method,
Object[] args){實現了代理對象調用方法時希望執行的動作}動判斷是否有注解,得到注解上的注冊對象,得到權限名稱,得到用戶,如果為空,則拋出權限不足異常,用來判斷登錄用戶的身份從而實現不同的操作。