为什么 $ {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);
我希望我的预算在第一次访问开始 = 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);