4

抱歉,我没有实际的代码,但我会尝试解释:

我有一个映射到以下内容的 servlet:

/admin/* 

因此,这将转到一个 servlet:

public class AdminController extends MainController {
    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        // Do stuf here
    }
}

这是主控制器:

public class MainController extends HttpServlet {
@Override
public void service(ServletRequest request, ServletResponse response) {
    String requesturi = ((HttpServletRequest)request).getRequestURI();
    reqlist = Arrays.asList(requesturi.substring(requesturi.indexOf(Util.rootPath) + Util.rootPath.length()).split("/"));
    reqlist = reqlist.subList(1, reqlist.size());

    doPost((HttpServletRequest)request, (HttpServletResponse)response);
}

所以,请求被传递给 AdminController,没问题,但后来我意识到:

servlet 被调用了两次!. 这给我带来了很多错误..

有人对此有所了解吗?是因为我使用了某种传承?感谢你所做的一切!

4

5 回答 5

11

虽然它是旧线程,但我的回答可能会对某人有所帮助。今天我遇到了同样的问题。我的特定 servlet 早些时候工作正常,突然它开始调用 doGet 方法两次。经过调查,我发现我的 chrome 浏览器具有 html 验证器扩展,它再次调用 servlet 并使用相同的请求进行 html 验证。在我禁用扩展后,问题得到了解决。

于 2014-10-02T09:14:32.373 回答
9

所有请求类型都会调用HttpServlet.service方法,您看到的是 HEAD 请求,然后是 GET 或 POST 请求。无需实现服务,只需实现 doGet 或 doPost。通常所做的只是实现 doPost 或 doGet 之一,然后从您没有实现的那个调用另一个。

于 2008-11-27T01:46:40.773 回答
2

我用简单的方法解决了同样的问题。

如果您正在本地开发并使用作为环回网络的地址http://127.0.0.1访问您的应用程序,请将地址更改为直接的http://localhost

如果您实际上在虚拟主机或服务器上运行它并从外部网络访问它,则不会发生此问题。

于 2012-03-09T06:07:38.920 回答
0

有同样的问题,我尝试了上面和其他帖子中提到的任何内容,但问题仅在本地。

如果您也没有任何效果,请尝试部署:)

于 2017-02-28T09:38:21.397 回答
0

我遇到过同样的问题。我有一个 servlet 来处理发布请求。但是在调用 doPost 之后,它突然开始调用 doGet 方法。所以 doGet 是由我安装的 chrome 插件(FireBug Lite)调用的。停用该插件后问题解决。

于 2021-02-19T09:16:16.313 回答