HttpServlet: doPut не вызывается - PullRequest
1 голос
/ 03 июня 2011

У меня есть сервер приложений Tomcat и этот исходный код Java:

public class MyServlet extends HttpServlet {
    public MyServlet() {}

    protected void doPut(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        // ... PUT code
    }

    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        // ... GET code
    }
}

С GET все в порядке. Метод doGet вызывается. Но из моего приложения для iPhone метод пут doPut не вызывается. На сервере ничего не происходит, я ничего не вижу в лог-файлах. Так что не так? Есть ли какие-либо ограничения PUT на Tomcat? Как я могу отладить это? На устройстве iOS я использую библиотеку, которая может сказать, что должен использоваться PUT, поэтому он должен работать, потому что это очень распространенная среда.

У кого-нибудь есть идея?

С наилучшими пожеланиями Тим.

Ответы [ 2 ]

3 голосов
/ 03 июня 2011

Используйте wireshark для отслеживания пакетов, чтобы убедиться, что вы действительно получаете запрос PUT.

Или аналогичным образом установить отдельный журнал доступа для tomcat (он уже находится в файле конфигурации по умолчанию, но, как я полагаю, закомментирован), чтобы увидеть, что будет.

Если вы откроете в своем любимом текстовом редакторе файл conf / server.xml в каталоге tomcat, то в конце вы найдете:

    <!-- Access log processes all example.
         Documentation at: /docs/config/valve.html -->
    <!--
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
           prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
    -->

при удалении маркеров комментариев весь доступ будет зарегистрирован в logs / localhost_access_log .

например. :

    <!-- Access log processes all example.
         Documentation at: /docs/config/valve.html -->
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
           prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
0 голосов
/ 03 июня 2011

doPut () является допустимым методом, но, скорее всего, вы хотите вместо этого выполнить doPost ().

HTTP определяет GET, POST и PUT (среди прочих), но в целом GET используется для доступастраницы, тогда как POST используется для публикации данных.

Подробнее об определении этих глаголов можно узнать по адресу:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

...