【问题标题】:How to pass parameters from servlet to JavaScript如何将参数从 servlet 传递到 JavaScript
【发布时间】:2014-09-22 22:02:26
【问题描述】:

我正在开发一款动态棋盘大小为 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。

【问题讨论】:

  • JSP 是您的 java 和 html 之间的某种中间体。您将从 JSP 获得 HTML,如 andrex 的回答中所示。
  • 是的,你需要使用 JSP。否则,您可以直接对服务器执行 Ajax 并以这种方式获得所需的内容。 servlet 工作后,请求最终会在哪里呈现?
  • 实际上,由于它是用于视频游戏的,因此 ajax 替代方案可能比通过 JSP 和整页重新加载要好。 Eviatar,您可能不想每次进行修改时都重新加载完整的游戏板显示,对吧?在这种情况下,您应该查看 ajax 请求。
  • 没有jsp可以使用ajax是对的。我更新了我的答案以包含一种将值返回给 ajax 请求的方法。这不是一个完整的代码,但应该可以帮助您入门。

标签: java javascript html servlets


【解决方案1】:

在你的 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 处理的变量。

根据 cmets 所指出的,还有一种执行 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,只有 HTML。这真的没有意义......这个答案是正确的想法。
  • 我使用 Ajax 将参数发送到带有“url: servletName”的某个 servlet,在 servlet 上我使用 PrintWriter 打印参数。我还使用 Gson 对象将结果转换为 Json
【解决方案2】:

下面给出的代码可以提供从 JSP 到 Servlet 的响应。 //setParameter -- 获取参数

// 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>

【讨论】:

    【解决方案3】:

    您也可以使用纯客户端 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 游戏的最佳方式。

    【讨论】:

    • 可能有很多原因,比如拥有一个持久的世界、多个客户端等等。
    • 我的朋友需要往返服务器可能有很多原因。首先,他使用 java 表示他确实需要首先调用 serverlet
    • 你没事。我读的问题太快了。我没有看到Engineobject。
    • 为什么一开始没有正确阅读就回答得这么快?你想得分更多吗? :)
    • 也许 ;) 但他明确要求没有 JSP 的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多