[英]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.