Я хочу создать небольшое приложение викторины в jsp, которое задаст вопросы, которые хранятся в массиве. Он должен задать запрос до последнего индекса массива. Здесь ответ также сохраняется в массиве. То, что я сделал до сих пор является:Сообщение об ошибке с JSP и сервлетом?
Главная Servlet
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try (PrintWriter out = response.getWriter()) {
session = request.getSession(true);
Quiz quiz = new Quiz();
if (session.isNew()) {
quiz.setTotalCorrectAnswers(0);
quiz.setCounter(0);
question = quiz.getNextQuestion(0);
answer = quiz.getAnswer(0);
}
session.setAttribute("quizes", quiz);
request.setAttribute("quiz", quiz);
request.setAttribute("currentQuestion", question);
request.setAttribute("error", false);
RequestDispatcher view = request.getRequestDispatcher("quiz.jsp");
view.forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try (PrintWriter out = response.getWriter()) {
String userAnswer = request.getParameter("txtAnswer");
Quiz quiz = (Quiz) session.getAttribute("quizes");
boolean error = false;
if (userAnswer.equals(quiz.getAnswer(quiz.getCounter()))) {
totalQuestions++;
quiz.setTotalCorrectAnswers(totalQuestions);
quiz.setCounter(quiz.getCounter() + 1);
session.setAttribute("nextQuestion", quiz.getCounter() + 1);
} else {
quiz.setTotalCorrectAnswers(totalQuestions);
quiz.setCounter(quiz.getCounter());
error = true;
}
session.setAttribute("quizes", quiz);
if(quiz.getTotalCorrectAnswers()>=5){
session.invalidate();
generateQuizOverPage(out);
}else{
request.setAttribute("quiz", quiz);
request.setAttribute("currentQuestion", quiz.getNextQuestion(quiz.getCounter()));
request.setAttribute("error", error);
RequestDispatcher view = request.getRequestDispatcher("quiz.jsp");view.forward(request, response);
}
} catch (Exception e) {
e.printStackTrace();
}
}
Quiz модель
String[] numberSeries = {
"3, 1, 4, 1, 5, ",
"1, 1, 2, 3, 5, ",
"1, 4, 9, 16, 25, ",
"2, 3, 5, 7, 11, ",
"1, 2, 4, 8, 16, "
};
String[] answer = {"9", "8", "36", "13", "32"};
private int counter;
private boolean isCorrect;
private int totalCorrectAnswers;
public Quiz() {
counter = 0;
isCorrect = false;
totalCorrectAnswers = 0;
}
public int getCounter() {
return counter;
}
public void setCounter(int counter) {
this.counter = counter;
}
public boolean isIsCorrect() {
return isCorrect;
}
public void setIsCorrect(boolean isCorrect) {
this.isCorrect = isCorrect;
}
public int getTotalCorrectAnswers() {
return totalCorrectAnswers;
}
public void setTotalCorrectAnswers(int totalCorrectAnswers) {
this.totalCorrectAnswers = totalCorrectAnswers;
}
public String getNextQuestion(int index) {
return numberSeries[index];
}
public String getAnswer(int index) {
return answer[index];
}
и quiz.jsp файл:
<%@page import="com.app.numberquiz.models.Quiz"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%
Quiz quiz = (Quiz) request.getAttribute("quiz");
String currQuest = (String) request.getAttribute("currentQuestion");
Boolean error = (Boolean) request.getAttribute("error");
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<form method='post'>
<h3>Have fun with NumberQuiz!</h3>
<p>Your current score is:
<% out.print(quiz.getTotalCorrectAnswers()); %> </br></br>
<p>Guess the next number in the sequence! </p>
<p>["<% out.print(currQuest); %><span style='color:red'>?</span>"]</p>
<p>Your answer:<input type='text' name='txtAnswer' value='' /></p>
<% if (error) { %>
<p style='color:red'>Your last answer was not correct! Please try again</p>
<% } %>
<p><input type='submit' name='btnNext' value='Next' /></p>
</form>
</body>
</html>
В первом запуске он отображает представление правильно, но когда я перезагружаю страницу, он начинает показывать null в currQues в представлении это проблема в сеансе, если да, тогда, когда я сделал ошибку, может кто-нибудь объяснить это мне спасибо!