2015-11-24 3 views
0

Я довольно новичок как в StackOverflow, так и в программировании веб-приложений, поэтому, пожалуйста, расскажите мне, если это очень простое решение.Java.lang.NullPointerException, брошенный в Glassfish Webapp

Я пытаюсь создать онлайн-приложение для викторины и изложил все мои классы Java, чтобы выполнить викторину, и протестировал их в консоли, чтобы убедиться, что они выводят то, что мне нужно.

Однако, когда я нахожусь на странице C1Test.jsp, в которой должна быть создана викторина, я получаю исключение NullPointerException, созданное стеклянной фишкой, и, после небольшого количества поисковых запросов, я все еще не уверен, почему.

Трассировка стека может быть найдена ниже, а также мой исходный код C1Test.jsp. Любая помощь была бы высоко оценена, это мой последний проект для моего уровня в области компьютерных наук, и я не могу добиться какого-либо прогресса, пока это не будет исправлено.

Заранее спасибо.

Info: Closing WebApplicationContext for namespace 'dispatcher-servlet'startup date [Tue Nov 24 16:32:38 GMT 2015]; parent: Root WebApplicationContext 
Info: WebModule[null] ServletContext.log():Closing Spring root WebApplicationContext 
Info: Closing Root WebApplicationContext: startup date [Tue Nov 24 16:32:37 GMT 2015]; root of context hierarchy 
Warning: StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exception 
java.lang.NullPointerException 
    at org.apache.jsp.C1Test_jsp._jspService(C1Test_jsp.java:101) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) 
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) 
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175) 
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561) 
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545) 
    at java.lang.Thread.run(Thread.java:745) 

C1Test.jsp исходный код:

<%-- 
    Document : C1 Test 
    Created on : Nov 5, 2015, 6:47:35 PM 
    Author  : Joe Perkins 
--%> 
<%@ page language="java" import="Dissertation.*" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>C1 Test</title> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
     <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
     <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> 
    </head> 

    <body> 

     <nav class="navbar navbar-inverse"> 
      <div class="container-fluid"> 
       <div class="navbar-header"> 
        <a class="navbar-brand" href="HomePage.jsp">EduMath</a> 
       </div> 

       <div> 
        <ul class="nav navbar-nav"> 
         <li><a href="Index.jsp">Home</a></li> 
         <li><a href="C1.jsp">C1 Revision</a></li> 
         <li><a href="C2.jsp">C2 Revision</a></li> 
         <li><a href="SkillsetDeveloper.jsp">Skillset Development</a></li> 
         <li><a href="About.jsp"> About</a></li> 
        </ul> 
       </div> 
      </div> 
     </nav> 



     <div class="container"> 
      <div class="jumbotron"> 
       <h1>C1 Revision Test</h1>  
      </div> 
      <div class="container"> 
       <% 
        // Retrieve the current quiz question 
        int currQuestion = ((Exam)request.getSession().getAttribute("currentTest")).getCurrentQuestion(); 
        System.out.println("Question No. " + currQuestion); 
       %> 

       Current Question ${sessionScope.quest.questionNo+1}/10 

       <span>${sessionScope.quest.question}</span><br/><br/> 

       <form class ="form-horizontal" action="test" method="post"> 
        <c:forEach var="choice" items="q${sessionScope.quest.questionOptions}" varStatus = "counter"> 
         <input type="radio" name="answer" value="${counter.count}" >${choice} <br/> 
        </c:forEach> <br /> 

        <% 
         if(currQuestion > 0) 
         { 
        %> 

          <input type="submit" name="action" value="previous"/> 
        <% } %> 

        <% 
         if(currQuestion < 19) 
         { 
          %> 

          <input type="submit" name="action" value ="next"/> 
          <% } %> 

          <input type="submit" name="action" value="Finish Exam"/> 
       </form> 




       </form> 

      </div> 
     </div> 

    </body> 
</html> 

Edit: В отличие от вопроса помеченных как можно дубликата, я понимаю, в основу NullPointerException, однако был более ищет общие советы о том, как определить, где NullPointer исходит из основы трассировки стека, а также как лучше всего установить атрибут сеанса.

+2

Возможный дубликат [Что такое исключение Null Pointer Exception и как его исправить?] (Http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how -do-i-fix-it) – Smittey

+1

Вы должны заглянуть в строку C1Test_jsp.java 101. Этот сгенерированный источник находится где-то в каталоге приложения в стеклянной платке. 'currentTest' может иметь значение null для нового сеанса. Вы можете предпочесть стиль кодирования, в который сначала входит сервлет, и он пересылается в jsp, сначала помещая все данные в атрибуты запроса. Немного разделение Model-View-Controller. –

+0

Привет @JoopEggen, большое спасибо за ваш совет, я только что проверил эту строку: 'int currQuestion = ((Экзамен) request.getSession(). GetAttribute (" currentTest ")). GetCurrentQuestion();' Однако я все еще не уверен, что он говорит мне, это null, поскольку я установил атрибут session currentTest равным null. – freshwaterjoe

ответ

0

Убедитесь, что ваш атрибут сеанса currentTest установлен перед выполнением каких-либо операций над его контентом.

+0

Hi JoD, Спасибо за вашу помощь. Где лучше всего установить атрибут сеанса 'currentTest'? Помимо моих 4 классов java, у меня также есть 4 класса java-классов, включая 'examController', который следит за экзаменами. Должен ли я установить атрибут сеанса 'currentTest' в методах' doGet' или 'doPost' в этом классе? – freshwaterjoe

Смежные вопросы