HTTP 405 method GET/POST is not supported
借鑑自:http://www.chawenti.com/articles/2852.html
問題描述:
JQuery使用Ajax請求後臺Servlet出現405錯誤,不管是GET還是POST都會發生。
前臺JS/JQuery程式碼:
function getServerTime(obj){ var result; $.ajax({url:"ServerTimeService", data:{serverType:obj,xkey:"key"}, dataType:"json",//這裡使用text同樣結果 type:"GET",//這裡POST同樣結果 asyc:false, complete:function(data,status){ console.log("complete"); if(status == "success"){ console.log("success"); result = data; } else{ alert("獲取伺服器時間失敗,是否使用本機時間代替?"); //本次請求頭的時間 result = "err"; } } }) return result; }
後臺Servlet處理:
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); String xkey=req.getParameter("xkey"); String serverType = req.getParameter("serverType"); PrintWriter out = resp.getWriter(); if("APP".equals(serverType)){ out.write("result: APP"); }else if("DATA".equals(serverType)){ out.write("result: DATA"); }else{ out.write("result: OTHER"); } out.close(); }
問題解決:
問題出現在doGet和doPost方法裡,呼叫了父類super.doGet()、super.doPost()方法。不呼叫父類doGet(),doPost()方法即可解決改問題。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
上文給出的解釋:
1,繼承自HttpServlet的Servlet沒有重寫對於請求和響應的處理方法:doGet或doPost等方法;預設調
用父類的doGet或doPost等方法;
2,父類HttpServlet的doGet或doPost等方法覆蓋了你重寫的doGet或doPost等方法;
不管是1或2,父類HttpServlet的doGet或doPost等方法的預設實現是返回狀態程式碼為405的HTTP錯誤表示
對於指定資源的請求方法不被允許。
問題解決方法:
1,子類重寫doGet或doPost等方法;
2,在你擴充套件的Servlert中重寫doGet或doPost等方法來處理請求和響應時 不要呼叫父類HttpServlet的
doGet或doPost等方法,即去掉super.doGet(request, response)和super.doPost(request, response);