【发布时间】:2021-03-24 04:05:22
【问题描述】:
作为 JSP 和 Servlet 的初学者,我学习了两种从 HTML 文件调用 Servlet 的方法。一种是使用servlet annotation,另一种是使用XML的映射配置。请原谅我的无知,但是为什么我不能在表单的 action attribute 中简单地写下 Servlet 的名称呢?迫使我们开发人员特别关注 Servlet 的“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);
}
}
我了解映射servlet 为我们提供了灵活性和安全性。但我的问题仍然存在。为什么“直接调用”Servlet 类文件不可用并给出404 error not found?为什么 server 找不到我的 servlet?
【问题讨论】:
-
服务器需要知道哪个 URL 指向哪个 servlet。这就是为什么您需要通过添加 @WebServlet 注释或在 web.xml 中声明它的原因。否则如何知道它必须在哪个包中寻找 servlet ?如果在 2 个不同的包中有 2 个具有相同名称的类怎么办?这就是您需要映射的原因
-
这在上个世纪曾经是可能的,后来发现这是一个巨大的安全漏洞,所以不再可能了。见上面链接的副本。
标签: java servlets request http-status-code-404