2016-09-03 10 views
0

У меня есть домашнее задание, которое представляет собой основное упражнение по созданию ножниц для бумажной бумаги с помощью jsp и сервлетов. На index.html я создал форму для получения «Rock», «Paper» или «Scissors». Это попадает в сервлет, который учитывает повороты, поражения, победы и галстуки.Переменные на сервлете на JSP и JSP на сервлет

После того, как вы отправите свой ход, будь то камень, бумага или ножница, вы будете направлены в JSP, который отобразит табло и ход сервера, но на этом JSP есть форма, одна из которых - ссылка, чтобы вернуться к index.html и поворот, выигрыш, счетчик поражений продолжает подсчитываться, а затем есть кнопка, которая является кнопкой сброса, которая должна превращать все значения в 0, это другая форма на jsp с другим действием. Мой учитель предложил сделать два сервлета, но сказал, что если я смогу сделать это с одним, было бы хорошо, но сделать два сервлета было бы проще.

Реферат: Как сбросить переменные на одном сервлете из другого?

index.html:

<html> 
<head> 
    <title>Actividad 4</title> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
</head> 
<body> 
    <h1>Rock Paper Scissors Game</h1> 
    <p>Choose your attack: </p> 
    <form method="post" action="move.do"> 
     <select name="attack"> 
      <option value="1">Rock</option> 
      <option value="2">Scissors</option> 
      <option value="3">Paper</option> 
     </select> 
     <button type="submit">Attack!</button> 
    </form> 
</body> 

web.xml:

<?xml version="1.0" encoding="UTF-8"?> 

http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1. xsd " версия =" 3.1 "> сервлетов Акт 4 сервлетов сервлетов Акт 4 /move.do

<servlet> 
    <servlet-name>Servlet2 Act 4</servlet-name> 
    <servlet-class>Servlet2</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Servlet2 Act 4</servlet-name> 
    <url-pattern>/reset.do</url-pattern> 
    <init-param> 
     <param-name>turn</param-name> 
     <param-value>1</param-value> 
    </init-param> 
</servlet-mapping> 

Первый сервлет:

import java.io.IOException; 

import java.io.PrintWriter; 
import java.util.Random; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* 
* @author maple 
*/ 
@WebServlet(name = "Servlet Act 4", urlPatterns = {"/Servlet"}) 
public class Servlet extends HttpServlet { 
    static int turn = 1; 
    static int wins = 0; 
    static int defeat = 0; 
    static int ties = 0; 

/** 
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> 
* methods. 
* 
* @param request servlet request 
* @param response servlet response 
* @throws ServletException if a servlet-specific error occurs 
* @throws IOException if an I/O error occurs 
*/ 
protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    try (PrintWriter out = response.getWriter()) { 
     /* TODO output your page here. You may use following sample code. */ 
     out.println("<!DOCTYPE html>"); 
     out.println("<html>"); 
     out.println("<head>"); 
     out.println("<title>Servlet Servlet</title>");    
     out.println("</head>"); 
     out.println("<body>"); 
     out.println("<h1>Servlet Servlet at " + request.getContextPath() + "</h1>"); 
     out.println("</body>"); 
     out.println("</html>"); 
    } 
} 

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> 
/** 
* Handles the HTTP <code>GET</code> method. 
* 
* @param request servlet request 
* @param response servlet response 
* @throws ServletException if a servlet-specific error occurs 
* @throws IOException if an I/O error occurs 
*/ 
@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    processRequest(request, response); 
} 

/** 
* Handles the HTTP <code>POST</code> method. 
* 
* @param request servlet request 
* @param response servlet response 
* @throws ServletException if a servlet-specific error occurs 
* @throws IOException if an I/O error occurs 
*/ 
@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    int attack = Integer.parseInt(request.getParameter("attack")); 
    int move = randMove(); 
    String counter = ""; 
    String decision = ""; 
    //Checa el metodo randMove(), obtengo un numero aleatorio entre 1 a 3 que lo convierto en 
    //Rock = Piedra 
    //Scissor = Tijera 
    //Paper = Papel 
    switch(move) { 
     case 1: counter = "Rock"; 
     break; 
     case 2: counter = "Scissor"; 
     break; 
     case 3: counter = "Paper"; 
     break; 
    } 

    //Este if comparo que si los dos son iguales, el piedra papel o tijera del servidor 
    //Y el piedra papel tijera del jugador para determinar el ganador. 
    if(attack == move) { 
     ties++; 
     decision = "It's a tie!"; 
    } else if (attack == 1) { 
     switch(move){ 
      case 2: decision = "Player wins!"; 
      wins++; 
      break; 
      case 3: decision = "Server wins!"; 
      defeat++; 
      break; 
     } 
    } else if (attack == 2) { 
     switch(move){ 
      case 1: decision = "Server wins!"; 
      defeat++; 
      break; 
      case 3: decision = "Player wins!"; 
      wins++; 
      break; 
     } 
    } else if (attack == 3) { 
     switch(move) { 
      case 1: decision = "Player wins!"; 
      wins++; 
      break; 
      case 2: decision = "Server wins!"; 
      defeat++; 
      break; 
     } 
    } 

    //Esto es para mantener cuenta que turno es, que movimiento hizo, quien gano, cuantas veces 
    //gano quien y perdio quien. 
    request.setAttribute("turn", turn); 
    request.setAttribute("counter", counter); 
    request.setAttribute("winner", decision); 
    request.setAttribute("ties", ties); 
    request.setAttribute("wins", wins); 
    request.setAttribute("defeat", defeat); 
    if(turn < 5) { 
     turn++; 
    } else { 
     turn = 1; 
     ties = 0; 
     wins = 0; 
     defeat = 0; 
    } 
    RequestDispatcher view = 
      request.getRequestDispatcher("Scoreboard.jsp"); 
    view.forward(request, response); 
} 

/** 
* Returns a short description of the servlet. 
* 
* @return a String containing servlet description 
*/ 
@Override 
public String getServletInfo() { 
    return "Short description"; 
}// </editor-fold> 

public static int randMove() { 
    int min = 1; 
    int max = 3; 
    Random rand = new Random(); 
    int randomNum = rand.nextInt((max - min) + 1) + min; 

    return randomNum; 
} 

}

СПЯ:

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<%@page import="java.util.*" %> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Scoreboard</title> 
    </head> 
    <body> 
     <h1>Server: <%=request.getAttribute("counter")%></h1> 
     <h3>Round <%=request.getAttribute("turn")%> of 5</h3> 
     <p><%=request.getAttribute("winner")%></p> 
     <table> 
      <thead> 
       <tr> 
        <td></td> 
        <td>Win</td> 
        <td>Defeat</td> 
        <td>Tie</td> 
       </tr> 
      </thead> 
      <tbody> 
       <tr> 
        <td>Player</td> 
        <td><%=request.getAttribute("wins")%></td> 
        <td><%=request.getAttribute("defeat")%></td> 
        <td><%=request.getAttribute("ties")%></td> 
       </tr> 
       <tr> 
        <td>Server</td> 
        <td><%=request.getAttribute("defeat")%></td> 
        <td><%=request.getAttribute("wins")%></td> 
        <td><%=request.getAttribute("ties")%></td> 
       </tr> 
      </tbody> 
     </table> 
     <form method="get" action="reset.do"> 
      <a type="button" href="index.html">Next round</button></a> 
      <button type="submit">Reset</button> 
     </form> 
    </body> 
</html> 

ответ

1

Переменная очередь, выигрывает, поражение и связывает все статические, так что если вы хотите изменить, то в другом сервлета, просто объявить их как открытые, то вам и изменить их с кодом, как

Servlet.turn = 0 

, но это не правильный способ поддержания состояния в сервлет, если вы заявляете по запросам, вы должны сохранить их в сессии с кодом, как:

request.getSession().setAttribute("turn",0); 
0

вы можете сбросить переменную в методе doGet вашего сервлета до ты вернулся на страницу index.html. Атрибуты сервлета - хороший выбор в вашем случае. Атрибуты сервлета определяют три области, такие как область приложения, область действия сеанса, область запроса.Тем не менее, вы можете использовать приложение Scope, сессионный Scope, чтобы решить вашу проблему, как показано ниже:

сферы приложений (сфера приложения начинается с момента запуска веб-приложений и заканчивается, так как он является завершение работы): сфера

request.getServletContext().setAttribute("turn", "0"); 

сессия (сфера сессия начинается, когда клиент устанавливает соединение с веб-приложения до клиента браузер закрыт):

session.setAttribute("turn", "0"); 

Вы можете обратиться к столбу Servlet Request Session Application Scope Attributes, чтобы получить более подробную информацию о атрибуты Servlet.

Надеюсь, что эта помощь!