Могу ли я вызвать сервлет, не отображая его в web.xml? [дубликат]

Dec 12 2020

Если у меня есть действие с сервлетом , мы должны использовать отображение в XML, что рекомендуется. Так это выглядело бы так:

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>

Класс сервлета

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);

    }
}

И работает нормально. Но мой вопрос в том, что, если я не хочу делать сопоставление - я хочу вызвать класс сервлета напрямую. Я удалил свой XML-файл и сделал все эти строки:

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

И .. ни один из них не работает. Могу ли я вызвать сервлет напрямую, вообще не отображая? Если да, то как? Иногда в целях тестирования мне не нужно тратить время на отображение каждого сервлета.

Ответы

1 LiveandLetLive Dec 12 2020 at 05:07

Вы можете использовать аннотацию, например

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

Фактически, начиная с Servlet 3.0, большинство разработчиков предпочитают это конфигурации XML.

Обратите внимание, что спецификация сервлета требует, чтобы отображение начиналось с /. Проверьте это, чтобы узнать об этом больше.