2011-06-03 44 views
1

我有一个Tomcat应用服务器和这个Java源代码:的HttpServlet:doPut不叫

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方法不叫。服务器上没有任何反应,我在日志文件中什么也看不到。那有什么不对? Tomcat是否有任何PUT限制? 我该如何调试?在iOS设备上,我使用了一个库,我可以告诉你应该使用PUT,所以它应该可以工作,因为它是一个非常常见的框架。

有没有人有想法?

最好的问候蒂姆。

回答

3

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

或类似的setup a separate access log for tomcat(它已经在默认的配置文件,但注释掉我相信),看看什么是未来。

如果您在FAVORIT文本编辑打开该文件的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"/> 
    --> 

如果去掉注释标记所有的访问都将被记录到日志/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

怎样才能做到这一点与单独的访问日志?它在哪里被注释掉? – Tim 2011-06-03 16:31:43

+0

我添加了一个链接到tomcat文档。它由启用AccessLogValve组成。非常有用的工具。 – 2011-06-03 16:32:26

+0

非常有帮助,我发现了这个问题。它没有被发送到服务器:-(但只有在你的帮助下,我找到了问题 – Tim 2011-06-03 20:44:47

0

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

HTTP定义了GET,POST和PUT(其中包括),但通常GET用于访问页面,而POST用于发布数据。

你可以得到更多的细节在这些动词的定义:

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

+1

这是一个更可能的解释,除非OP通过RESTful接口上传文件 – 2011-06-03 16:37:45

+0

它当然可能需要PUT而不是POST,但可能不太可能。iOS设备上使用的客户端库是什么? – Dave 2011-06-03 16:42:42