簡體   English   中英

如何從JSP調用servlet方法?

[英]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” )的數據

對不起,我的英語,祝你好運。

注意 :我不建議您這樣做,但這是問題的直接答案。 有關更多信息,請查看注釋。


如果您只是想添加處理方法返回的字符串,則需要執行以下操作:

  1. 使您的方法publicstatic
  2. 然后編寫以下腳本: <%= MyServletName.process(request, response); %> <%= MyServletName.process(request, response); %> 這將輸出處理方法的結果。

最后,您將獲得以下內容:

<script src="<%= MyServletName.process(request, response); %>"></script>

requestresponse變量在此范圍內可用。

重要提示 :您試圖通過這種方式實現的目標看起來像是一個糟糕的設計 由於各種原因,在此答案中進行了評論。 檢查@LuiggiMendoza和@DaveNewton的評論。

以下是需要考慮的一些要點:

  1. 編寫片段很容易,但絕不建議這樣做。 請參閱: 如何避免JSP文件中的Java代碼?

  2. 從JSP調用Servlet方法是錯誤的設計 Servlet方法旨在處理HTTP方法。 它們並非旨在處理特定情況。

  3. 您嘗試做的事情是反模式 ,您沒有分離問題。 JSP頁面應該是結構和呈現信息的視圖。 該信息應進行預處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM