韓順平Servlet和Jsp學習筆記

來源:互聯網
上載者:User

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.reload該servlet(webApps),2.關閉tomcat,3.關機)值行了這個函數後,這個網站內的所有的session和conTest都被釋放,為空白。


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

表單提交資料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的使用方法:①得到session:HttpSessionhs=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的各個屬性要佔用伺服器的記憶體,因此軟體公司都是在迫不得已的情況下才使用。

注意:以檔案—建立—視窗,的方式開啟視窗,session的ID是不變的,也就是同一個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
表名)

   翻頁的連結可以用下拉框或輸入文本

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.