代码之家  ›  专栏  ›  技术社区  ›  José Leal

servlet被调用两次!

  •  3
  • José Leal  · 技术社区  · 16 年前

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

    我有一个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 回复  |  直到 8 年前
        1
  •  8
  •   carson    16 年前

    这个 HttpServlet.service 方法将为所有请求类型调用,您看到的是头请求,然后是get或post请求。不要实现服务,只需实现doget或dopost。通常的做法是只实现dopost或doget中的一个,然后从没有实现的对象调用另一个。

        2
  •  9
  •   Gaurav    10 年前

    虽然这是老生常谈,但我的回答可能会有帮助。 今天我也面临同样的问题。我的特定servlet在早期运行良好,突然它开始两次调用doget方法。在调查中,我发现我的Chrome浏览器有HTML验证程序扩展,它使用相同的请求再次调用servlet来进行HTML验证。 禁用扩展后,问题得到解决。

        3
  •  2
  •   Peter Jo    13 年前

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

    如果您正在本地开发并使用地址访问您的应用程序 http://127.0.0.1 哪个是环回网络,把地址改成 http://localhost 这是直接的。

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

        4
  •  0
  •   DoruChidean    8 年前

    有同样的问题,我尝试了上面提到的任何事情和其他职位,但这个问题只在当地。

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