在java servlet上出现错误405

时间:2013-09-07 10:50:21

标签: 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
    {
        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

叔映射&GT;

我正在尝试浏览:localhost:8080 / HudlyServer / Login我得到了这个:

HTTP Status 405 - HTTP method GET is not supported by this URL

type Status report

message HTTP method GET is not supported by this URL

description The specified HTTP method is not allowed for the requested resource.

Apache Tomcat/7.0.42

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

2 个答案:

答案 0 :(得分:2)

您可能更喜欢将GET和&amp; POST处理成单个方法。

这可能更好的原因是典型的形式/或请求处理生命周期在GET和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);
}

正如您所看到的,SUBMIT处理(检查它是完全有效的,并做某事)是请求处理的唯一部分,这是POST特有的。

表单应该使用GET参数进行初始化,以便您可以重定向到它们,并且不正确/无效的提交应该只是重新显示表单..因此,流程是“BIND,SUBMIT,SHOW”,其中出口点来自“中间”。

答案 1 :(得分:1)

从您的源代码中删除super.doPost() / super.doGet()并编写您的实现。