Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在servlet和JSP之间的MVC中存储会话变量(错误状态500)_Java_Eclipse_Model View Controller_Session Variables - Fatal编程技术网

Java 在servlet和JSP之间的MVC中存储会话变量(错误状态500)

Java 在servlet和JSP之间的MVC中存储会话变量(错误状态500),java,eclipse,model-view-controller,session-variables,Java,Eclipse,Model View Controller,Session Variables,当我运行我的动态网页时,在看到我得到一个状态为500的页面后,我在控制台中得到一个错误“java.lang.NumberFormatException:null” 该代码要求用户猜测0-1000之间的数字。如果用户猜测不正确,则允许用户使用相同的会话变量(存储目标数量和猜测数量)再次猜测。这将一直持续到用户正确猜测目标号码为止。我还避免使用隐藏文本选项来存储变量 我已经查找了错误消息的含义,但我无法确定它应用于何处,因为状态错误非常模糊 感谢您的帮助 来自控制台的错误消息: Oct 20, 20

当我运行我的动态网页时,在看到我得到一个状态为500的页面后,我在控制台中得到一个错误“java.lang.NumberFormatException:null”

该代码要求用户猜测0-1000之间的数字。如果用户猜测不正确,则允许用户使用相同的会话变量(存储目标数量和猜测数量)再次猜测。这将一直持续到用户正确猜测目标号码为止。我还避免使用隐藏文本选项来存储变量

我已经查找了错误消息的含义,但我无法确定它应用于何处,因为状态错误非常模糊

感谢您的帮助

来自控制台的错误消息:

Oct 20, 2018 11:59:12 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [controllers.GameServlet] in context with path [/GuessingGame_MVC_Version] threw exception
java.lang.NumberFormatException: null
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at controllers.GameServlet.doPost(GameServlet.java:47)
    at controllers.GameServlet.doGet(GameServlet.java:38)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>

<%@ page import="model.GameNumber" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Guessing Game - MVC Version</title>
</head>
<body>
  <h1>Guessing Game - MVC Version</h1>

  <p>
     Welcome to our guessing game!
  </p>

  <p>
     Please guess a number between 0 and 1000.
  </p>

  <form name="guessForm" action="doGuess" method="get">
     <label>
        Guess 1: 
     </label>
     <input type="text" name="guess" /><br />
     <input type="submit" name="submit" value="Make Guess">

  </form>


</body>
</html>
index.jsp(第一页):

Oct 20, 2018 11:59:12 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [controllers.GameServlet] in context with path [/GuessingGame_MVC_Version] threw exception
java.lang.NumberFormatException: null
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at controllers.GameServlet.doPost(GameServlet.java:47)
    at controllers.GameServlet.doGet(GameServlet.java:38)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>

<%@ page import="model.GameNumber" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Guessing Game - MVC Version</title>
</head>
<body>
  <h1>Guessing Game - MVC Version</h1>

  <p>
     Welcome to our guessing game!
  </p>

  <p>
     Please guess a number between 0 and 1000.
  </p>

  <form name="guessForm" action="doGuess" method="get">
     <label>
        Guess 1: 
     </label>
     <input type="text" name="guess" /><br />
     <input type="submit" name="submit" value="Make Guess">

  </form>


</body>
</html>

当我使用上面提到的jsp和servlet部署应用程序时 它可以正常工作,但我注意到您的GameServlet中的tomcat控制台中存在一些错误 因为您转发了两次请求,这已经完成了

即java.lang.IllegalStateException:提交响应后无法转发

因此,在您的GameServlet java中,在doPost下

评论最后一行(如下所述)

return; // not a must but helps in certain situations
关于您提到的错误消息 只有在文本框中传递字符串消息时,才会发生此错误。
可以在运行时对同一个应用附加检查。

您的代码似乎很好,根据您的注释,您似乎没有向servlet传递正确的值

当您说值作为字符串传递给servlet时,您是对的。让我们试着理解什么是NumberFormatException。从文档中:

抛出以指示应用程序已尝试转换 字符串,但该字符串没有 适当的格式

下面的代码将用作字符串“10”可以转换为int

    String str = "10";
    int i = Integer.parseInt(str);
但这会导致出现
NumberFormatException

    String str = "hi";
    int i = Integer.parseInt(str);

在您的情况下,您传递的字符串无法转换为int,因此它失败。

您为
guess
指定了什么值?如果你没有传递一个int,你会得到一个
NumberFormatException
我调用GameNumber guess=newgamenumber(Integer.parseInt(request.getParameter(“guess”));在servlet中。它在index.jsp中声明为表单@尼古拉斯基,我看得出来。我想说的是,如果你只传递一个
int
,你的代码就可以正常工作。也许你没有,因此你得到了一个
NumberFormatException
我想我对你的理解是错误的。。。你能帮我核实一下吗?我认为参数总是作为字符串变量发送的,所以我需要将其解析为int?如果我错了,请纠正我@尼古拉斯基,没错。但如果传递的字符串不是数字(整数范围内的数字),则无法将其解析为整数。这时你会得到一个
numberformatexception
@Rugh它对你有帮助吗?我试过你的建议,但它给了我同样的错误。java.lang.NumberFormatException:null@Hades你正在尝试的价值是什么?很困惑为什么它对你有效而对我无效。。。要求出口你拥有的东西会不会太多?不,我会和你分享代码。。。同时,您尝试的值是什么?我一直在输入中使用整数,如500、3、5、80。。。我从未将输入放入字符串中。我输入像500这样的int变量是错误的吗@NicholasKAre您的输入中有空格吗?前导或尾随空格也可能导致它失败。不,没有空格。只有输入中的数值。。。你认为这可能与输入变量之外的东西有关吗@尼古拉斯诺。这是您尝试格式化的唯一地方。确认换行
GameNumber guess=newgamenumber(Integer.parseInt(request.getParameter(“guess”))
try catch
块中,调试它并查看它是否失败。感谢您的帮助。我终于弄明白了为什么它不起作用。我的服务器运行不正常,因此我尝试在另一台我拥有的计算机上运行它,并且工作正常。
  RequestDispatcher dispatcherr = getServletContext().getRequestDispatcher(url);
   dispatcherr.forward(request, response);
return; // not a must but helps in certain situations
    String str = "10";
    int i = Integer.parseInt(str);
    String str = "hi";
    int i = Integer.parseInt(str);