如何将参数从servlet传递到JavaScript

如何将参数从servlet传递到JavaScript,java,javascript,html,servlets,Java,Javascript,Html,Servlets,我正在制作一款动态棋盘大小为5x5,…,8x8的棋盘游戏 这应该是一个在网络上运行的游戏 我正在使用NetBeans和tomcat作为测试服务器 我有GameSettings.html,用户可以选择棋盘大小并按submit 数据将被发送到名为GameSettingsServlet.java的servlet 在那里,我取出boardSize并将其解析为整数: @Override protected void doGet(HttpServletRequest request, HttpServlet

我正在制作一款动态棋盘大小为5x5,…,8x8的棋盘游戏
这应该是一个在网络上运行的游戏

我正在使用NetBeans和tomcat作为测试服务器

我有GameSettings.html,用户可以选择棋盘大小并按submit

数据将被发送到名为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,所以我需要将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%>;
var boardsize=;
另外,当您使用java时,如果希望访问前端servlet设置的类和变量,则需要使用jsp而不是html

你可以从这里开始

一旦您已经了解了整个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();
 }
protectedvoid doGet(HttpServletRequest请求,HttpServletResponse响应)
抛出ServletException、IOException{
processRequest(请求、响应);
}
私有void processRequest(HttpServletRequest请求、HttpServletResponse响应){
int boardSize=Integer.parseInt(request.getParameter(“boardSize”);
int numberOfPlayers=Integer.parseInt(request.getParameter(“numberOfPlayers”);
m_发动机=新发动机(板尺寸、玩家数量);
setContentType(“text/xml”);
setHeader(“缓存控制”、“无缓存”);
PrintWriter out=response.getWriter();
写出(“+boardSize+”);
out.flush();
}

我打赌,当你阅读更多关于java、servlet和jsp的内容时,你会学到更多。只需在阅读上花更多的精力,这样你就可以了解这其实并不难理解,但如果你在阅读过程中遇到困难,请耐心等待。

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

下面给出的代码可以作为从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");

   }
//jsp--
//至-
public void doPost(HttpServletRequest请求、HttpServletResponse响应)
抛出IOException、ServletException{
字符串txtMBA_DB=request.getParameter(“MBA_DB”);
字符串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>
//Servlet-
setAttribute(“MBA_DB_VALIDATE”,MBA_DB_VALIDATE);
setAttribute(“YF_DB_VALIDATE”,YF_DB_VALIDATE);
RequestDispatcher rd=
getServletContext().getRequestDispatcher(“/YFCustomize/index2.jsp”);
包括(请求、响应);//或rd转发(请求、响应);
//至-
MBA_DB_验证:

YF_DB_验证:

JSP是java和html之间的某种中介。您将从JSP获得HTML,如andrex的回答所示。是的,您需要使用JSP。否则,您可以直接对服务器执行Ajax,并通过这种方式获得所需的内容。servlet工作后,请求最终在哪里呈现?实际上,因为它是用于视频游戏的,ajax替代方案可能比通过JSP和完整页面重新加载要好。Eviatar,您可能不希望每次修改时都重新加载完整的游戏板显示,对吗?在本例中,您应该查看ajax请求。如果没有jsp,您可以使用ajax是正确的。我更新了我的答案,以包含一种向ajax请求返回值的方法。这不是一个完整的代码,但应该让你开始。他说没有JSP,只有HTML。这真的没有道理。。。这个答案是正确的。我使用Ajax将参数发送到带有“url:servletName”的servlet,并在servlet上使用PrintWriter打印参数。我还使用Gson对象将结果转换为json可能有很多原因,比如有一个持久的世界、多个客户机等。我的朋友可能有很多原因需要为往返服务。首先,他使用了java,这意味着他真的需要调用Serverlet。首先,你很好。我把问题看得太快了。我没有看到
引擎
对象。为什么一开始你连正确的阅读都没读就回答得这么快?你想得分更多吗?:)也许;)但是他明确地要求一个没有JSP的解决方案。