Servlet被调用两次!

时间:2008-11-27 01:30:34

标签: java servlets

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

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

/admin/* 

所以,这是一个servlet:

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

这是MainController:

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两次!。这导致了很多错误。

有人对此有所了解吗?是因为我使用了某种遗产? 谢谢大家!

5 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:9)

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:0)

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

如果您也无效,请尝试部署:)

答案 4 :(得分:0)

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