JSP JavaBean Servlet工作原理實例講解
<script type="text/javascript">
google_ad_client = "pub-8800625213955058";
/* 336x280, 創建於 07-11-21 */
google_ad_slot = "0989131976";
google_ad_width = 336;
google_ad_height = 280;
//
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
JSP JavaBean兩層結構的開發應該是比較熟悉的,也比較好理解。
但是有一點必須要清楚就是用戶通過瀏覽器來發送網頁的請求,此請求到達服務器後在服務器端查找對應
的網頁,如果是首次請求(第二次就不用解釋執行了),對於JSP來說要生成Servlet,然後通過Servlet
引擎來執行Servlet,把調用JavaBean的結果嵌入到頁面中返回給用戶的瀏覽器。
JSP JavaBean Servlet三層結構的實質是多了一個Controller:Servlet來分發客戶端瀏覽器的請求。如
果把起控制器作用的Servlet的作用理解爲對客戶端的請求進行預處理對理解Servlet將有很大的幫助。通
過web.xml配置文件可以找到用戶請求和特定的Servlet的對應關係,每個Servlet都有一個特定的Servlet
對象與之對應,所以說處理用戶請求的就是一個繼承自HttpServlet的Servlet對象。
<!-- JSPC servlet mappings start -->
<servlet>
<servlet-name>ms1</servlet-name>
<servlet-class>news.FirstAction</servlet-class>
</servlet>
<servlet>
<servlet-name>ms2</servlet-name>
<servlet-class>news.DetailAction</servlet-class>
</servlet>
<!-- JSPC servlet mappings end -->
<servlet-mapping>
<servlet-name>ms1</servlet-name>
<url-pattern>/newsmain</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ms2</servlet-name>
<url-pattern>/newsDetail</url-pattern>
</servlet-mapping>
如上面所示的摘自web.xml的一段配置servlet,第一部分主要用來配置Servlet與具體的Servlet對象關聯
,第二部分主要用來配置請求由哪個Servlet處理,Servlet名字的關聯,處理請求就與具體Servlet處理
對象關聯起來,比如說,客戶端瀏覽器發來/newsmain的請求,它由ms1 servlet進行處理,通過ms1就能
找到相對應的serlet對象news.FirstAction,即/newsmain->ms1->news.FirstAction,這也就是配置
文件的意義所在。到現在懂得了用戶/newsmain請求會被news.FirstAction類的對象進行處理,所以說,
要看懂程序就要看懂FirstAction的作用是什麼就行了。比如說下面是FirstAction的一個實現。
public final class FirstAction extends HttpServlet {
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
DB db = new DB();
HttpSession session = req.getSession();
try {
session.setAttribute(Constants.NEWS_LIST_KEY, News
.SearchNewsTitle(db));
} catch (Exception e) {
e.printStackTrace();
}
db.close();
String target = "/P43_News/newsMain.jsp";
resp.sendRedirect(target);
}
}
通過這個實現可以看到,當服務器收到客戶端請求執行News.SearchNewsTitle(db)的操作,然後把返回值
通過session.setAttribute放到session裏,然後通過resp.sendRedirect(target)間接轉移到
newsMain.jsp,這樣在newsMain.jsp裏通過session.getAttribute函數就可以得到在存儲在session裏的
對應值。
回過頭來就容易看出JSP JavaBean兩層結構和JSP JavaBean Servlet三層結構的不同了,兩層結構必須把
預處理放在JSP中進行,比如說News.SearchNewsTitle(db),三層結構先把預處理在Servlet裏進行了,然
後相當於把這個處理結果通過Session返回給JSP,讓JSP更關注於界面的顯示
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.