如何将参数从servlet传递给JavaScript

时间:2014-09-22 22:02:27

标签: java javascript html servlets

我正在开发一款棋盘游戏,其动态棋盘尺寸为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。

3 个答案:

答案 0 :(得分:2)

在你的servlet中,你就这样去了

request.setAttribute("boardsize" boardSize);

这是atrribute和变量的名称。

你去的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,servlets,jsp的内容时,你会了解到更多。只需要花更多的精力阅读,这样你就可以学到它并不是很难理解,但如果你发现这样做有困难,请耐心等待。

答案 1 :(得分:0)

以下给出的代码可以满足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>

答案 2 :(得分:-1)

您也可以使用纯客户端JavaScript读取网址参数,例如在页面加载。所以你不需要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游戏的最佳方式。