繁体   English   中英

使用JSP / Servlet递增/递减值

[英]Increment/Decrement a value with JSP/Servlet

我是servlet的新手。 我的第一次尝试是编写一个简单的JSP-Application。 哪些增量是从0开始的值,也可以将其递减。

问题:

  • 计数器不以0开头(在jsp页面上为空)
  • 当我单击按钮“递增”时,它将递增为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM