为什么 $ {budget} 在提交减少预算的请求后不会刷新

Why $ {budget} wont refresh after submitting arequest to reduce it

我希望我的预算在第一次访问开始 = 50 的网站时显示。并且这应该在不提交一次的情况下显示

所以问题 nr.1:如何在不让我的 servlet 在必要之前工作的情况下显示预算 = 50?

问题 2:- 在我输入数字 (XXXXXX) 并提交它们之后,预算应该减少 5。每次我提交数字时都会发生这种情况。但事实并非如此。好像没有节省预算

我的JSP:-

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<link rel="stylesheet" href="CSS/style.css">
</head>
<body>
    <h5>Losziehung</h5>
    <p id="u1">Derzeitiges Budget: ${budget} 
    <div id="formular">
    <form method="post" action="GamblingServlet">
        
        <p>Ihre Glueckszahl
        
        <input name="eingabe" type="text" size="50" maxlength="6" placeholder="XXXXXX">
        <br><button id="lossenden" name="losziehung"type="submit">Losziehung durchfuehren</button>
        
        <br><p>Eine Losziehung kostet 5Eur
            
    </form>
    Derzeitiges Budget: ${budget}
    </div>
</body>
</html>

我的 Servlet

@WebServlet("/GamblingServlet")
public class GamblingServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String gluecksZahlen = request.getParameter("eingabe");
        String budgetInt = "50";
        
        HttpSession session = request.getSession();
        session.setAttribute("budget", budgetInt);
        
        if(session.isNew()) {
            
            budgetInt = "45";
            session = request.getSession();
            session.setAttribute("budget", budgetInt);
        
        
        
        } else {
            String budgetZwei = (String) session.getAttribute("budget");
            int sessionGuthaben = Integer.parseInt(budgetZwei);
            sessionGuthaben = sessionGuthaben - 5;
            budgetInt = Integer.toString(sessionGuthaben);
            session.setAttribute("budget", budgetInt);
        }
        
        //Weiterleiten an eine andere Ressource (Servlet, HTML, JSP...)
        request.getRequestDispatcher("index.jsp").forward(request, response);

    }

}

您可以使用 <c:if></c:if> 检查 session 是否为空,如下所示:

 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
   Derzeitiges Budget: ${budget} 
  <c:if test="${empty budget}">
    50 //will get print only if conditon is true
  </c:if>
     

然后,在您的后端 (servlet),您可以执行以下操作:

String gluecksZahlen = request.getParameter("eingabe");
HttpSession session = request.getSession();
//check if seesion is null
if (request.getServletContext().getAttribute("budget") == null) {
  //set default 
  session.setAttribute("budget", "45");
} else {
  //get value from session
  String budgetZwei = (String) request.getServletContext().getAttribute("budget");
  int sessionGuthaben = Integer.parseInt(budgetZwei);
  sessionGuthaben = sessionGuthaben - 5;
  String budgetInt = Integer.toString(sessionGuthaben);
  session.setAttribute("budget", budgetInt);
}

request.getRequestDispatcher("index.jsp").forward(request, response);