HttpServlet:不调用doPut

时间:2011-06-03 16:27:09

标签: java iphone http servlets put

我有一个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应用程序执行put时,不会调用doPut方法。服务器上没有任何事情发生,我在日志文件中看不到任何内容。那有什么不对吗? Tomcat有任何PUT限制吗? 我该怎么调试呢?在iOS设备上我使用了一个库,我可以告诉它应该使用PUT,因此它应该可以工作,因为它是一个非常常见的框架。

有没有人有想法?

最诚挚的问候蒂姆。

2 个答案:

答案 0 :(得分:3)

使用wireshark跟踪数据包以确保实际获得PUT请求。

或类似地setup a separate access log for tomcat(它已经在默认配置文件中,但我相信已注释掉)以查看即将发生的事情。

如果您在最喜欢的texteditor中打开tomcat目录中的文件 conf / server.xml ,那么您会发现接近结尾:

    <!-- 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

e.g。 :

    <!-- 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"/>

答案 1 :(得分:0)

doPut()是一种有效的方法,但您更有可能想要执行doPost()。

HTTP定义了GET,POST和PUT(以及其他),但一般来说,GET用于访问页面,而POST则用于发布数据。

您可以在以下网址获得有关这些动词定义的更多详细信息:

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