1

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

有人有想法吗?

最好的问候蒂姆。

4

2 回答 2

3

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

或者类似地为 tomcat 设置一个单独的访问日志(它已经在默认配置文件中,但我相信它被注释掉了)来看看会发生什么。

如果你在你最喜欢的文本编辑器中打开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

例如:

    <!-- 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"/>
于 2011-06-03T16:30:30.560 回答
0

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

HTTP 定义了 GET、POST 和 PUT(以及其他),但通常 GET 用于访问页面,而 POST 用于发布数据。

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

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

于 2011-06-03T16:35:04.500 回答