为什么我必须删除对“super.doget(req,resp)”和“super.dopost(req,resp)”的调用?

您所在的位置:网站首页 什么意思super 为什么我必须删除对“super.doget(req,resp)”和“super.dopost(req,resp)”的调用?

为什么我必须删除对“super.doget(req,resp)”和“super.dopost(req,resp)”的调用?

2024-04-07 12:34| 来源: 网络整理| 查看: 265

要创建一个servlet来处理请求,您需要扩展 javax.servlet.http.HttpServlet 并重写您需要的任何方法(在您的示例中,它通常只是 doGet 以及 doPost . 您正在重写这些方法,但也调用的默认实现 javax.servlet.http.HttpServlet . javax.servlet.http.HttpServlet 不知道您要做什么,所以它的实现只是将错误返回给客户机。代码如下:

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String protocol = req.getProtocol(); String msg = lStrings.getString("http.method_get_not_supported"); if (protocol.endsWith("1.1")) { resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg); } else { resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg); } }

响应是用 resp.sendError . 如果您阅读了这个方法的javadoc,它会说(我的重点):如果已提交响应,则此方法将抛出illegalstateexception。使用此方法后,应将响应视为已提交,而不应将其写入。当你回到你的代码,你做了一个 dispatcher.forward(request, response); ,但响应已由 super.doGet 或者 super.doPost 打电话。无法再写入已提交的响应,因为响应内容已写入输出流并发送到客户端。当你这么做的时候,你会得到你在帖子中描述的,一个非法的状态例外:java.lang.illegalstateexception:提交响应后无法转发简言之:当你打电话的时候 super.doGet 或者 super.doPost 然后你的代码,你基本上试着写两次响应,所以你得到了非法的状态异常。删除对的呼叫 super.doGet 或者 super.doPost 只允许您的代码处理请求并生成单个响应,这就是它工作的原因。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3