代码之家  ›  专栏  ›  技术社区  ›  lord-ivan

此URL不支持HTTP方法POST的原因[重复]

  •  -1
  • lord-ivan  · 技术社区  · 8 年前

    我正在学习Java EE和Maven,我正在尝试一个简单的dopost。但我正在了解(此URL不支持HTTP方法POST)可能存在的问题 登录.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");
        }
    }
    

    无法看到错误的来源?在我这边一切似乎都很好 紧急求救信号

    2 回复  |  直到 5 年前
        1
  •  4
  •   Luke Woodward    8 年前

    删除此行:

        super.doPost(request, response);
    

    这个 doPost 中的方法 HttpServlet 基类被实现为无条件返回HTTP错误(HTTP 1.1为405,HTTP 1.0为400)。 doGet , doPut doDelete 都以相同的方式实现。

    如果希望servlet支持POST请求,请重写 doPost公司 但不要调用超类方法。

        2
  •  0
  •   Bibek Shakya Dev. Joel    8 年前

    当你的页面在里面时 web-inf 文件夹中,需要防止Http访问的资源放在WEB-INF下,过滤器附加到视图中 (jsp/html/.doc/.txt/xml) 以防止直接访问。

    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);
    }
    

    删除覆盖 super.doPost(request, response); 在dopost()中,并且 <form action="login" method="post" > 从登录中删除“/”