HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET - RequestDispatcher 出现错误

Posted

技术标签:

【中文标题】HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET - RequestDispatcher 出现错误【英文标题】:HTTP Status 405 - HTTP method GET is not supported by this URL - getting error with RequestDispatcher 【发布时间】:2016-01-08 08:08:16 【问题描述】:

我正在创建一个登录页面并想将.jsp 隐藏到 URL 栏中,所以我尝试使用以下内容:

这里是我的loginPage.jsp

<form class="m-t-md" action="loginAccount">
    <div class="form-group">
    <input type="email" name="email" class="form-control" placeholder="Email" required>
    </div>
    <div class="form-group">
    <input type="password" password="password" class="form-control" placeholder="Password" required>
    </div>
    <button type="submit" class="btn btn-success btn-block">Login</button>
    <a href="forgot.html" class="display-block text-center m-t-md text-sm">Forgot Password?</a>
    <p class="text-center m-t-xs text-sm">Do not have an account?</p>
    <a href="signup" class="btn btn-default btn-block m-t-md">Create an account</a>
</form>

这是我的login,我使用RequestDispatcher 打电话给loginPage.jsp

public class login extends HttpServlet

    public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException

        response.setContentType("text/html");


        RequestDispatcher RequetsDispatcherObj =request.getRequestDispatcher("./loginPage.jsp");
        RequetsDispatcherObj.forward(request, response);
    

这给了我这个错误:

SCREENSHOT

我也使用了doPost 而不是doGet,但仍然遇到同样的错误。

我们将不胜感激!

已编辑

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.0"
         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"
         metadata-complete="false">

        <servlet>
            <servlet-name>index</servlet-name>
            <servlet-class>com.pages.index</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>index</servlet-name>
            <url-pattern>/index</url-pattern>
        </servlet-mapping>

        <servlet>
            <servlet-name>login</servlet-name>
            <servlet-class>com.pages.login</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>login</servlet-name>
            <url-pattern>/login</url-pattern>
        </servlet-mapping>

        <servlet>
            <servlet-name>loginAccount</servlet-name>
            <servlet-class>com.login.loginAccount</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>loginAccount</servlet-name>
            <url-pattern>/loginAccount</url-pattern>
        </servlet-mapping>

</web-app>

【问题讨论】:

你的实现似乎是正确的,你也可以发布你的 web.xml 文件的内容吗?我只想看到 loginAccount 映射到您的登录 servlet。 【参考方案1】:

我看到您这里有 2 个与登录有关的 servlet。一个是com.pages.login,另一个是com.login.loginAccount。但是,您的表单提交将传递给您的com.login.loginAccount(而不是您的com.pages.login servlet)。这在表单的 action 属性中明确指出:

<form class="m-t-md" action="loginAccount">

您从com.pages.login servlet 发布了代码。但是,它不是处理表单提交的人。您可以执行以下操作之一:

编辑您的 servlet com.login.loginAccount。确保doGet 声明方法来处理表单提交。

package com.login;

public class loginAccount extends HttpServlet 
    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
        ...
    
    ...

或者你可以更新你的表单元素,添加方法属性并设置它 发布

<form class="m-t-md" action="loginAccount" method="POST">

【讨论】:

【参考方案2】:

您的表单显示action=loginAccount/loginAccount url 映射到servlet 名称loginAccount。 Servlet loginAccount 指向类 com.login.loginAccount。您可以将/loginAccount 映射指向名称为login 的servlet:

<servlet-mapping>
     <servlet-name>login</servlet-name>
     <url-pattern>/loginAccount</url-pattern>
</servlet-mapping>

将您的表单操作更改为login

【讨论】:

以上是关于HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET - RequestDispatcher 出现错误的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]

HTTP 状态 405 - 此 URL 不支持 HTTP 方法 POST

Apache Tomcat HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]

HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET

HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET - RequestDispatcher 出现错误

Servlet 错误:HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]