2016-03-22 2 views
0

TL; DR: Помещение @WebServlet («/ Find-Customers») в начале сервлета (развернутого через Tomcat 7) не отображает сервлет на хост: порт/webproject/Find-Customers, даже если сервлет находится в папке src.Как сопоставить AJAX с сервлетами без web.xml

Я пытаюсь вызвать сервлет с помощью @WebServlet («/ ...»), который я сделал в прошлом, но как-то на этот раз что-то не так. Я никогда не использовал web.xml, и все работает отлично. Я использовал метод Ajax POST в ajaxFxns.js и подается в «FIND-клиентов» в качестве адреса и следующие в Java:

package coreservlets; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.http.*; 
import javax.servlet.*; 
import javax.servlet.annotation.*; 

@WebServlet("/Find-Customers") 
public class ShowCustomers extends HttpServlet { 
    @Override 
    public void doGet(HttpServletRequest request, 
        HttpServletResponse response) 
     throws ServletException, IOException { 


response.setHeader("Cache-Control", "no-cache"); 
response.setHeader("Pragma", "no-cache"); 

// more code here 

} 

    public void doPost(HttpServletRequest request, 
        HttpServletResponse response) 
     throws ServletException, IOException { 
    doGet(request, response); 
    } 
} 

Firebug говорит 404 не найден, когда дело доходит до «/ Find-клиентов», с тем насколько я знаю, это означает, что функция @WebServlet не соответствующим образом отображает сервлет на localhost: 8080/webproject/Find-Customers. Вот структура каталога (с неуместными вещи вынимают):

Webproject 
--src 
    --coreservlets 
    --ShowCustomers.java 
--WebContent 
    --scripts 
    --ajaxFxns.js 
    --index.html 

Должен ли я сделать что-то особенное, когда я создал свою папку coreservlets, или как я могу идти об отладке это в среде разработчиков (я использую Затмение)? Реализация Web.xml на самом деле не прошла гладко, поэтому я спрашиваю, как обойтись без нее. Помощь будет оценена!

+0

Вы видите путь контекста в URL-адресе? При отладке в Firefox? – JChap

+0

Вы имеете в виду, когда он говорит «POST http: // localhost: 8080/webproject/Find-Customers» в консоли? Это не очень помогает мне, потому что мои другие проекты (которые работают) дают один и тот же шаблон. – user1764359

+0

Какой сервер make/версия используется для этого webapp? '@ WebServlet' работает только в контейнерах с поддержкой Servlet 3.0 и новее. Вся история ajax кажется ненужной, так как вы уже получаете ту же самую ошибку HTTP 404, когда просто вводите URL сервлета прямо в адресную строку браузера, не так ли? Затем вы можете просто уменьшить этот шум JS/ajax от вопроса, чтобы сделать его более целенаправленным (поскольку вы исключили JS из вероятной причины). – BalusC

ответ

1

Можете ли вы показать код Ajax? В URL-адресе вызова Ajax может возникнуть проблема. Например, рассмотрим ниже два случая:

  1. Использование «/ Find-Customers» в качестве URL-адреса в вызове Ajax. Он будет нацелен на URL-адрес, например: localhost: 8080/Find-Customers, что неверно.
  2. Использование «Найти клиентов» в качестве URL-адреса в вызове Ajax. Он будет нацелен на URL как:. localhost: 8080/webproject/Find-Customers, что является правильным.

вызов Ajax работает отлично для ShowCustomers в Servlet вы публикуемую с ниже index.html и ajaxFxns.js

index.html:

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="ISO-8859-1"> 
     <script type="text/javascript" src="scripts/ajaxFxns.js"></script> 
     <title>Ajax post</title> 
    </head> 
    <body> 
    </body> 
</html> 

ajaxFxns.js:

var xhttp = new XMLHttpRequest(); 
xhttp.open("POST", "Find-Customers", true); 
xhttp.send(); 
+0

Я не помещал в «/» и получил «localhost: 8080/webproject/Find-Customers 404 не найден». Чтение учебников Я понятия не имею, почему это произойдет, если у меня явно есть @WebServlet («/ Find-Customers») в начале моего Java-скрипта. @WebServlet («/ Find-Customers») должен автоматически сделать его доступным на localhost: 8080/webproject/Find-Customers ... пока он находится в исходной папке ... нет? – user1764359

+0

@ user1764359 Да, вы правы. @WebServlet («/ Find-Customers») должен сделать его доступным на localhost: 8080/webproject/Find-Customers. Он даже работает с кодом, который вы опубликовали с той же структурой проекта. – kamal

+0

Ну, тогда я застрял :(Я не думаю, что это поможет, но на всякий случай я изменил код ajax. Я пробовал это на нелокальном сервере с настройкой Tomcat 7, не повезло – user1764359

Смежные вопросы