Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

131 changes: 106 additions & 25 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -1,25 +1,106 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.javarush</groupId>
<artifactId>SpaceQuestModule3</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>SpaceQuestModule3</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.javarush</groupId>
<artifactId>HelloQuest</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>

<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>5.9.2</junit.version>
</properties>

<dependencies>

<!-- Servlet API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>

<!-- JSTL - для тегов JSP -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>

<!-- JUnit 5 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>

<!-- Mockito базовый -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.6.0</version>
<scope>test</scope>
</dependency>

<!-- Mockito + интеграция с JUnit 5 (@Mock и @InjectMocks) -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>5.6.0</version>
<scope>test</scope>
</dependency>


</dependencies>

<build>

<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
</plugin>

<!-- Компилятор Java -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>

<!-- Tomcat -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/HelloQuest</path>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M7</version>
</plugin>

</plugins>

</build>

</project>
13 changes: 0 additions & 13 deletions src/main/java/com/javarush/App.java

This file was deleted.

80 changes: 80 additions & 0 deletions src/main/java/com/javarush/quest/GameServlet.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package com.javarush.quest;

import com.javarush.quest.model.QuestStep;
import com.javarush.quest.service.QuestService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/game")
public class GameServlet extends HttpServlet {

private final QuestService questService = new QuestService();

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String stepId = req.getParameter("step");
if (stepId == null || stepId.isEmpty()) {
stepId = "start";
}

QuestStep step = questService.getStep(stepId);
if (step == null) {
resp.sendError(HttpServletResponse.SC_NOT_FOUND, "Шаг не найден!");
}

req.setAttribute("step", step);
req.getRequestDispatcher("/game.jsp").forward(req, resp);

}


@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();

// Получаем параметры
String answer = req.getParameter("answer");
String currentStepId = req.getParameter("currentStep");

// Валидация
if (answer == null || currentStepId == null) {
resp.sendRedirect(req.getContextPath() + "/game?step=start");
return;
}

// Получить текущий шаг
QuestStep currentStep = questService.getStep(currentStepId);
if (currentStep == null) {
resp.sendRedirect(req.getContextPath() + "/game?step=start");
return;
}

// Cлед шаг
String nextStepId;
if ("1".equals(answer)) {
nextStepId = currentStep.getNextStepId1();
} else {
nextStepId = currentStep.getNextStepId2();
}

// Обновляем статистику
if (questService.isFinalStep(nextStepId)) {
Integer gamesPlayed = (Integer) session.getAttribute("gamesPlayed");
if (gamesPlayed == null) {
gamesPlayed = 0;
}
session.setAttribute("gamesPlayed", gamesPlayed + 1);
}

// на след шаг
resp.sendRedirect(req.getContextPath() + "/game?step=" + nextStepId);

}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Класс совмещает логику обработки HTTP-запросов, валидацию данных, управление сессией, бизнес-логику определения следующего шага и обновление статистики. Следует выделить отдельный сервисный класс GameLogicService, который будет отвечать за обработку ответов игрока и определение следующего шага

}
17 changes: 17 additions & 0 deletions src/main/java/com/javarush/quest/HelloServlet.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.javarush.quest;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.getRequestDispatcher("/index.jsp").forward(req, resp);
}
}
33 changes: 33 additions & 0 deletions src/main/java/com/javarush/quest/StartServlet.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.javarush.quest;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/start")
public class StartServlet extends HttpServlet {

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/index.jsp").forward(request, response);
}


@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String playerName = request.getParameter("playerName");
if (playerName == null || playerName.trim().isEmpty()) {
playerName = "Искатель приключений";
}
HttpSession session = request.getSession();
session.setAttribute("playerName", playerName);
session.setAttribute("gamesPlayed", 0);

response.sendRedirect(request.getContextPath() + "/game?step=start");
}

}
26 changes: 26 additions & 0 deletions src/main/java/com/javarush/quest/filter/EncodingFilter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.javarush.quest.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter("/*")
public class EncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// Инициализация не требуется
}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("UTF-8");
servletResponse.setCharacterEncoding("UTF-8");
servletResponse.setContentType("text/html;charset=UTF-8");
filterChain.doFilter(servletRequest, servletResponse);
}

@Override
public void destroy() {
// Очистка не треб.
}
}
Loading