實現httpServlet接口,doget方法多次調用,報錯java.lang.StackOverflowError: null

java.lang.StackOverflowError: null
	at sun.nio.cs.UTF_8.updatePositions(UTF_8.java:77) ~[na:1.8.0_144]
	at sun.nio.cs.UTF_8.access$200(UTF_8.java:57) ~[na:1.8.0_144]
	at sun.nio.cs.UTF_8$Encoder.encodeArrayLoop(UTF_8.java:636) ~[na:1.8.0_144]
	at sun.nio.cs.UTF_8$Encoder.encodeLoop(UTF_8.java:691) ~[na:1.8.0_144]
	at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:579) ~[na:1.8.0_144]
	at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:271) ~[na:1.8.0_144]
	at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125) ~[na:1.8.0_144]
	at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207) ~[na:1.8.0_144]
	at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:129) ~[na:1.8.0_144]
    ......

代碼段如下:

//處理get請求
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get");
        this.doGet(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("post");
        resp.getWriter().write("Hello MyServlet");
    }

執行時,後臺報錯,頁面沒輸出。改了很久,後來才發現doGet方法調用了自身,遞歸導致內存溢出。補一點內容:

具體調用哪個方法由網頁的提交方式決定,不過在編程時不用考慮它調用哪個方法。你可以在doget方法裏調用dopost方法,然所有的處理寫在dopost方法裏。這樣不管調用的是doget方法還是dopost方法都可以處理。

 修改後,運行正常。

public class MyServlet extends HttpServlet {

    //處理get請求
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("Hello MyServlet");
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章