2010-09-07 120 views
0

我是servlets和JSP的新手。我正在嘗試從jsp調用記錄器servlet。要求是這樣的,servlet將控制權返回給jsp(在記錄事件之後)。該servlet需要是透明的,即根據日誌記錄功能可能關閉的性能。從JSP調用Servlet

是JSP:包括唯一的方法嗎?還有其他方法嗎?

謝謝,

溫斯頓。

+0

這個記錄器servlet會做什麼? – skaffman 2010-09-07 18:23:50

回答

0

您不能直接從JSP調用servlet。但是,您可以發送redirect。這會告訴瀏覽器它應該在另一個位置查找資源。

從JSP

<% 
String destination ="/jsp/destination.jsp";   
response.sendRedirect(response.encodeRedirectURL(destination)); 
%> 

從Serlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 

String destination ="/jsp/destination.jsp";   
response.sendRedirect(response.encodeRedirectURL(destination)); 

} 
} 

如果你的目的是 「記錄」 你應該使用Filter。過濾器就像一個輕量級的servlet,它不會生成自己的內容,而是插入到請求處理過程中,並執行正常的頁面處理。

強烈建議使用模式爲MVC的Servlet/JSP。它將應用程序的數據,用戶界面和控制邏輯分成三個獨立的實體。該請求由Servlet(控制器)處理,它將初始化完成用戶請求所需的任何JavaBean(模型)。然後,Servlet(控制器)將包含JavaBean(模型)的請求轉發到僅包含HTML和JSTL語法的JSP(視圖)頁面。

+0

-1代表「can not」和scriptlet-approach,Filter代表+1,這是正確的方法。 – BalusC 2010-09-07 19:39:07

+0

:(我只是想指出,從jsp調用一個servlet並不是正確的思維方式。無論如何,tks爲-1 + 1 = 0:D – 2010-09-07 22:03:10

+1

其中一種方法是'',正如前面提到的OP。另一種(更多的front-controller-pattern-ish)方式是首先調用servlet而不是JSP,然後像''doGet()''方法那樣在JSP中執行'RequestDispatcher#forward所有,OP肯定需要'過濾器'在這裏:) – BalusC 2010-09-07 22:08:38