[英]Increment/Decrement a value with JSP/Servlet
我是servlet的新手。 我的第一次嘗試是編寫一個簡單的JSP-Application。 哪些增量是從0開始的值,也可以將其遞減。
問題:
當我單擊按鈕“遞增”時,它將遞增為1,當我再次單擊同一按鈕時,該值保持為1,但應為2(第二次單擊)
@WebServlet("/countServlet") public class CounterServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Counter counter; counter = (Counter) request.getAttribute("counter"); if (counter == null) { counter = new Counter(); } String increment = request.getParameter("increment"); if (increment != null) { counter.increment(); } String reset = request.getParameter("decrement"); if (reset != null) { counter.decrement(); } request.setAttribute("counter", counter.getCounter()); request.getRequestDispatcher("/index.jsp").forward(request, response); }
櫃台型號:
public class Counter {
private int counter = 0;
public void increment() {
counter++;
}
public void decrement() {
counter--;
}
public void reset() {
counter = 0;
}
public int getCounter() {
return counter;
}
}
JSP:
<title>Counter</title>
</head>
<body>
The current state of the counter: ${counter}
<form action="countServlet" method="GET">
<input type="submit" name="increment" value="Increment it">
<input type="submit" name="decrement" value="Decrement it">
<input type="hidden" name="counter" value="${counter}">
</form>
問題與獲取Counter
實例的方式有關
counter = (Counter) request.getAttribute("counter");
if (counter == null)
{
counter = new Counter();
}
此時您的計數器始終為null
,因為您是從request
對象獲取的,該對象是每個傳入請求的新實例。 在請求之間設置的屬性不會在請求之間保留。
您想要做的就是獲取它並將其存儲在會話中。
counter = (Counter) request.getSession().getAttribute("counter");
if (counter == null)
{
counter = new Counter();
request.getSession().setAttribute("counter", counter);
}
您應該使要存儲在會話中的任何對象可Serializable
public class Counter implements java.io.Serializable {
編輯:
正如@daiscog正確指出的那樣
<input type="hidden" name="counter" value="${counter}">
不需要在JSP中使用,因為您將在會話中存儲計數器值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.