在java servlet上运行时出现错误405

在java servlet上运行时出现错误405,java,tomcat,servlets,web.xml,Java,Tomcat,Servlets,Web.xml,我已经创建了我的第一个servlet,但似乎我做得不对。 下面是我的servlet类: @SuppressWarnings("serial") public class Login extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {

我已经创建了我的第一个servlet,但似乎我做得不对。 下面是我的servlet类:

@SuppressWarnings("serial")
public class Login extends HttpServlet
{

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException
    {
        PrintWriter out = response.getWriter();
        out.println("this is a sample");
        out.flush();
        super.doPost(req, response);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        super.doGet(req, resp);
    }   
}
这是我的web.xml:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
          version="3.0">
   <display-name>Login</display-name>
    <description>
        This is a simple web application with a source code organization
        based on the recommendations of the Application Developer's Guide.
    </description>

    <servlet>
        <servlet-name>Login</servlet-name>
        <servlet-class>com.hudly.servlets.Login</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Login</servlet-name>
        <url-pattern>/Login</url-pattern>
    </servle

我应该怎么做才能解决这个问题呢?

从源代码中删除
super.doPost()
/
super.doGet()
,然后编写实现。

删除
super.doPost()
/
super.doGet())
并编写实现。

您可能更喜欢将GET和POST处理组合到一个方法中

这可能更好的原因是,典型的表单/或请求处理生命周期在GET和POST之间有许多共同部分;可以通过检查
req.getMethod()
是否等于POST来切换不同的部分

例如:

abstract public class BaseServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
        processRequest( req, response);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    {
        processRequest( req, response);
    }

    abstract protected void processRequest (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
}
在表单控制器中,
processRequest()
将执行如下操作:

protected void processRequest (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    Form form = createForm();
    bindAndValidate( form, req);
    if (isSubmit()) {       // POST-specific.
        boolean complete = handleSubmit( form, req, resp);
        if (complete)
            return;
    }
    showForm( form, req, resp);
}
如您所见,提交处理(检查它是否完全有效,并执行某些操作)是请求处理中唯一特定于POST的部分


表单应使用GET参数初始化,以便重定向到它们,不正确/无效的提交应重新显示表单。。因此,流是“BIND、SUBMIT、SHOW”,流的退出点位于“中间”。

您可能更喜欢将GET和POST处理组合到一个方法中

这可能更好的原因是,典型的表单/或请求处理生命周期在GET和POST之间有许多共同部分;可以通过检查
req.getMethod()
是否等于POST来切换不同的部分

例如:

abstract public class BaseServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
        processRequest( req, response);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    {
        processRequest( req, response);
    }

    abstract protected void processRequest (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
}
在表单控制器中,
processRequest()
将执行如下操作:

protected void processRequest (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    Form form = createForm();
    bindAndValidate( form, req);
    if (isSubmit()) {       // POST-specific.
        boolean complete = handleSubmit( form, req, resp);
        if (complete)
            return;
    }
    showForm( form, req, resp);
}
如您所见,提交处理(检查它是否完全有效,并执行某些操作)是请求处理中唯一特定于POST的部分

表单应使用GET参数初始化,以便重定向到它们,不正确/无效的提交应重新显示表单。。因此,流是“BIND,SUBMIT,SHOW”,流的退出点“在中间”。

不要调用super.doPost(),也不要调用super.doGet()。它们的存在只是为了被重写。不要调用super.doPost()或super.doGet()。它们的存在只是为了被覆盖。