簡答
1、有人說:servlet和 JavaBean都是java類,可以互換使用,請您回答,在MVC中,控制器部分是否可以使用JavaBean完成?為什麼?
不能。因為javabean是普通的java類,MVC中的servlet要完成從客戶端接收資料,採用的servlet是HTTP協議,而普通的javabean不能完成該功能。
2、有人說:JSP是Servlet的高階實現,在MVC中,控制器部分應該用JSP實現,請您回答JSP和servlet的異同。
相似:
(1)兩者都是基於Java的技術,所以都繼承了Java的所有特性(跨平臺、多執行緒等 ),都可以使用Java強大的API。
(2)兩者工作方式相似:JSP程式碼先被JSP容器轉換為Servlet程式碼再編譯為類。
(3)兩者在J2EE體系結構中的工作層次相同,都負責與客戶端的連線。
不同:
1程式設計方式不同。Servlets是一些執行於Web伺服器端的Java小程式;而JSP是指令碼,編寫起來更簡單容易。
2應用目的不同。Servlet主要用於從客戶端接收請求資訊,而JSP主要負責將伺服器端資訊傳送到客戶端
3、採用上文描述的MVC設計模式,有什麼優點和缺點?
優點:1、提高了程式碼複用 2、減少了開發時間 3、更高的可維護性
缺點:1、系統結構變得複雜 2、view對模型資料的訪問效率低
4、簡單回答Servlet的工作過程。
(1) 客戶機將請求傳送到伺服器。
(2) 伺服器上的Web容器例項化Servlet,併為Servlet程式建立執行緒。Servlet是在出現第一個請求時裝入的,在伺服器關閉之前不會解除安裝它。
(3) Web容器將請求資訊傳送到Servlet。
(4) Servlet建立一個響應,並將其返回到Web容器。Servlet使用客戶端請求中的資訊及伺服器可以訪問的其他資訊資源如資原始檔和資料庫等來動態構造響應。
(5) Web容器將響應發回給客戶機。
(6) 伺服器關閉或Servlet空閒時間超過一定限度時,呼叫destroy方法退出。
5、詳述MVC 中M、V、C的作用及其相互關係。(P241)
6、如果Browser已關閉了cookies,在JSP中我如何開啟session來跟蹤,舉例說明。
使用URL重寫即可,如下:
session1.jsp
<%@ page session="true" %>
<%
Integer num = new Integer(100);
session.putValue("num",num);
String url =response.encodeURL("session2.jsp");
%>
<a href=<%=url%>>session2.jsp</a>
session2.jsp
<%@ page session="true" %>
<%
Integer i= (Integer )session.getValue("num");
out.println("Num value in session is "+i.intValue());
%>
7、JSP、Servlet和HTML中的請求轉派發分別如何實現。
JSP實現轉派發
(1) 在java指令碼程式碼中使用 response.sendRedirect("favorite.jsp") 實現轉派發
(2) JSP標準動作: <jsp:forward> 例如: <jsp:forward page="forward2.jsp" />
Servlet實現轉派發
(1) 程式碼 response.sendRedirect("/abc.html"); 遇到該行程式碼,會轉到abc.html頁面。
(2) ServletContext的getRequestDispatcher(String path)方法返回與path相聯絡的RequestDispatcher物件
RequestDispatcher物件呼叫forward(ServletRequest request, ServletResponse response) 轉向 path
HTML實現轉派發
(1) 使用 href 超連結 實現轉派發
例如:<a href="forward2.jsp">返回!</a>
(2) 使用 form 表單提交 實現轉派發
(3) 使用 meta 例如:
<metahttp-equiv=refresh ontent='<%=aForwardInfo.getSecond()%>;url=<%=aForwardInfo.getUrl()%>'>
(4) 使用 "history.back()"
例如:<input type="button" name="Submit2" value="返回" onClick="history.back();">
(5) 使用 "javascript:history.go(-1);"
例如:<a href="javascript:history.go(-1);">返回!</a>
8. Servlets 與JSP四種會話跟蹤技術
答:會話作用域Servlets JSP 頁面描述
page是代表與一個頁面相關的物件和屬性。一個頁面由一個編譯好的 Java servlet 類(可以帶有任何的 include 指令,但是沒有 include 動作)表示。這既包括 servlet 又包括被編譯成 servlet 的 JSP 頁面
request是代表與 Web 客戶機發出的一個請求相關的物件和屬性。一個請求可能跨越多個頁面,涉及多個 Web 元件(由於 forward 指令和 include 動作的關係)
session是代表與用於某個 Web 客戶機的一個使用者體驗相關的物件和屬性。一個 Web 會話可以也經常會跨越多個客戶機請求
application是代表與整個 Web 應用程式相關的物件和屬性。這實質上是跨越整個 Web 應用程式,包括多個頁面、請求和會話的一個全域性作用域
9. Java servlet API中forward() 與redirect()的區別?
答:前者僅是容器中控制權的轉向,在客戶端瀏覽器位址列中不會顯示出轉向後的地址;後者則是完全的跳轉,瀏覽器將會得到跳轉的地址,並重新傳送請求連結。這樣,從瀏覽器的位址列中可以看到跳轉後的連結地址。所以,前者更加高效,在前者可以滿足需要時,儘量使用forward()方法,並且,這樣也有助於隱藏實際的連結。在有些情況下,比如,需要跳轉到一個其它伺服器上的資源,則必須使用sendRedirect()方法。
10.JSP中動態include與靜態include的區別?
答:動態include用jsp:include動作實現
<jsp:include page="included.jsp" flush="true" />它總是會檢查所含檔案中的變化,適合用於包含動態頁面,並且可以帶引數
靜態include用include偽碼實現,不會檢查所含檔案的變化,適用於包含靜態頁面
<%@ include file="included.htm" %>
問答題
1.jsp有哪些內建物件?作用分別是什麼?
application物件代表應用程式上下文,它允許JSP頁面與包括在同一應用程式中的任何Web元件共享資訊。
Config物件允許將初始化資料傳遞給一個JSP頁面
Exception物件含有隻能由指定的JSP“錯誤處理頁面”訪問的異常資料。
Out物件代表提供輸出流的訪問
Page物件代表JSP頁面對應的Servlet類例項
PageContext物件是Jsp頁面本身的上下文,它提供唯一一組方法來管理具有不同作用域的屬性
Request物件提供對Http請求資料的訪問,同時還提供用於加入特定請求資料的上下文
Response物件允許直接訪問HttpServletResponse物件
Session物件可能是狀態管理上下文中使用最多的對話
2.jsp有哪些動作?作用分別是什麼?
<jsp:param>操作被用來以“名—值”隊的形式為其他標籤提供附加資訊
<jsp:include>操作允許在請求是在現成的JSP頁面裡包含靜態或者動態資源
<jsp:forward>操作允許將請求轉發到另一個JSP、servlet或靜態資原始檔
<jsp:useBean>標籤用來在JSP頁面中建立一個JavaBean例項並指定他的名字以及作用範圍
<jsp:setProperty>此操作和setBean一起協作,用來設定JavaBean的屬性
<jsp:getProperty>操作是對<jsp:setProperty>操作的補充,用來訪問一個Bean的屬性
<jsp:plugin>用來產生客戶端瀏覽器的特別標籤,可以使用它來插入Applet和JavaBean
<jsp:fallback>
3.JSP中動態INCLUDE與靜態INCLUDE的區別?
如果檔案僅僅是靜態檔案,那麼這種包含僅僅是把包含檔案的內容加到JSP檔案中去,但這個被包含檔案不會被JSP編譯器執行。相反,如果這個被包含檔案是動態的檔案,那麼他將被JSP編譯器執行。如果是動態檔案還可以用<jsp:param>傳遞引數。
4.兩種跳轉方式分別是什麼?有什麼區別?
<jsp:include page="included.jsp" flush="true">
<jsp:forward page= "nextpage.jsp"/>
<jsp:include>操作允許在請求是在現成的JSP頁面裡包含靜態或者動態資源
<jsp:forward>操作允許將請求轉發到另一個JSP、servlet或靜態資原始檔
5.servlet執行的生命週期圖.
裝載ServletServlet類 Servlet初始化(呼叫init方法)例項物件被回收
提供服務(呼叫Service方法) 銷燬Servlet例項(呼叫destroy方法)
8.在程式裡怎樣註冊servlet.
<servlet>
<servlet-name>displayChart</servlet-name>
<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>displayChart</servlet-name>
<url-pattern>/displayChart</url-pattern>
</servlet-mapping>