我正在使用 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();
}
我想在每次進行計算并單擊提交按鈕時顯示值、操作和結果。我現在看到的是只顯示第一個計算值,當我執行第二個計算值時,它會更改前一個計算值并顯示自身。預期輸出為

我現在看到
有人有幫助嗎?
uj5u.com熱心網友回復:
我的解決方案是使用字串串列來存盤歷史記錄。如果您想要一個更好的解決方案,您可以撰寫一個具有 first、second 和 operator 的類,以便您可以檢索每個屬性。我將串列存盤在會話中,以便 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>
小服務程式
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>

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/425176.html
