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 出现错误