chcę użyć @WebServlet
adnotacji w webapp Java EE, która biegnie na Tomcat 8.@WebServlet adnotacja nie działa z Tomcat 8
Czytałem, że muszę zadeklarować Servlet wersji 3.1 w moim web.xml
i że moja Servlet musi przedłużyć HttpServlet
. Zrobiłem to wszystko, ale nadal nie działa @WebServlet
. Otrzymuję HTTP 404.
Próbowałem również mojej konfiguracji z metadata-complete="false"
w moim web.xml
, ale nadal nie ma sukcesu.
Oto mój plik web.xml i Servlet.
Pełny kod przykładowy można znaleźć on GitHub.
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app
version="3.1"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>true</param-value>
</context-param>
<!-- http://stackoverflow.com/a/7924117/451634 -->
<!-- Put "-1" to disable this feature -->
<context-param>
<param-name>facelets.REFRESH_PERIOD</param-name>
<param-value>1</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
<!-- JSF -->
<listener>
<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>
<!-- CDI -->
<listener>
<listener-class>org.apache.webbeans.servlet.WebBeansConfigurationListener</listener-class>
</listener>
</web-app>
TestServlet.java
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "TestServlet", urlPatterns = {"*.serve"})
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
try (ServletOutputStream out = resp.getOutputStream()) {
out.write("Hello World".getBytes());
out.flush();
}
}
}
To działa trochę razy, ale innym razem prowadzi do [tajemniczego wyjątku] (https://stackoverflow.com/questions/48979989/). –