0

我已经创建了我的第一个 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

t-mapping>

我正在尝试在这里浏览: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

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

4

2 回答 2

2

您可能更喜欢将 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);
}

As you can see, SUBMIT-handling (checking it's fully valid, and doing something) is the only part of request-processing which is specific to POST.

Forms should initialize with GET parameters so you can redirect to them, and incorrect/invalid submits should just reshow the form.. thus, the flow is "BIND, SUBMIT, SHOW" with the exit point from the flow "in the middle".

于 2013-09-07T11:05:08.347 回答
1

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

于 2013-09-07T11:01:05.443 回答