韓順平Servlet和Jsp學習筆記

Java EE概述:

Java EE是一個開放的平臺,它包括的技術很多,主要包括十三種核心技術(java EE就是十三種技術的總稱)。建立一個整全的概念。

J2ee的十三種技術(規範)

1.       java數據庫連接(JDBC)。——JDBC定義了4種不同的驅動:1.JDBC-ODBC橋,2.JDBC-native驅動橋3,JDBC-network橋4.純java驅動。

2.       Java命名和目錄接口(JNDI)【它是爲了對高級網絡應用開發中的使用的目錄基礎結構的訪問】。

3.       企業Java Beans【Enterprise Java Beans,EJB)(它提供了一個架構來開發和配置到客戶端的分佈式商業邏輯,因此可以明顯減少開發擴展性、高度複雜企業應用的難度。】。

4.       JavaServer Pages【JSPs】。

5.       Java servlets【servlets提供的功能大部分與JSP相同,JSP中大部分是HTML代碼,其中只有少量的Java代碼,而servlets則相反,它完全使用Java編寫,並且產生HTML代碼】。

6.       Java IDL/CORBA【用得不多】。

7.       Java 事務體系(JTA)/Java事務服務(JTS)【用得不多】。

8.       JavaMail和JavaBenas激活架構(JavaBeans ActivationFramework,JAF)。【JavaMail是一個用來訪問郵件服務的API】。

9.       Java信使服務(Java MessagingService,JMS)【JMS是一個用來和麪向信息的中層通信的API】。

10.     擴展標記語言【Extensible Markup Language,XML】。

11. 12. 13當前流行的及格框架 struts+hibernate+spring【ssh】。

------------------------------------------------------------------------------

在java ee的開發中有幾個重要的開發模式:

1.Model1模式  2.model2模式(model2x模式(用得少))  3.mvc模式

一、Model1模式

    Model1的基礎是jsp文件,它由一些相互獨立的jsp文件,和其它一些java class組成(不是必須的)。這些jsp從HTTPRequest中獲得所需要的數據,處理業務邏輯,然後將結果通過Response返回前端瀏覽器。

    從上面分析我們可以看到model1模式可以分爲兩類:

1.  Model1(純jsp技術,不帶任何java class)。

2.  Model1(jsp+java class)。

Model1模式的缺點:

1.  表現層和業務層混合在一起(亂!)。

2.  在開發過程中,不利於多人協同開發。

3.  不利於後期維護。

Model1模式的優點:

1.  簡單,開發速度較快。

2.  比較適合開發小的項目。

二、model1(結合java class)開發模式,有些書上稱:mv模式,即:màmodel模型(java class,業務邏輯層),vàview視圖(jsp,界面層)。

1.一個數據庫應一個類:ConnDB.java(得到連接)。

    2.數據庫中的每一張表對應兩個類:(1)UserBean.java(表示users表)類。(2)UserBeanCl.java(業務邏輯,即對users表的操作)類。

    如:

      login.jsp輸入數據,logincl.jsp通過調用java class(模型)處理數據,wel.jsp顯示數據。這是一種多麼完美的開發模式。

   不足之處:

1.  Jsp技術主要做界面,但是logincl.jsp這裏調用了java class(模型),完成對用戶驗證,顯得有點怪怪的。

2.  Wel.jsp是用於顯示用戶信息(顯示數據),但,wel.jsp除了顯示數據,還調用了java class(模型),代碼的優雅就蕩然無存了,也不得於將來的分工。

3.  Servlet技術處理頁面的跳轉是最快捷和方便的,難道我們就此不用了嗎?

      

三、mvc開發模式:M(model模型),V(view視圖),C(controller控制器)。

    MVC是一個設計模式,它強制性的使應程序的輸入、處理、和輸出分開。使用MVC應用程序分成三個核心部件:模型、視圖、控制器。它們各自處理自己的任務。

     M主要由java class來做,也可以是java bean、eib等

     V由jsp來做

     C由servlet來做

   對上的例子進行改進:

1.       增加控制器(servlet):將logincl.jsp用servlet來替代,發揮servlet充當控制中轉的優勢。

2.       在控制器(servlet)中去調用模型(model)去完成用戶驗證,並準備要顯示的用戶信息數據。

 

MVC開發模式的總結:

處理過程:首先控制器接收用戶的請求,並決定應該調用哪個模型來進行處理,然後調用模型來處理用戶的請求並返回數據,最後控制器用相應的視圖顯示模型返回的數據,並通過瀏覽器呈現給用戶。

Mvc模式存在的缺點:

1. 工作量增加了。

由於開發者將一個應用程序分成了三個部件,所以使用MVC同時也意味着你將要管理比以前更多的文件,這一點是顯而意見的。這樣好像我們的工作量增加了,但是請記住這比起它所能帶給我們的好處是不值一提。

2. 不適用小型項目,否則就是機關槍打蚊子。

3. 調試應用程序難度加大。

Mvc提倡模型和視圖分離,這樣也給調試應用程序帶來了一定的困難。每個構件在使用之前都需要經過徹底的測試。一旦你的構件經過了測試,你就可以毫不顧忌的重用它們了。


------------------------------------------------------------------------------

數據庫中用戶名是中文,中文亂碼問題(一般是要查詢數據時,有中文字符才需要轉碼):

當提交表單時,表單中有中文,也會產生亂碼。

   解決中文亂碼問題,有三種方法:

1.  重新轉碼,如,有String u=”是中文”; u=newString(u.getBytes(“iso-8859-1”),”gb2312”);

2.  使用過濾器來解決[詳解]

3.  通過修改Tomcat配置servlet.xml文件[不太穩定.],具體操作如下:

<Connectorport="8080" protocol="HTTP/1.1"  maxThreads="150"   connectionTimeout="20000"  redirectPort="8443" />改爲:

<Connectorport="8080" protocol="HTTP/1.1"  maxThreads="150"   connectionTimeout="20000"  redirectPort="8443"URIEncoding=”gbk”/>


在<Connector>元素中增加屬性URIEncoding,其值爲”gbk,表示客戶端請求傳送來的值均以gb2312的標準來編碼,這樣在業務處理中就不需要在對其編碼進行轉換,大在簡化了程序,提高了執行效率。

當request得到的是亂碼時,可以這樣解決(一定要這樣寫):

 name=new String(request.getParameter(“username”).getBytes(“ISO-8859-1”),”gb2312”);


------------------------------------------------------------------------------

3.       繼承HttpServlet類(該類有doGet,doPost方法)

Servlet的生命週期

1.       init()函數,用於初始化該servlet(類似於類的構造函數,該函數只會被調用一次(當用戶第一次訪問該頁面的servlet時被調用。)。)。

2.       業務邏輯函數(如:service,doGet,doPost等方法)(當用戶每訪問該servlet時,都會被調用,它有兩個參數:ServletRequest—用於獲取客戶端的信息,ServletResponse—用於向客戶端返回信息)。

3.      destroy()函數,用於銷燬servlet實例(釋放內存),只有如下三種情況纔會周用(1.reloadservlet(webApps)2.關閉tomcat3.關機)值行了這個函數後,這個網站內的所有的sessionconTest都被釋放,爲空。


------------------------------------------------------------------------------

表單提交數據get請求和post請求的區別

1.       從安全方面看get<post,因爲get提交的數據會在瀏覽器地址欄顯示

2.       從提交的內容大小來看get<post, get提交的數據不能大於2K,面post提交的數據理論上不受限制,但是實際編程中建議不要大於64K。

3.       從請求響應速度上看get>post,get要求服務器立即響應請求,而post請求可能形成一個隊列請求。

從以上幾點看,表單提交方式(method)建議用post

sevlet中打印的html語句,可以不加引號

同一用戶的不同頁面共享數據的四種方法

1.  Cookie(小甜餅,在javax.servlet.http.*;這個包裏面)(服務器在客戶端保存用戶的信息,比如登錄名,密碼…就是cookie,數據量並不大,服務器端在需要的時候可以從客戶端讀取。)。

Cookie的使用方法:①Cookie有點像一張表,分兩列一個是名字,一個是值,數據類型都是String。②創建Cookie(在服務器端創建)Cookie c=newCookie(String name,String val);③將Cookie添加到客戶端:response.addCookie(c); ④讀取Cookie(從客戶端讀到服務器):Cookie[]allCookie=request.getCookies();c.getName();c.getValue();方法讀取⑤修改Cookie存在時間:c.setMaxAge(30);單位秒,爲負則該cookie不會存儲,爲0則刪除該cookie,如果不設置存在時間,那第該Cookie將不會保存。

2.  sendRedirect(地址跳轉,注意中文處理)

3.  Session(會話技術)(當用戶打開瀏覽器,訪問某個網站時,服務器就會在服務器內存爲該瀏覽器分配一個空間,該空間被這個瀏覽器獨佔,這個空間就是session空間,其中的數據默認存在時間爲30min,可以修改(在conf—web.xml中修改))。

Session的使用方法:①得到sessionHttpSessionhs=request.getSession(true);

②向session添加屬性:hs.setAttribut(Stringname,Object val);③從session得到某個屬性:Stringname=hs.getAttribute(String name);④從session刪除掉某個性性:hs.removeAttribute(String name);⑤修改session的存在的時間:hs.setMaxInactiveInterval(20);單位秒,爲負則永遠不超時,爲0則馬上超時。

因爲session的各個屬性要佔用服務器的內存,因此軟件公司都是在迫不得已的情況下才使用。

注意:以文件—新建—窗口,的方式打開窗口,sessionID是不變的,也就是同一個session空間

 

4.  隱藏表單提交(form)(input type=hiddenname=““ value=““),在提交該表單時,能一併提交過去。(獲取方式:req.getParameter(Stringname);)。


------------------------------------------------------------------------------

Cookie VS session

1.  存在的位置:cookie保存在客戶端,session保存在服務器端。

2.  安全性:比較而言,cookie的安全性比session要弱。

3.  網絡傳輸量:cookie通過網絡在客戶端與服務器端傳輸,而session保存在服務器端,不需要傳輸。

4.  生命週期(20分鐘爲例)cookie的生命週期是累計的,從創建時,就開始計時,20分鐘後cookie生命週期結束,cookie就無效。②session的生命週期是間隔的,從創建時開始時計時,如在20分鐘,沒有訪問過session,那麼session信息無效,如果在20分鐘內,比如第19分鐘時,訪問過session,那麼它的生命週期將重新開始計算。③另外,關機會造成session生命週期結束,但是對session沒有任何影響。

使用ServletContext(和session一樣,但是它所有的客戶都可以訪問)。

1.       得到ServletContext實例:this.getServletContext();

2.       你可以把它想像成一張表,這個和Session非常相似:每一行就是一個屬性。添加屬性:setAttribute(String name,Object ob); 

得到值:getAttribute(Stringname);返回Object。

刪除屬性:removeAttribute(Stringname);

3.       生命週期:ServletContext中的屬性的生命週期從創建開始,到服務器關閉而結束。

4.      使用ServletContext:的注意事項:因爲存在ServletContext中的數據會長時間的保存在服務器,會佔用內存,因此我們建議不要向ServletContext中添加過大的數據……. 切記


------------------------------------------------------------------------------

分頁技術(方法)

我們先講講分頁的算法:

我們需要定義四個量,它們有各自的用處,如下:

int pageSize:每頁顯示多少條記錄

int pageNow:希望顯示第幾頁

int pageCount:一共有多少頁

int rowCount:一共有多少條記錄

說明:

pageSize是指定的(常量)。

pageNow是用戶選擇的(變量)。

rowCount是從表中查詢得到的(是個變量)。

pageCount是計算出來的,該計算式爲:

    if(rowCount%pageSize==0)

    {

        pageCount=rowCount/pageSize;

}

else

{

     pageCount=rowCount/pageSize+1;

}

然後查詢數據庫,我們可能很自然的想到,用

select 字段列表 from 表名  where id between ? and ?

但是如果表的某個id被刪除了,那麼某頁可能就會少一條記錄。

因此最終解決方法是如下語句:

    select toppageSize 字段名列表  from 表名 where  id  not in

(select top pageSize *(pageNow-1)  id from 表名)

   翻頁的鏈接可以用下拉框或輸入文本



發佈了30 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章