2013-06-30 2 views
0

Я протоколирования сервлет называется LoggingServlet и переопределяет метод doGet и doPost следующим образом:Java Servlet: doPost называется, но не doGet

public class LoggingServlet extends HttpServlet { 
    private static final long serialVersionUID = 2L; 

    @Override 
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 
     ...do stuff here 
    } 

    @Override 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 
     ...do stuff here 
    } 

И мой web.xml выглядит примерно так:

<servlet> 
    <servlet-name>LoggingServlet</servlet-name> 
    <servlet-class>com.example.servlets.LoggingServlet</servlet-class> 
    </servlet>  

    <servlet-mapping> 
    <servlet-name>LoggingServlet</servlet-name> 
    <url-pattern>/LoggingServlet/*</url-pattern> 
    </servlet-mapping> 

И это фрагмент из JSP, который реализует некоторые JavaScript:

<script> 
    document.getElementById("ad_div").onmousedown = function() { 
     xmlhttp=new XMLHttpRequest(); 
     xmlhttp.open("GET","/LoggingServlet?bookie_id=<%= request.getParameter("id") %>&app_id=<%= request.getParameter("app_id") %>",true); 
     xmlhttp.send(); 
     return true; 
    }; 
</script> 

Я также Аноф er jsp, который вызывает LoggingServlet через запрос Post. Теперь моя проблема:

  1. Запрос сообщение отлично работает без каких-либо проблем
  2. Однако запрос Достаньте из JavaScript возвращает ошибку 404. Я также вручную ввел полный URL-адрес в веб-браузер и получил ошибку 404.

Как это возможно?

+1

Какой URL-адрес вы указали в окне браузера? Какой URL-адрес вы использовали для запуска запроса 'POST'? –

+1

Я не вижу ничего неправильного. Попробуйте открыть сервлет-путь из браузера (это вызовет 'doGet()'). –

+0

В текущем JS-коде предполагается, что webapp развернут в контексте root. Это правда? Если нет, то это объясняет вашу проблему с корнем. – BalusC

ответ

5

Сервлет сопоставляется

/LoggingServlet/* 

Ваш URL является

/LoggingServlet?bookie_id... 

, таким образом, URL-адрес не хватает слэш перед строкой запроса для отображения на сервлет. Это должно быть

/LoggingServlet/?bookie_id... 

Это также будет работать, только если webapp является корневым webapp. Если это не так, вам также необходимо добавить путь к контексту приложения:

/MyWebApp/LoggingServlet/?bookie_id... 
Смежные вопросы