我有一个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,因此它应该可以工作,因为它是一个非常常见的框架。
有没有人有想法?
最诚挚的问候蒂姆。
答案 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则用于发布数据。
您可以在以下网址获得有关这些动词定义的更多详细信息: