2012-06-26 89 views
0

在此學習一些Java Web開發並嘗試啓動我的第一個servlet。但我收到此錯誤:HTTP method GET is not supported by this URL獲取這兩個HTTP方法GET不受此URL支持,並且HTTP方法POST不受此URL支持

description The specified HTTP method is not allowed for the requested resource (HTTP method GET is not supported by this URL).

我用我的HTML表單的「獲得」的方法,正如你可以看到我已經實現了doGet方法。但我不知道爲什麼我會收到此錯誤。這可能與我的web.xml有關嗎?

我嘗試使用POST方法,將html方法更改爲'post',並使用doPost方法,但我也得到了等效的錯誤。我只做了這個測試,我不想使用帖子。

的web.xml:

<web-app 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
    version="2.4"> 
    <servlet> 
    <servlet-name>AppleFox</servlet-name> 
    <servlet-class>com.AppleFox.web.ProcessQuery</servlet-class> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>AppleFox</servlet-name> 
    <url-pattern>/ProcessQuery.do</url-pattern> 
    </servlet-mapping> 
</web-app> 

servlet代碼:

package com.AppleFox.web; 

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletResponse; 

/** 
* Servlet implementation class ProcessQuery 
*/ 
public class ProcessQuery<HttpServletRequest> extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     String query = ((ServletRequest) request).getParameter("query"); 

     out.println("Sorry we could find any results for " + query + "."); 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     return; 
    } 
} 

我也用我的HTML形式的 '得到' 方法。不知道爲什麼我得到這個錯誤。

回答

2

只需更改下面一行,重新進口,一切都應該很好地工作:

變化:

public class ProcessQuery<HttpServletRequest> extends HttpServlet { 

public class ProcessQuery extends HttpServlet { 

改變進口:

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
+0

哇,謝謝!我從未想過這件事。 –

0

如果你有興趣同時使用的doGet和doPost方法,你可以把動作Java代碼proccessRequest(請求,響應) 並調用它在這兩個的doPost和doGet方法 像這樣

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package controller; 

import java.io.IOException; 
import java.io.PrintWriter; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* 
* @author Birhan 
*/ 
@WebServlet(name = "servlet", urlPatterns = {"/servlet"}) 
public class servlet extends HttpServlet { 

    /** 
    * Processes requests for both HTTP <code>GET</code> and <code>POST</code> 
    * methods. 
    * 
    * @param request servlet request 
    * @param response servlet response 
    * @throws ServletException if a servlet-specific error occurs 
    * @throws IOException if an I/O error occurs 
    */ 
    protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     response.setContentType("text/html;charset=UTF-8"); 
     try (PrintWriter out = response.getWriter()) { 
      /* TODO output your page here. You may use following sample code. */ 
      out.println("<!DOCTYPE html>"); 
      out.println("<html>"); 
      out.println("<head>"); 
      out.println("<title>Servlet servlet</title>");    
      out.println("</head>"); 
      out.println("<body>"); 
      out.println("<h1>Servlet servlet at " + request.getContextPath() + "</h1>"); 
      out.println("</body>"); 
      out.println("</html>"); 
     } 
    } 

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> 
    /** 
    * Handles the HTTP <code>GET</code> method. 
    * 
    * @param request servlet request 
    * @param response servlet response 
    * @throws ServletException if a servlet-specific error occurs 
    * @throws IOException if an I/O error occurs 
    */ 
    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     processRequest(request, response); 
    } 

    /** 
    * Handles the HTTP <code>POST</code> method. 
    * 
    * @param request servlet request 
    * @param response servlet response 
    * @throws ServletException if a servlet-specific error occurs 
    * @throws IOException if an I/O error occurs 
    */ 
    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     processRequest(request, response); 
    } 

    /** 
    * Returns a short description of the servlet. 
    * 
    * @return a String containing servlet description 
    */ 
    @Override 
    public String getServletInfo() { 
     return "Short description"; 
    }// </editor-fold> 

} 
相關問題