1. 程式人生 > >HTTP 405 method GET/POST is not supported

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);