2012-06-26 85 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> 

} 
相关问题