Y8893101122 2023-04-10 15:35 采纳率: 85.7%
浏览 19
已结题

java重复堆栈问题

重复堆栈问题
运行报错如下:

img

img

img

前端jsp代码如下

<form action="FlightSearchServlet" method="post">
    <div>
        <label for="airline">Airline:</label>
        <input type="text" id="airline" name="airline">
    </div>
    <div>
        <label for="start_city">Start From:</label>
        <input type="text" id="start_city" name="start_city">
    </div>
    <div>
        <label for="end_city">To:</label>
        <input type="text" id="end_city" name="end_city">
    </div>
    <div>
        <button type="submit">Search</button>
    </div>
</form>
<div id="searchResult">
    <%-- Here to show the searchResult --%>
    <c:forEach items="${flights}" var="flight">
        <div class="flight">
            <div>Airline: ${flights.Airline}</div>
            <div>Flight Number:${flight.FlightNo}</div>
            <div>Departure:${flight.DepartureTime}</div>
            <div>Arrival:${flight.ArrivalTime}</div>
            <div>Start From:${flight.StartCity}</div>
            <div>To:${flight.EndCity}</div>
        </div>
    </c:forEach>
</div>


servlet代码如下


@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    String airline = request.getParameter("airline");
    String StartCity = request.getParameter("start_city");
    String EndCity = request.getParameter("end_city");
    List<Flight> flights = FlightDao.search(airline, StartCity , EndCity);
    request.setAttribute("flights", flights);
    RequestDispatcher dispatcher = request.getRequestDispatcher("FlightSearchServlet");
    dispatcher.forward(request,response);
    response.setHeader("refresh","URL=FlightSearchServlet");

}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    req.getRequestDispatcher("/WEB-INF/flightQuery.jsp").forward(req,resp);
}

如果把这句代码删了就没问题,但是我不知道为什么这句会重复执行并且报堆栈错误

RequestDispatcher dispatcher = request.getRequestDispatcher("FlightSearchServlet");
    dispatcher.forward(request,response);

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2023-04-10 16:47
    关注

    以下内容部分参考ChatGPT模型:


    问题的原因是在servlet中使用了RequestDispatcher来转发请求,但是转发的目标是当前的servlet,而不是jsp页面。所以在转发后又会再次执行servlet,导致重复执行。

    解决方法是将转发的目标改为jsp页面,即修改以下代码:

    RequestDispatcher dispatcher = request.getRequestDispatcher("FlightSearchServlet");
    dispatcher.forward(request,response);
    response.setHeader("refresh","URL=FlightSearchServlet");
    

    改为:

    RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/flightQuery.jsp");
    dispatcher.forward(request,response);
    

    这样就可以避免重复执行了。


    如果我的建议对您有帮助、请点击采纳、祝您生活愉快

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月18日
  • 已采纳回答 4月10日
  • 创建了问题 4月10日

悬赏问题

  • ¥20 keepalive配置业务服务双机单活的方法。业务服务一定是要双机单活的方式
  • ¥50 关于多次提交POST数据后,无法获取到POST数据参数的问题
  • ¥15 win10,这种情况怎么办
  • ¥15 如何在配置使用Prettier的VSCode中通过Better Align插件来对齐等式?(相关搜索:格式化)
  • ¥100 在连接内网VPN时,如何同时保持互联网连接
  • ¥15 MATLAB中使用parfor,矩阵Removal的有效索引在parfor循环中受限制
  • ¥20 Win 10 LTSC 1809版本如何无损提升到20H1版本
  • ¥50 win10 LTSC 虚拟键盘不弹出
  • ¥30 微信小程序请求失败,网页能正常带锁访问
  • ¥15 Matlab求解微分方程,如何用fish2d进行预优?