为什么我不能 "directly" 从 HTML 调用 Servlet?

Why I can't "directly" call Servlet from HTML?

作为 JSP 和 Servlet 的初学者,我学会了两种从 HTML 文件调用 Servlet 的方法。一种是使用 servlet 注释,另一种是使用 XML 的映射 配置。请原谅我的无知,但为什么我不能简单地将Servlet的名称写在表单的actionattribute中呢?迫使我们开发人员特别关注Servlets的“curton”背后到底发生了什么?不像HTML和JSP文件我们可以直接调用。

这就是我要说的。或者,为什么简单地这样做是不正确的:

index.html:

<html><body>
    <form action="MyServlet" method="POST">
        Enter name: <input type="text" name="name">
        <button>Submit name</button>
    </form>
</body></html>

MyServlet.java:

public class MyServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter pw = resp.getWriter();
        String input = req.getParameter("name");
        pw.println("hello " + input);
    }
}

我理解映射 servlets 为我们提供了灵活性和安全性。但我的问题仍然存在。为什么“直接调用”Servlet class 文件不可用并给出 404 error not found?为什么 server 找不到我的 servlet?

您的 HTML 页面正在用户浏览器中呈现,运行 在一个进程中。您的 servlet 运行 在 servlet 引擎中,在 JVM 中,在不同的进程中,可能在不同的计算机上。

它们唯一的通信方式是通过从浏览器到 servlet 引擎的 HTTP 请求。

浏览器无法在 JVM 中找到 classes,它所能做的就是盲目地向 HTML 中呈现的 URL 发送 HTTP 请求,并希望servlet 引擎响应。

可能会提供一个 servlet,它根据 HTTP 请求参数中给定的 class 名称发送 HTTP 请求,然后执行您的建议。