Czy mogę wywołać serwlet bez mapowania go w pliku web.xml? [duplikować]

Dec 12 2020

Jeśli mam akcję do serwletu , powinniśmy użyć mapowania w XML, co jest zalecane. Więc wyglądałoby to tak:

Indeks HTML:

<!DOCTYPE html>

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

Mapowanie 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>

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

    }
}

I działa dobrze. Ale moje pytanie brzmi: co, jeśli nie chcę tworzyć mapowania - chcę bezpośrednio wywołać klasę Servlet. Usunąłem mój plik XML i wykonałem wszystkie te linie:

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

I… żaden z nich nie działa. Czy faktycznie mogę wywołać Servlet bezpośrednio bez żadnego mapowania? Jeśli tak, w jaki sposób? Czasami w celach testowych nie muszę tracić czasu na mapowanie każdego serwletu.

Odpowiedzi

1 LiveandLetLive Dec 12 2020 at 05:07

Możesz użyć adnotacji np

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

W rzeczywistości, począwszy od Servlet 3.0, większość programistów woli to od konfiguracji XML.

Zauważ, że specyfikacja serwletu wymaga, aby mapowanie zaczynało się od /. Sprawdź to, aby dowiedzieć się więcej na ten temat.