[英]How to call a servlet method from a JSP?
我的Servlet中有以下方法。
private String process(HttpServletRequest arg0, HttpServletResponse arg1) {
return ("a key");
}
protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
process(arg0, arg1);
}
在web.xml中,添加了以下代碼
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>iusa.ubicacel.actions.map.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
在inicio.jsp中添加了以下內容
<script type="text/javascript" src="<%=request.getContextPath()%>/MyServlet"></script>
在上面的src標記中,我想從MyServlet的處理方法中添加google map api url(我將從servlet中的數據庫中檢索)。我從評論中了解到我的方法是錯誤的。有人可以告訴我如何僅使用此jsp和servlet即可正確執行此操作。
使用JSP編寫servlet的最佳實踐是遵循MVC模式:您的servlet將是控制器,JSP是視圖,而模型將由您的域對象組成,這些域對象通過請求屬性從servlet傳遞到JSP頁面。
我不認為您現在擁有的完全是錯誤的。 但這僅適用於需要從servlet生成所有javascript代碼的特殊情況(這幾乎不是真正的要求)。 假設這是您的真實要求(也許您從數據庫中讀取了整個javascript內容),則可以定義一個呈現JS內容的servlet(也可以將其映射為/main.js
或其他內容)對JSP頁面透明的動態生成)。
最有可能的是,您只需要一堆小項目即可在運行時動態生成(例如Google Maps網址,API密鑰或您存儲在數據庫中的任何內容)。 如果是這種情況,則可以在.js
文件中靜態定義您的JavaScript代碼,並允許使用某些構造函數參數(或其他參數)進行初始化。
在此設置中,您的servlet將讀取數據庫中的request.setAttribute("googleMapsUrl", url)
,然后通過調用request.setAttribute("googleMapsUrl", url)
將其傳遞給視圖,然后調用requestDispatcher.forward(...)
將控制權傳遞給JSP。
在JSP中,您現在需要在src中包含靜態腳本,然后可以使用另一個script標簽根據綁定到請求的動態值來初始化代碼:
<c:url value="/static.js" var="scriptUrl"/>
<script type="text/javascript" src="${scriptUrl}"></script>
<script type="text/javascript">
// let's assume your static script defines an object called `MyGoogleMapsDriver`...
var googleMapsDriver = new MyGoogleMapsDriver('${googleMapsUrl}');
</script>
我希望這有幫助。
您不需要它,應該訪問數據,以便:
從Servlet保存數據-> request.setAttribute( “ MyObject”,data);
在JSP中之后,加載需要-> request.getAttribute( “ MyObject” )的數據 ;
對不起,我的英語,祝你好運。
注意 :我不建議您這樣做,但這是問題的直接答案。 有關更多信息,請查看注釋。
如果您只是想添加處理方法返回的字符串,則需要執行以下操作:
public
且static
。 <%= MyServletName.process(request, response); %>
<%= MyServletName.process(request, response); %>
。 這將輸出處理方法的結果。 最后,您將獲得以下內容:
<script src="<%= MyServletName.process(request, response); %>"></script>
request
和response
變量在此范圍內可用。
重要提示 :您試圖通過這種方式實現的目標看起來像是一個糟糕的設計 。 由於各種原因,在此答案中進行了評論。 檢查@LuiggiMendoza和@DaveNewton的評論。
以下是需要考慮的一些要點:
編寫片段很容易,但絕不建議這樣做。 請參閱: 如何避免JSP文件中的Java代碼? 。
從JSP調用Servlet方法是錯誤的設計 。 Servlet方法旨在處理HTTP方法。 它們並非旨在處理特定情況。
您嘗試做的事情是反模式 ,您沒有分離問題。 JSP頁面應該是結構和呈現信息的視圖。 該信息應進行預處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.