Я пытаюсь получить веб-страницу для отправки данных JSON в сервлет Java через jQuery ajax POST. Я уже проверял все, что мог придумать, но я до сих пор не могу понять, почему я продолжаю получать 404. Еще более запутанным является то, что другие вызовы одного и того же контекстного пути работают правильно.ajax call to java servlet results in 404
Мой 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>
Мой Аякса вызов:
$.ajax({
url: "customer/save",
type: "POST",
data: JSON.stringify(o),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(obj) {
alert('Customer saved');
},
error: function(obj) {
alert('Error!');
}
});
Мой сервлет:
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, что вызов правильно, направленных на http://localhost:8080/klyr/customer/save но 404, тогда как http://localhost:8080/klyr нет.
Большое спасибо!
EDIT: Я попытался переключить отображение сервлетов, т.е./klyr (рабочий) на CustomerServlet и/клиент/сохранить на контроллере, но ничего не происходит, фактически, когда я вызываю/klyr из браузера вместо ответа от CustomerServlet.doGet. Я все еще вижу страницу приветствия, как если бы Controller.doGet был запущен. Похоже, что tomcat не перезагружает файл web.xml, даже если я его перезагружу. Есть идеи?
Я не вижу конфигурацию сервлета с url как 'customer/save'. Попробуйте нажать URL из браузера напрямую, используя адресную строку. – Arvind