tomcat говорит, что метод http не поддерживает этот URL - PullRequest
0 голосов
/ 04 ноября 2018

Я вызываю сервлет по HTML-странице, и мой код сервлета выглядит так:

import java.sql.*;
import javax.servlet.http.*;
import java.io.*;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;

public class validation extends HttpServlet
{
    static PrintWriter pw = null;
    public void doPost(HttpServletResponse response, HttpServletRequest request) throws ClassNotFoundException, SQLException, IOException, ServletException
    {
        pw = response.getWriter();
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        RequestDispatcher rd = request.getRequestDispatcher("new.html");
        Class.forName("java.sql.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/timetabledb", "root","`");
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("select password from users where username = '"+username+"';");
        if(rs.next()==false)
        {
            pw.println("No such user found!");
        }
        else
        {
            if(password.equals(rs.getString("password")))
            {
                rd.forward(request, response);
            }
            else
            {
                pw.println("Invalid credentials!");
            }
        }
        rs.close();
    }
}

и моя HTML-страница выглядит так:

<!DOCTYPE html>
<html>
<head>
  <title>Login Page - SGMS</title>
  <link rel="stylesheet" href="main.css" />
</head>

<body>
    <div id = "container">
        <div class = "welcome-head">
            Welcome
        </div>
        <div class = "sw-head">
            Semi-Automatic Schedule Generator & Maintenance Software
        </div>
        <span class="logo">
            <img src="logo.gif" alt="Logo"/>
        </span>
        <div class = "form">
            <form method="POST" action="validation">
                <label for="inp-usr" class="inp">
                <input type="text" name="username" id="inp-usr" placeholder="&nbsp;" required="required">
                  <span class="label">Username</span>
                  <span class="border"></span>
                </label>
                <br>
                <label for="inp-pwd" class="inp">
                <input type="password" name="password" id="inp-pwd" placeholder="&nbsp;" required="required">
                  <span class="label">Password</span>
                  <span class="border"></span>
                </label>
                <br><br><br>
                <button class="validate-btn" onclick="show();">
                    Validate
                </button>
            </form>
        </div>
    </div>
</body>

</html>

но проблема в том, что всякий раз, когда я запускаю все это, сервер приложений говорит, что метод POST не поддерживается этим URL. Я часто сталкивался с этой ошибкой, пожалуйста, объясните, почему все это происходит. Я сопоставил сервлет в моем web.xml

Заранее спасибо.

1 Ответ

0 голосов
/ 04 ноября 2018

Вы допустили ошибку в вашем doPost методе. Вы объявили это так:

void doPost(HttpServletResponse response, HttpServletRequest request)
    throws ClassNotFoundException, SQLException, IOException, ServletException

но правильная подпись такова:

void doPost(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException

Обратите внимание на другой порядок параметров ....

Поскольку ваш метод не имеет правильной подписи, он не переопределяет унаследованную версию. Это означает, что ваша версия никогда не вызывается. Вместо этого POST-запросы вызывают унаследованный метод ... и его поведение означает, что «POST не поддерживается».

Решение:

  1. Исправьте подпись doPost метода. (Исключения тоже нужно исправить!)
  2. Добавьте аннотацию @Override к этому ... и любым другим методам переопределения в этом классе.
  3. Привыкайте всегда использовать @Override везде, где вы намереваетесь переопределить метод ... чтобы компилятор Java мог указывать вам на ваши ошибки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...