簡體   English   中英

如何將參數從servlet傳遞到JavaScript

[英]How to pass parameters from servlet to JavaScript

我正在做一個棋盤游戲,動態棋盤大小為5x5,...,8x8
這應該是在網絡上運行的游戲。

我正在使用NetBeans和tomcat作為測試服務器。

我有GameSettings.html,用戶可以選擇面板尺寸並按提交。

數據將發送到名為GameSettingsServlet.java的servlet。

在那里,我拉出boardSize並將其解析為整數:

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

   createEngine(request);

   processRequest(request, response);
}

private void createEngine(HttpServletRequest request)
{
    int boardSize = Integer.parseInt(request.getParameter("boardSize"));
    int numberOfPlayers = Integer.parseInt(request.getParameter("numberOfPlayers"));
    m_Engine = new Engine(boardSize, numberOfPlayers );
}

我想用javaScript創建開發板,所以我需要將boardSize參數發送到javaScript(應該在BoardGame.html上運行),以便知道要創建多少行和列。

如何將boardSize傳遞給javaScript或HTML?

我在網上搜索,但只找到有關JSP的信息,我需要HTML上的信息。

在您的servlet中,您像這樣

request.setAttribute("boardsize" boardSize);

多數民眾贊成在名稱和變量。

您在jsp頁面中

<% int boardSize = (Integer) request.getAttribute("boardsize"); %>

然后,當您要在javasceipt中使用它時,您需要像這樣

<script>var boardsize =<%= boardSize%>;

同樣,在使用Java時,如果要訪問前端servlet設置的類和變量,則需要使用jsp而不是html。

您可以從這里開始http://docs.oracle.com/cd/E21764_01/web.1111/e13712/basics.htm

一旦您已經了解了整個servlet到jsp的邏輯,那么傳遞servlet所處理的變量應該是小菜一碟。

根據注釋所指出的,還有一種做ajax的方法,如果您使用ajax請求,則servlet可以返回值。 您確實需要響應才能執行此操作。

protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
   processRequest(request, response);
}
private void processRequest(HttpServletRequest request, HttpServletResponse response){
     int boardSize = Integer.parseInt(request.getParameter("boardSize"));
     int numberOfPlayers = Integer.parseInt(request.getParameter("numberOfPlayers"));
     m_Engine = new Engine(boardSize, numberOfPlayers );

    response.setContentType("text/xml");
    response.setHeader("Cache-Control", "no-cache");

    PrintWriter out = response.getWriter();

    out.write("<board>" + boardSize + "</board>");
    out.flush();
 }

我敢打賭,當您閱讀有關Java,Servlet,JSP的更多信息時,您將學到更多。 只需花更多的精力在閱讀上,這樣您就可以了解它並不難理解,但是如果您發現這樣做有困難,請耐心等待。

以下給出的代碼可以滿足JSP對Servlet的響應。 // setParameter-getparameter

// jsp --

 <form id="form1" name="form1" runat="server" 
            action="/YFCustomize/hello" method ="Post" >  
    <input id="MBA_DB" name="MBA_DB" type="text" value="11111" />
    <input id="Button2" type="submit" value="Validate"    />
 </form>



 // to Servlet - 
 public void doPost(HttpServletRequest request, HttpServletResponse response) 
 throws IOException, ServletException {
        String txtMBA_DB=request.getParameter("MBA_DB");
        String txtMBA_ip=request.getParameter("MBA_ip");

   }

下面給出的代碼可以滿足Servlet對JSP的響應。 // setAttribute-getAttribute

   // Servlet -      
            request.setAttribute("MBA_DB_VALIDATE",MBA_DB_VALIDATE); 
            request.setAttribute("YF_DB_VALIDATE",YF_DB_VALIDATE); 

            RequestDispatcher rd = 
            getServletContext().getRequestDispatcher("/YFCustomize/index2.jsp");

            rd.include(request, response); // or  rd.forward(request, response);

   // to JSP - 

    MBA_DB_VALIDATE :  <%= request.getAttribute("MBA_DB_VALIDATE") %>
    </br>
    YF_DB_VALIDATE :  <%= request.getAttribute("YF_DB_VALIDATE") %>
    </br>

您也可以使用純客戶端JavaScript讀取URL參數,例如在頁面加載時。 因此,您不需要一個servlet。

function getParameterByName(name) {
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
    results = regex.exec(location.search);
    return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}

用法(例如,加載DOM時):

var prodId = getParameterByName('prodId');

但是,當您確實需要servlet傳遞參數時,第一個答案就是正確的方法。 或者,您可以使用AJAX與服務器通信。 也許這是開發JavaScript游戲的最佳方法。

暫無
暫無

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

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