如何循环遍历 servlet 中的值并在其中显示它们 table?

how to loop over values in servlets and display them in them table?

我正在使用 servlet 容器的 doPost 方法编写一个 servlet 计算器。

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //show result page

        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>SIMPLE CALCULATOR<br><br><br></head>");
        out.println("<body>");
        out.println("<form method = 'post' action = 'calc'>");
        out.println("enter the first number:<br>");
        out.println("<input type = 'text' name='number1'><br><br>");
        out.println("enter the second number:<br>");
        out.println("<input type = 'text' name='number2'><br><br>");
        out.println("enter the operation:<br><br>");
        out.println("<input type ='radio' name = 'op' value = '+'>add<br>");
        out.println("<input type = 'radio' name = 'op' value = '-'>sub<br>");
        out.println("<input type = 'radio' name = 'op' value = '*'>mul<br>");
        out.println("<input type = 'radio' name = 'op' value = '/'>div<br><br>");
        out.println("<input type = 'submit' name = 'result' value = 'submit'><br>");
        out.println("</body>");
        out.println("</html>");
        int a1= Integer.parseInt(request.getParameter("number1"));
        int a2= Integer.parseInt(request.getParameter("number2"));
        String operation = request.getParameter("op");
        int result = 0;
        if(operation.equals("+"))
        {
            result = a1 + a2;
            out.println("The result of " + a1 + " " + operation + " "+ a2 + " = "+ result);
        }
        if(operation.equals("-"))
        {
            result = a1 - a2;
            out.println("The result of " + a1 + " " + operation + " " + a2 + " = "+ result);
        }
        if(operation.equals("*"))
        {
            result = a1 * a2;
            out.println("The result of " + a1 + " " + operation + " " + a2 + " = "+ result);
        }if(operation.equals("/"))
        {
            result = a1 / a2;
            out.println("The result of " + a1 + operation + a2 + " = "+ result);
        }

        out.println("<table border=1>");
        out.println("<tr>");
        out.println("<th>first</th>");
        out.println("<th>operation</th>");
        out.println("<th>second</th>");
        out.println("<th>result</th>");
        out.println("</tr>");
        out.println("<tr>");
        out.println("<td>" + a1 + "</td>");
        out.println("<td>" + operation + "</td>");
        out.println("<td>" + a2 + "</td>");
        out.println("<td>" + result + "</td>");
        out.println("</tr>");
        out.println("</table>");
        
        out.flush();
    }

我想在每次计算并单击提交按钮时显示值、操作和结果。我现在看到的是只显示第一个计算值,当我执行第二个计算值时,它会更改前一个计算值并自行显示。 预期输出是

我现在看到了 有人有帮助吗?

我的解决方案是使用字符串列表来存储历史记录。如果您想要一个更好的解决方案,您可以编写一个 class,其中包含第一个、第二个和运算符,以便您可以检索每个 属性。我将列表存储在会话中,以便 JSP 页面可以访问它。我只是在写一个最小的解决方案。您可以根据自己的要求重写它。

JSP 页

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>

<form action="ComputeServlet" method="post">
<input type="text" name="firstNumber" size="5"> 
<select name="operator">
  <option value="+">+</option>
  <option value="+">-</option>
  <option value="+">*</option>
  <option value="+">/</option>
</select>
<input type="text" name="secondNumber" size="5"> 
<input type="submit" name="submit" value="submit">

<c:forEach var="problem" items="${history}">
  <p>${problem}</p>
</c:forEach>
<input type="submit" name="clear" value="clear">
</form>

Servlet

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
    
  if (request.getParameter("clear")!=null){
    List<String> history = (List<String>) request.getSession().getAttribute("history");
    if (history == null){
      history = new ArrayList<>();
      request.getSession().setAttribute("history", history);
    } else {
      history.clear();
    }     
  } else if (request.getParameter("submit")!=null){
     int first = Integer.parseInt(request.getParameter("firstNumber"));
     int second = Integer.parseInt(request.getParameter("secondNumber"));
     String op = request.getParameter("operator");
     int result = 0;
     switch(op){
       case "+": result = first+second; break;
       case "*": result = first*second; break;
       case "/": result = first/second; break;
       case "-": result = first-second; break;
      }
    List<String> history = (List<String>) request.getSession().getAttribute("history");
    if (history == null){
      history = new ArrayList<>();
      request.getSession().setAttribute("history", history);
    }
    history.add("" + first + op + second + "=" + result);
  }
  getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
}

输出

<form action="ComputeServlet" method="post">
<input type="text" name="firstNumber" size="5"> 
<select name="operator">
  <option value="+">+</option>
  <option value="+">-</option>
  <option value="+">*</option>
  <option value="+">/</option>
</select>
<input type="text" name="secondNumber" size="5"> 
<input type="submit" name="submit" value="submit">

  <p>4+5=9</p>
  <p>2+6=8</p>
  <p>3+2=5</p>
  <p>3+2=5</p>

<input type="submit" name="clear" value="clear">
</form>