如何将参数从servlet传递到JavaScript
我正在制作一款动态棋盘大小为5x5,…,8x8的棋盘游戏如何将参数从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
这应该是一个在网络上运行的游戏 我正在使用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的解决方案。