为什么此URL不支持HTTP方法POST

时间:2016-09-04 11:11:19

标签: java maven jsp java-ee-mvc

我正在学习Java EE和Maven,我正在尝试一个简单的dopost。但我得到了(这个URL不支持HTTP方法POST)可能是什么问题 的login.jsp

<form action="/login" method="post" >
<div class="login-container less">
    <div class="well-login">
        <div class="control-group">
            <div class="controls">
                <div>
                    <input type="text" placeholder="Username or Email" class="login-input user-name">
                </div>
            </div>
        </div>
        <div class="control-group">
            <div class="controls">
                <div>
                    <input type="password" placeholder="Password" class="login-input user-pass">
                </div>
            </div>
        </div>
        <div class="clearfix">
            <button class="btn btn-inverse login-btn" type="submit" value="submit">Login</button>
        </div>
        <div class="remember-me">
            <input class="rem_me" type="checkbox" value=""> Remeber Me
        </div>
    </div>
</div>
</form>

登录Servlet

package webapp;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns = "/login")
public class LoginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        super.doPost(request, response);
        response.getWriter().println("success");
    }
}

看不到错误的来源?从我这一切来看,每一件事都显得很蠢 SOS

2 个答案:

答案 0 :(得分:4)

删除此行:

    super.doPost(request, response);

实现doPost基类中的HttpServlet方法无条件地返回HTTP错误(HTTP 1.1为405,HTTP 1.0为400)。 doGetdoPutdoDelete都以相同的方式实施。

如果您希望servlet支持POST请求,请覆盖doPost但不要调用超类方法。

答案 1 :(得分:0)

当您的页面位于web-inf文件夹中时,需要保护其免受Http访问的资源放在WEB-INF下,并且过滤器附加到视图(jsp/html/.doc/.txt/xml)以阻止直接访问。

所以在doGet()

中使用getServletContext()
request.getServletContext().getRequestDispatcher("/WEB-INF/views/login.jsp").forward(request, response);

由于您不会从doPost()方法导航任何其他网页,因此请使用include()方法

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {       
    response.getWriter().println("<h1>success</h1>  ");
    request.getServletContext().getRequestDispatcher("/WEB-INF/views/login.jsp").include(request, response);
}

删除你在dopost()内部覆盖super.doPost(request, response);以及<form action="login" method="post" >删除&#34; /&#34;从登录