1.介紹jsp:
雖然在形式上JSP和ASP或PHP看上去很相似——都可以被內嵌在HTML代碼中。但是,它的執行方式和ASP或PHP完全不同。在JSP被執行的時候,JSP文件被JSP解釋器(JSP
Parser)轉換成Servlet代碼,然後Servlet代碼被Java編譯器編譯成
.class 字節文件,這樣就由生成的Servlet來對客戶端應答。所以,JSP可以看做是Servlet的腳本語言(Script
Language)版。
由於JSP/Servlet都是基於Java的,所以它們也有Java語言的最大優點——平臺無關性,也就是所謂的“一次編寫,隨處運行(WORA
– Write Once, Run Anywhere)”。除了這個優點,JSP/Servlet的效率以及安全性也是相當驚人的。因此,JSP/Servlet雖然在國內目前的應用並不廣泛,但是其前途不可限量。
2.JSP和ASP.NET相比較:
a.相對C#,JSP的腳本語言JAVA也是面向對象的、分佈式的、解釋的語言。
b.與C#相似JAVA同樣去掉了難以理解的指針等概念,取而代之的是類和對象。
C. JSP有一項全新的技術――Servlet(服務器端程序)很好的節約了服務器資源。
d.JAVABeans是針對ASP.NET的Server Control的技術。只要會JAVA, JavaBeans就 很容易寫出。
e.再有就是JAVA的JDBC數據庫連接技術。
f.JSP對XML同樣有十分廣泛的支持。
G. Java與平臺無關,asp.net依賴微軟的操作系統
H jsp主要應用於中大型網站建設,安全且高效;
3.servlet實例的三個版本不足之處:
a) 大量重複代碼,比如,數據庫的連接與關閉代碼,數據庫的url及用戶名密碼暴露在servlet中,違背項目的安全性;代碼不按功能進行劃分,命名不合理;
b) 針對一個表的操作需要若干個servlet類來爲之服務,如果數據庫表多,會使web.xml的內容過長,管理混亂;
c) 頁面與邏輯處理沒有很好的解耦;
4.MVC概念:
Model:業務邏輯,則各種業務處理類實現;
View:客戶端顯示,通常由jsp來負責(例子是由html充當)
Controller:控制器,通常由servlet充當;
5.MVC的處理流程:
首選,是控制器接收到客戶的請求,並由決定調用哪個模型來進行處理,然後模型用業務邏輯來處理用戶的請求並返回數據,最後控制器調用相應的視圖格式化模型層返回的數據,並通過視圖展示給用戶;
附:初學者常會突略的問題:
1. 字符串判斷語句:
在java中String變量不是一個簡單的變量而是一個類實例,不同的方法會得到不同的結果:
a.
String str1="我是傻瓜";
String str2="我是傻瓜"; (or String str2="我是"+"傻瓜"; )
if (str1==str2)
out.print("yes");
else
out.print("no");
結果是"yes"。
大概是編譯優化,str1,str2指向同一個類實例;
b.
String str1,str2,str3;
str1="我是傻瓜";
str2="我是";
str3=str2+"傻瓜";
if (str1==str3)
out.print("yes");
else
out.print("no");
結果是"no"。
String str1=new String("我是傻瓜");
String str2=new String("我是傻瓜");
if (str1==str2)
out.print("yes");
else
out.print("no");
結果是"no"。
String str1=new String("我是傻瓜");
String str2=new String("我是傻瓜");
if (str1. equals (str2))
out.print("yes");
else
out.print("no");
結果是"yes"。比較字符串是否一致,要用:str1.equals(str2)或str1.compareTo(str2);
2. web.xml中有兩種配置error-page
Eg.
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
上面配置了當系統發生 500 錯誤(即服務器內部錯誤)時,跳轉到錯誤處理頁面 error.jsp 。
Eg.
<error-page>
<exception-type>java.lang.NullException</exception-type>
<location>/error.jsp</location>
</error-page>
上面配置了當系統發生 java.lang.NullException (即空指針異常)時,跳轉到錯誤處理頁面 error.jsp;
3. 更改類的時候要記得重新啓動服務器:
比如,我們寫了一個類login.class(編譯後的文件),部署後才發現有bug,之後我們修復重新生成login.class,然後我們將其替換掉原來發布在服務器的class文件,不要以爲這樣就行,要記得重啓服務器。因爲,可能這個class已經加載到服務器內存,每次調用該類的時候,如果容器在內存中找到,就不會去編譯剛複製進來的類了。(自己的理解)
4. Web.xml的配置問題:
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
這個節點主要是配置站點的首頁顯示的,當我們創建一個網站時它就默認將其設成index.jsp。當然,我們要根據我們的需要來修改這個值,比如,我們相將其設成index.do(這裏是關於servlet的映射地址),很多人會將其設成/index.do,這是不對的,我們不能像設置servlet的映射地址一樣加個“/”。
<servlet-mapping>
<servlet-name>ControlServlet</servlet-name>
<url-pattern>/control.do</url-pattern>
</servlet-mapping>
這個跟上面就不一樣,這裏url-parttern裏的節點值記得在前面加個“/”
5. 中文亂碼問題:
a. response.setContentType("text/html;charset=GBK");
b. request.setCharacterEncoding("GBK");
c. response.setCharacterEncoding("GBK");
a 是設置servlet的輸出文本類型,上面例子,是指html文本,編碼爲中文的GBK。
b 是設置request的流編碼,servlet每當收到請求時,request對象封裝了各種傳過來的頁面對象,如果不設其編碼,當我們取值的時候,如果參數包含中文就可能出現亂碼;
c 是設置response的流編碼,servlet處理完請求一般會向客戶端返回響應,這時response對象就封裝各種字符串對象,如果這時不設中文編碼gbk的話,當客戶端解釋的時候也有可能能出現中文亂碼;
6. 最常見的異常:NullPointException:
這個問題,是所有面象對象程序設計都應該注意的問題,當然在java中也是特別常見的,我們在寫調用對象的方法或者屬性的時候,要考慮這個對象會不會是空的,比如:
String action = request.getParameter("action");
if(action == null || action == ""){
//dosomething
}
如果我們直接,if(action == "")就有可能報空指針異常了。
7. 執行servlet時,發生下載提示:
(1).可能性一:text/html;charset=GBK中間分號寫成逗號.
(2).可能性二:XML中配置信息出錯.
(3).可能性三:如定義全局變量時,例:CONTENT_TYPED在以後所用中放在雙引號之中.
(4).可能性四:當上面的text/html,charset中寫錯字符的時候,也會提示下載.
8. 執行servlet時,發生404錯誤:
(1).多爲xml中配置出錯.
(2).可能在servlet通信方法中url出錯.
(3).表單提交時:action路徑.
(4).比較弱智的錯誤就是標記寫錯,請仔細檢查.
9. 關於所附的幾個實例的使用方法:
先將demos解壓,放在硬盤的任何位置(前提是你能比較容易找到他們-_-)
打開我們的Escplise,然後在“package explorer”框裏右擊,選擇“import”:如圖,
10. 參考例子,見附件:http://download.csdn.net/detail/keyingbo2008/4313979