对Javaservlet的ajax调用导致404

对Javaservlet的ajax调用导致404,java,jquery,ajax,servlets,Java,Jquery,Ajax,Servlets,我试图获得一个网页,通过jqueryajax帖子将JSON数据发送到javaservlet。 我已经检查了所有我能想到的,但我仍然不明白为什么我一直得到一个404。 更令人困惑的是,对同一上下文路径的其他调用工作正常 My web.xml <web-app> <servlet> <servlet-name>Controller</servlet-name> <servlet-class>com.vibridi.klyr.

我试图获得一个网页,通过jqueryajax帖子将JSON数据发送到javaservlet。 我已经检查了所有我能想到的,但我仍然不明白为什么我一直得到一个404。 更令人困惑的是,对同一上下文路径的其他调用工作正常

My web.xml

<web-app>
<servlet>
    <servlet-name>Controller</servlet-name>
    <servlet-class>com.vibridi.klyr.servlet.Controller</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet>
    <servlet-name>CustomerServlet</servlet-name>
    <servlet-class>com.vibridi.klyr.servlet.CustomerServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>


<servlet-mapping>
    <servlet-name>Controller</servlet-name>
    <url-pattern>/klyr</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>Controller</servlet-name>
    <url-pattern>/home</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>CustomerServlet</servlet-name>
    <url-pattern>/klyr/customer/*</url-pattern>
</servlet-mapping>
}))

我的servlet:

public class CustomerServlet extends HttpServlet {

private static final long serialVersionUID = 1L;
private static Logger logger = Logger.getLogger("KLYR_LOGGER");
private CustomerManager manager;

public void init(ServletConfig sconfig) throws ServletException {
    super.init(sconfig);
    manager = new CustomerManager();
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //stuff
}


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    PrintWriter out = response.getWriter();
    response.setContentType("application/json;charset=utf-8");

    try {
        StringBuffer sb = new StringBuffer();
        String line = null;
        BufferedReader reader = request.getReader();
        while((line = reader.readLine()) != null) {
            sb.append(line);
        }

        manager.saveCustomer(sb.toString());

    } catch(Exception e) {
        logger.log(Level.SEVERE, "Data processing failure: " + e.getMessage());
        out.write(Convertor.createBaseJSON(JSONType.E).toString());
        out.close();
    } 

    out.write(Convertor.createBaseJSON(JSONType.S).toString());
    out.close();

}}
}

我可以从Chrome的调试器工具中看到,调用被正确地定向到了404,而不是404

非常感谢

编辑:
我尝试切换servlet映射,即CustomerServlet上的/klyr(正在工作的一个)和Controller上的/customer/save,但什么都没有发生,事实上,当我从浏览器栏调用/klyr而不是看到CustomerServlet.doGet的响应时,我仍然看到欢迎页面,就好像启动了Controller.doGet一样。看起来tomcat没有重新加载web.xml文件,即使我重新启动它。有什么想法吗

这是显而易见的,因为CustomerServlet没有绑定到$.ajax({url:“customer/save”…),所以它不起作用,您应该更改以下代码:

<servlet-mapping>
     <servlet-name>CustomerServlet</servlet-name>
     <url-pattern>/klyr/customer/*</url-pattern>
</servlet-mapping>

客户服务
/klyr/客户/*
例如:

<servlet-mapping>
     <servlet-name>CustomerServlet</servlet-name>
     <url-pattern>/customer/save</url-pattern>
</servlet-mapping>

客户服务
/客户/节省

为了解决这个问题~

我终于找到了罪魁祸首,我将把它贴在这里作为其他人的参考。 my web.xml中映射的两个servlet都是在启动时加载的。
第一个servlet试图从其init()内的错误路径读取配置文件方法,但找不到它并引发异常。Catalina启动例程在加载第二个servlet之前退出,因此出现404错误。

我没有看到任何url为
customer/save
的servlet配置。请尝试使用地址栏直接从浏览器中点击url。
<servlet-mapping>
     <servlet-name>CustomerServlet</servlet-name>
     <url-pattern>/customer/save</url-pattern>
</servlet-mapping>