【问题标题】:Can I invoke Servlet without mapping it in web.xml? [duplicate]我可以调用 Servlet 而不在 web.xml 中映射它吗? [复制]
【发布时间】:2020-12-11 22:05:48
【问题描述】:

如果我对 servletaction,我们应该在 XML 中使用 ma​​pping,这是推荐的。所以它看起来像这样:

HTML 索引:

<!DOCTYPE html>

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

XML 映射:

<web-app..........
  
  <servlet>
  <servlet-name>servlet</servlet-name>
  <servlet-class>ServletOne</servlet-class>
  </servlet>
  
  <servlet-mapping>
  <servlet-name>servlet</servlet-name>
  <url-pattern>/go</url-pattern>
  </servlet-mapping>
  
</web-app>

Servlet 类

public class ServletOne extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String s = req.getParameter("name");
        PrintWriter pw = resp.getWriter();
        pw.println("Welcome " + s);

    }
}

而且效果很好。但我的问题是,如果我不想进行映射怎么办 - 我想直接调用 Servlet 类。我删除了我的 XML 文件,我做了所有这些行:

<form action="ServletOne" method="POST">
<form action="ServletOne.class" method="POST">
<form action="ServletOne.java" method="POST">

而且.. 它们都不起作用。我真的可以直接调用 Servlet 而不需要映射吗?如果是,如何?有时出于测试目的,我不需要浪费时间映射每个 servlet。

【问题讨论】:

    标签: servlets servlet-mapping


    【解决方案1】:

    您可以使用注释,例如

    @WebServlet("/go")
    public class ServletOne extends HttpServlet {
        //...
    }
    

    事实上,从 Servlet 3.0 开始,大多数开发人员更喜欢这种方式而不是 XML 配置。

    请注意,Servlet 规范要求映射以/ 开头。查看this 了解更多信息。

    【讨论】:

    • 您说得对,先生。谢谢,不错的工具。顺便问一下/go中的/是什么意思?为什么我不能简单地写go
    • @Stefan - 这是 Servlet 规范所要求的。我添加了 servlet 规范的链接。
    猜你喜欢
    • 2013-09-24
    • 2015-03-01
    • 2013-01-20
    • 2017-07-22
    • 2012-01-02
    • 1970-01-01
    • 2012-04-17
    • 2016-02-05
    相关资源
    最近更新 更多