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更關注于界面的顯示。
新聞熱點
疑難解答